Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip išjungimas išankstiniu būdu veikia GPU atminties naudojimą JAX


Kaip išjungimas išankstiniu būdu veikia GPU atminties naudojimą JAX


„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