JAX의 PrealLocation 비활성화는 여러 가지 방법으로 GPU 메모리 사용에 영향을 미칩니다.
1. 메모리 할당 전략 : 기본적으로 JAX는 첫 번째 JAX 작업이 실행될 때 총 GPU 메모리의 75%를 Prealloce습니다. 이 전략은 할당 오버 헤드 및 메모리 조각화를 최소화하지만 시스템에 메모리가 충분하지 않은 경우 메모리 외 (OOM) 오류로 이어질 수 있습니다 [1] [3]. 환경 변수를 사용하여 PrealLocation을 비활성화하는`XLA_PYTHON_CLIENT_PREALLOCATE = FALSE '이 동작을 변경하여 필요에 따라 메모리를 할당하기 위해이 동작을 변경하여 전반적인 메모리 사용량을 줄일 수 있지만 메모리 조각화를 증가시킬 수 있습니다 [1] [3].
2. 메모리 조각화 : PrealLocation 비활성화 된 경우 JAX는 메모리 조각화가 더 발생합니다. 이것은 사용 된 총 메모리가 가용 메모리보다 적더라도 큰 인접한 메모리 블록을 할당 할 수 없기 때문에 프로그램이 여전히 메모리가 부족할 수 있음을 의미합니다 [1] [3].
3. 성능 영향 : PrealLocation을 비활성화하면 메모리 할당이 더욱 동적이되고 자주 할당 및 거래로 인해 더 많은 오버 헤드가 필요할 수 있기 때문에 성능이 느려질 수 있습니다 [1] [3].
4. DENCELOCATION : 더 이상 필요하지 않은 메모리를 처리하려면`XLA_PYTHON_CLIENT_ALLOCATOR = Platform`을 사용할 수 있습니다. 그러나이 접근법은 매우 느리고 일반적인 용도에 권장되지는 않지만 메모리 풋 프린트를 디버깅하거나 최소화하는 데 유용 할 수 있습니다 [1] [3].
5. 다른 패키지와의 호환성 : JAX를 가져 오기 전에 PrealLocation을 비활성화하거나 JAX를 사용하는 패키지를 가져와야합니다. 수입 후 환경 변수를 설정하는 것은 효과가 없기 때문입니다 [5] [7].
전반적으로 PrealLocation을 비활성화하면 메모리를보다 유연하게 관리하는 데 도움이 될 수 있지만 성능 및 메모리 관리 전략을 신중하게 고려해야합니다.
인용 :[1] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://docs.nvidia.com/deeplearning/dali/user-guide/docs/advanccics_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-releident-batches/3774
[8] https://stackoverflow.com/questions/73322760/jax-gpu-memory-usage-even-with-cpu-allocation
[9] https://github.com/jax-ml/jax/discussions/19014