Jax menangani fragmentasi memori secara berbeda pada GPU dibandingkan dengan TPU karena arsitektur yang melekat dan desain perangkat ini.
fragmentasi memori di GPU
- Strategi Preallocation: Jax Preallocates 75% dari total memori GPU secara default ketika operasi pertama dijalankan. Strategi ini meminimalkan alokasi overhead dan fragmentasi memori tetapi dapat menyebabkan kesalahan di luar memori jika tidak dikelola dengan benar [1] [3].
- Masalah fragmentasi memori: GPU memiliki hierarki memori yang kompleks, yang dapat memperburuk masalah fragmentasi memori. Kompleksitas ini membuatnya menantang bagi Jax untuk mengelola memori secara efisien tanpa fragmentasi [6].
- Kurangnya defragmentasi otomatis: Tidak seperti TPU, GPU tidak memiliki defragmentasi memori otomatis bawaan di JAX. Menerapkan fitur semacam itu dipertimbangkan tetapi saat ini tidak direncanakan [7].
fragmentasi memori pada TPU
- Hierarki memori yang disederhanakan: TPU memiliki hierarki memori yang lebih sederhana dibandingkan dengan GPU, yang mengurangi kemungkinan masalah fragmentasi memori yang signifikan [6].
- Defragmentasi memori otomatis: Backend TPU TFRT mendukung defragmentasi memori otomatis, yang membantu mempertahankan penggunaan memori yang efisien dan mengurangi fragmentasi [7].
- Pemrosesan berurutan: Data proses TPU secara berurutan, yang dapat menyebabkan pola penggunaan memori yang lebih dapat diprediksi dan berpotensi lebih sedikit fragmentasi dibandingkan dengan pemrosesan paralel pada GPU [8].
Secara keseluruhan, manajemen memori Jax pada GPU lebih rentan terhadap fragmentasi karena kurangnya defragmentasi otomatis dan hierarki memori GPU yang kompleks, sedangkan TPU menawarkan pendekatan yang lebih ramping dengan kemampuan defragmentasi bawaan.
Kutipan:[1] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://arxiv.org/pdf/2309.07181.pdf
[3] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://proending.neurips.cc/paper_files/paper/2023/file/42c40aff7814e9796266e12053b1c610-paper-conference.pdf
[5] https://docs.jax.dev/en/latest/device_memory_profiling.html
[6] https://massedcompute.com/faq-answers/?question=how+do+nvidia+gpus+handle+memory+Fragmentation+ compared+to+tpus%3f
[7] https://github.com/google/jax/issues/9064
[8] https://docs.jax.dev/en/latest/pallas/tpu/details.html
[9] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices