Jax 및 Tensorflow는 TPU 메모리 할당을 다르게 처리하여 독특한 설계 철학과 최적화 전략을 반영합니다.
JAX 메모리 할당
-PrealLocation : JAX는 GPU에서 동일한 방식으로 TPU에 메모리를 Prealloce를 수행하지 않으며, 기본적으로 GPU 메모리의 75%를 Prealloce습니다 [1]. 그러나 JAX는 작업이 실행될 때 대상 장치 (TPU)에 메모리를 할당하여 성능을 최적화하기 위해 특정 패턴을 따라야합니다 [5].
- 장치 별 할당 : 사용자가 지정한 장치에 메모리가 할당되지만 TPU에 충분한 자유 메모리가있는 경우 CPU를 사용하도록 지시하더라도 JAX는 TPU에 할당 될 수 있습니다 [3].
- 최적화 : JAX는 가속기 장치의 대규모 계산에 최적화 된 정교한 메모리 할당 전략을 사용합니다. Jitting이 메모리 사용 및 성능을 최적화하기 위해 기능 할 때 정적 모양이 필요합니다 [10].
TensorFlow 메모리 할당
-PrealLocation : GPU의 JAX와 같은 Tensorflow는 기본적으로 메모리를 PrealLocates입니다. 이로 인해 여러 프로세스 나 프레임 워크를 동시에 실행할 때 충돌이 발생할 수 있습니다 [1].
-동적 할당 : TensorFlow를 사용하면 동적 메모리 할당을 허용하여 메모리 사용량을 줄이고 메모리 외 오류를 피하기 위해 구성 할 수 있습니다.
-TPU 통합 : Tensorflow는 TPU와 완벽하게 작동하도록 설계되어 기계 학습 모델을 스케일로 쉽게 배포 할 수 있습니다 [8]. 그러나 TPU에 대한 TensorFlow의 메모리 관리는 JAX의 전략에 비해 명시 적으로 덜 문서화됩니다.
비교
-JAX는 정적 컴파일을 통해 성능을 최적화하고 메모리 할당에 대한 정확한 제어에 중점을 두어 TPU 리소스를보다 효율적으로 사용 할 수 있습니다.
-TensorFlow는 TPU와 고도로 통합되었지만 메모리 사용을 최적화하기 위해 추가 구성이 필요할 수있는보다 역동적 인 환경을 제공합니다.
요약하면, 두 프레임 워크는 TPU에 대한 메모리 할당을 최적화하지만 정적 최적화와 정확한 제어를 강조하는 반면, Tensorflow는 강력한 TPU 통합을 통해보다 역동적 인 접근 방식을 제공합니다.
인용 :[1] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://stackoverflow.com/questions/71175620/cleaning-google-tpu-memory-python
[3] https://github.com/jax-ml/jax/issues/25396
[4] https://cloud.google.com/tpu/docs/cloud-tpu-tools
[5] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices
[6] https://cloud.google.com/tpu/docs/profile-tpu-vm
[7] https://github.com/google/jax/discussions/9756
[8] https://blog.neterra.cloud/en/so-what-is-a-tensor-processing-unit-tpu-by-why-will-be-the-future-of-machine-learning /
[9] https://cloud.google.com/tpu/docs/run-calculation-jax
[10] https://news.ycombinator.com/item?id=29128998