„Jax“ išankstinis išjungimas daro įtaką GPU atminties naudojimui keliais būdais:
1. Atminties paskirstymo strategija: Pagal numatytuosius nustatymus „Jax“ išankstinis 75% visos GPU atminties, kai vykdoma pirmoji JAX operacija. Ši strategija sumažina paskirstymo pridėtines išlaidas ir atminties suskaidymą, tačiau gali sukelti ne atminties (OOM) klaidas, jei sistema neturi pakankamai atminties [1] [3]. Išjungimas išankstiniu būdu naudojant aplinkos kintamąjį `XLA_PYTHON_CLIENT_PERELLOCLACE = FALSES KEITIMAS Tokį elgesį, kad būtų galima paskirstyti atmintį pagal poreikį, o tai gali sumažinti bendrą atminties naudojimą, tačiau gali padidinti atminties suskaidymą [1] [3].
2. Atminties suskaidymas: išjungus išankstinį leidimą, Jax yra labiau linkęs į atminties suskaidymą. Tai reiškia, kad net jei panaudota visa atmintis yra mažesnė už turimą atmintį, programa vis tiek gali baigtis atmintimi dėl nesugebėjimo skirti didelių gretimų atminties blokų [1] [3].
3. Veiklos poveikis: Išankstinis išankstinis nustatymas gali sukelti lėtesnį našumą, nes atminties paskirstymas tampa dinamiškesnis ir gali būti daugiau pridėtinės vertės dėl dažno paskirstymo ir sandorių [1] [3].
4. Dalyvavimas: norėdami išskirstyti atminties, kurios nebereikia, galite naudoti „xla_python_client_allocator = platforma“. Tačiau šis požiūris yra labai lėtas ir nerekomenduojamas naudoti bendram naudojimui, tačiau jis gali būti naudingas derinant ar sumažinant atminties pėdsaką [1] [3].
5. Suderinamumas su kitais paketais: Prieš importuojant JAX ar bet kokius paketus, kurie naudoja JAX, reikia atlikti išankstinį išankstinį nustatymą, nes aplinkos kintamųjų nustatymas po importo neturės jokio poveikio [5] [7].
Apskritai, išjungimas išankstiniu būdu gali padėti lanksčiau valdyti atmintį, tačiau reikia atidžiai apsvarstyti našumo ir atminties valdymo strategijas.
Citatos:[1] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://docs.nvidia.com/deeplearning/dali/user-guide/docs/advanced_topics_performance_tuning.html
[3] https://kolonist26-Jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://brainpy.tech/docs/apis/generated/brainpy.math.disable_gpu_memory_preallocation.html
[5] https://github.com/jax-ml/jax/discussions/21962
[6] https://dokumen.pub/google-Jax-cookbook.html
[7] https://forum.pyro.ai/t/gpu-memory-preallocated-and-not-reeledy-between-batches/3774
[8] https://stackoverflow.com/questions/733322760/jax-gpu-memory-usage-even-with-cpu-Allocation
[9] https://github.com/jax-ml/jax/discussions/19014