Jax menangani fragmentasi memori pada TPU melalui beberapa strategi yang mengoptimalkan penggunaan memori dan meminimalkan fragmentasi. Berikut adalah beberapa pendekatan utama:
1. Pemanfaatan hierarki memori: TPU memiliki hierarki memori yang canggih, termasuk memori bandwidth tinggi (HBM), memori vektor, memori skalar, dan memori akumulator. JAX mengoptimalkan perhitungan dengan menyusun data untuk meminimalkan transfer antara tingkat memori ini, yang membantu mengurangi fragmentasi memori dengan memastikan penempatan dan akses data yang efisien [1].
2. Tata letak data yang efisien: JAX mendorong mengoptimalkan tata letak data agar sesuai dengan ukuran ramah TPU, seringkali dimensi bantalan untuk menyelaraskan dengan ukuran pemrosesan optimal TPU. Penyelarasan ini membantu mengurangi limbah memori dan fragmentasi dengan memastikan bahwa data diproses dalam potongan yang ditangani secara efisien oleh TPU [1].
3. Prefetching and Buffering: Teknik seperti prefetching data dan menggunakan buffering melingkar atau ganda dapat membantu menyembunyikan latensi akses memori dan mengelola memori secara lebih efisien. Prefetching memastikan bahwa data tersedia saat diperlukan, mengurangi kemungkinan fragmentasi memori karena alokasi yang tertunda [1].
4. Sharding dan pemrosesan paralel: JAX mendukung perhitungan sharding di seluruh inti TPU, yang memungkinkan pemrosesan paralel yang efisien. Dengan membagi data dan perhitungan di beberapa core, JAX dapat mengelola memori secara lebih efektif, mengurangi risiko fragmentasi dengan mendistribusikan beban [1].
5. Profil Memori Perangkat: JAX menyediakan alat untuk profil penggunaan memori perangkat, yang dapat membantu mengidentifikasi dan men-debug masalah yang berhubungan dengan memori, termasuk fragmentasi. Dengan memahami bagaimana memori digunakan, pengembang dapat mengoptimalkan kode mereka untuk meminimalkan fragmentasi dan meningkatkan kinerja keseluruhan [5].
Secara keseluruhan, pendekatan Jax untuk menangani fragmentasi memori pada TPU melibatkan kombinasi mengoptimalkan tata letak data, memanfaatkan hierarki memori TPU secara efisien, dan menggunakan teknik pemrosesan paralel canggih.
Kutipan:[1] https://app.studyraid.com/en/read/11969/381956/tpu-computation-stategy
[2] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[3] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://www.datacamp.com/tutorial/combine-google-gemma-with-tpus-fine-tune-and-run-inference-with-enhanced-performance-and-speed
[5] https://docs.jax.dev/en/latest/device_memory_profiling.html
[6] https://github.com/google/jax/discussions/16177
[7] https://jax.readthedocs.io/en/latest/pallas/tpu/distributed.html
[8] https://nbi.ku.dk/english/theses/masters-theses/albert-alonso-de-la-fuente/albert_alonso_de_la_fuente.pdf