Untuk mengonfigurasi JAX dan menghindari kesalahan out-of-memory (OOM), Anda dapat menggunakan beberapa strategi:
1. Nonaktifkan Preallokasi: Secara default, Jax preallokasi 75% dari total memori GPU. Anda dapat menonaktifkan perilaku ini dengan mengatur variabel lingkungan `xla_python_client_preallocate = false`. Ini akan mengalokasikan memori sesuai kebutuhan, mengurangi kemungkinan kesalahan OOM tetapi berpotensi meningkatkan fragmentasi memori [1] [3].
2. Sesuaikan fraksi memori: Jika preallocation diaktifkan, Anda dapat menyesuaikan fraksi memori GPU yang jax preallocates menggunakan `xla_python_client_mem_fraction = .xx`, di mana` .xx` adalah persentase yang diinginkan. Menurunkan nilai ini dapat membantu mencegah kesalahan OOM saat startup [1] [3].
3. Gunakan Platform Allocator: Mengatur `xla_python_client_allocator = Platform` membuat JAX mengalokasikan dengan tepat apa yang dibutuhkan sesuai permintaan dan menangani memori yang tidak digunakan. Ini lambat dan tidak disarankan untuk penggunaan umum tetapi dapat berguna untuk men -debug masalah OOM atau meminimalkan penggunaan memori [1] [3].
4. Hindari proses bersamaan: Menjalankan beberapa proses JAX atau menggunakan JAX bersama GPU TensorFlow dapat menyebabkan kesalahan OOM. Gunakan `xla_python_client_mem_fraction` untuk mengalokasikan memori secara tepat untuk setiap proses, atau atur` xla_python_client_preallocate = false` [1] [3].
5. Kelola Array Perangkat: Pastikan objek `DeviceArray` dikelola dengan benar. Gunakan `device_get` untuk mengambil data ke host dan memastikan tidak ada referensi untuk objek` deviceArray` tetap untuk membebaskan memori perangkat [2].
6. Optimalkan Model dan Data: Pertimbangkan batching atau mengoptimalkan model dan data Anda untuk mengurangi persyaratan memori. Ini bisa sangat efektif saat bekerja dengan kumpulan data besar atau model kompleks [5].
Kutipan:[1] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://github.com/google/flax/discussions/929
[3] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://docs.jax.dev/en/latest/faq.html
[5] https://forums.developer.nvidia.com/t/batching-mcmc-oom-issue-in-numpyro-jax/321026
[6] https://www.ibm.com/docs/en/was-liberty/base?topic=liberty-runtime-environment-known-restrictions
[7] https://discourse.pymc.io/t/has-anyone-had-memory-issues-with-jax-pecifically/10078
[8] https://community.fabric.microsoft.com/t5/desktop/optimizing-measures-to-avoid-out-of-memory-errors/td-p/570067