Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Bagaimana cara mengkonfigurasi JAX untuk menghindari kesalahan OOM


Bagaimana cara mengkonfigurasi JAX untuk menghindari kesalahan OOM


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