Aby skonfigurować alokacja pamięci JAX, można użyć kilku zmiennych środowiskowych:
1. `XLA_PYTHON_CLIENT_PREALLOCATE`: Ta zmienna kontroluje, czy JAX Preallocuje pamięć GPU. Ustawienie go na „false” wyłącza preallokację, powodując, że Jax przydziela pamięć w razie potrzeby. Może to jednak prowadzić do fragmentacji pamięci i nie zawsze może działać zgodnie z oczekiwaniami w niektórych wersjach JAX [1] [3] [5].
2. `XLA_PYTHON_CLIENT_MEM_FRACTION`: Ta zmienna określa procent całkowitej pamięci GPU, którą JAX powinien prealokować. Na przykład ustawienie go na „.10” zaprzeczy 10% pamięci GPU. Może to pomóc w uniknięciu błędów poza pamięcią, ale może prowadzić do ostrzeżeń OOM, jeśli nie jest właściwie zarządzane [1] [3] [5].
3. `XLA_PYTHON_CLIENT_ALLOCATOR = Platform`: To ustawienie sprawia, że JAX przydziela dokładnie to, co jest potrzebne na żądanie i pamięć, która nie jest już potrzebna. Chociaż nie jest to zalecane do ogólnego użytku ze względu na powolną wydajność, może być przydatny do debugowania lub minimalizacji użycia pamięci GPU [1] [3].
Zmienne te można ustawić przed uruchomieniem aplikacji JAX w celu dostosowania zachowania alokacji pamięci. Jednak niektórzy użytkownicy zgłosili niespójne zachowanie z tymi ustawieniami w niektórych wersjach JAX [5] [9].
Cytaty:[1] https://kolonist26-jax-kr.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://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://docs.jax.dev/en/latest/installation.html
[5] https://github.com/google/jax/issues/19267
[6] https://www.maplesoft.com/support/help/maple/view.aspx?path=envvar
[7] https://docs.jax.dev/en/latest/faq.html
[8] https://github.com/google/jax/issues/1491
[9] https://github.com/google/jax/issues/19035
[10] https://stackoverflow.com/questions/73322760/jax-gpu-memory-usage-even-with-cpu-allocation