TPU의 메모리 계층 구조는 계산 중에 데이터를 저장하고 액세스하는 방법에 영향을 미쳐 JAX의 메모리 조각화에 크게 영향을 미칩니다. TPU에는 높은 대역폭 메모리 (HBM), VMEM (Vector Memory), 스칼라 메모리 및 축적기 메모리가 포함 된 정교한 메모리 계층이 있습니다. 이 계층 구조는 다른 메모리 레벨 간의 데이터 전송을 최소화하여 성능을 최적화하도록 설계되어 메모리 조각화를 줄일 수 있습니다.
TPU의 JAX에서 메모리 파편 :
1. 데이터 레이아웃 및 메모리 할당 : JAX는 호스트 RAM이 아닌 대상 장치 (TPU)에 메모리를 할당합니다. 메모리 조각화를 최소화하려면 효율적인 데이터 레이아웃이 중요합니다. TPU 친화적 인 크기와 일치하는 패딩 텐서는 연속 블록에 메모리가 할당되도록함으로써 조각화를 줄이는 데 도움이 될 수 있으며, 이는 관리 및 재사용이 더 쉽습니다 [1] [4].
2. 정적 모양 및 JIT 컴파일 : JAX는`jax.jit`을 사용할 때 정적 모양이 필요합니다. 이는 컴파일러가 런타임 중 동적 메모리 할당을 피함으로써 메모리 사용량을 최적화하고 단편화를 줄이는 데 도움이됩니다. 이 정적 최적화는 메모리가 효율적이고 일관되게 할당되도록하여 단편화 가능성을 줄입니다 [6].
3. 메모리 계층 구조 활용 : TPU에서 다양한 메모리 수준을 활용하여 JAX는 데이터 액세스 패턴을 최적화 할 수 있습니다. 예를 들어, 커널 실행 중에 고속 데이터 액세스에 VMEM을 사용하면 HBM으로 자주 전송 될 필요성이 줄어들어 제대로 관리되지 않으면 메모리 조각화로 이어질 수 있습니다 [5].
4. 병렬 처리 및 샤딩 : 파이프 라인 병렬 처리 및 샤드와 같은 기술은 여러 TPU 코어에 대한 데이터를 분배하여 개별 코어에 대한 메모리 압력을 줄이고 각 핵심이 데이터의 일부를 효율적으로 처리하도록함으로써 단편화를 최소화하는 데 도움이됩니다 [1] [3].
요약하면, TPU의 메모리 계층은 효율적인 메모리 할당 및 데이터 액세스를위한 프레임 워크를 제공함으로써 JAX의 메모리 조각화에 영향을 미칩니다. 데이터 레이아웃을 최적화하고 정적 모양을 활용하고 병렬 처리 기술을 활용함으로써 개발자는 메모리 조각화를 최소화하고 TPU의 전반적인 성능을 향상시킬 수 있습니다.
인용 :[1] https://app.studyraid.com/en/read/11969/381956/tpu-comcomputation-srtrateings
[2] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[3] https://jax-ml.github.io/scaling-book/tpus/
[4] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices
[5] https://docs.jax.dev/en/latest/pallas/tpu/details.html
[6] https://news.ycombinator.com/item?id=29128998
[7] https://jax.readthedocs.io/en/latest/pallas/tpu/distributed.html
[8] https://github.com/google/jax/discussions/12071