ในการกำหนดค่าการจัดสรรหน่วยความจำ JAX สามารถใช้ตัวแปรสภาพแวดล้อมหลายอย่างได้:
1. `xla_python_client_preallocate`: ตัวแปรนี้ควบคุมว่า Jax preallocates หน่วยความจำ GPU หรือไม่ การตั้งค่าเป็น `false` ปิดใช้งาน preallocation ทำให้ Jax จัดสรรหน่วยความจำตามต้องการ อย่างไรก็ตามสิ่งนี้สามารถนำไปสู่การกระจายตัวของหน่วยความจำและอาจไม่ได้ผลตามที่คาดไว้ในบางรุ่นของ Jax [1] [3] [5]
2. `xla_python_client_mem_fraction`: ตัวแปรนี้ระบุเปอร์เซ็นต์ของหน่วยความจำ GPU ทั้งหมดที่ JAX ควรตั้งไว้ล่วงหน้า ตัวอย่างเช่นการตั้งค่าเป็น `.10` จะกำหนดล่วงหน้า 10% ของหน่วยความจำ GPU สิ่งนี้สามารถช่วยหลีกเลี่ยงข้อผิดพลาดนอกหน่วยความจำ แต่อาจนำไปสู่คำเตือน oom หากไม่ได้รับการจัดการอย่างถูกต้อง [1] [3] [5]
3. `xla_python_client_allocator = platform`: การตั้งค่านี้ทำให้ Jax จัดสรรสิ่งที่จำเป็นตามความต้องการและหน่วยความจำดีลที่ไม่ต้องการอีกต่อไป แม้ว่าจะไม่แนะนำให้ใช้งานทั่วไปเนื่องจากประสิทธิภาพที่ช้า แต่ก็มีประโยชน์สำหรับการดีบักหรือลดการใช้หน่วยความจำ GPU [1] [3]
ตัวแปรเหล่านี้สามารถตั้งค่าก่อนเรียกใช้แอปพลิเคชัน JAX ของคุณเพื่อปรับแต่งพฤติกรรมการจัดสรรหน่วยความจำ อย่างไรก็ตามผู้ใช้บางคนได้รายงานพฤติกรรมที่ไม่สอดคล้องกันกับการตั้งค่าเหล่านี้ใน Jax บางรุ่น [5] [9]
การอ้างอิง:[1] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://docs.nvidia.com/deeplearning/dali/user-guide/docs/advanced_topics_performance_tuning.html
[3] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://docs.jax.dev/en/latest/installation.html
[5] https://github.com/google/jax/issues/19267
[6] https://www.maplesoft.com/support/help/meple/view.aspx?path=envvar
[7] https://docs.jax.dev/en/latest/faq.html
[8] https://github.com/google/jax/issues/1491
[9] https://github.com/google/jax/issues/19035
[10] https://stackoverflow.com/questions/73322760/jax-gpu-memory-usage-usage-even-with-cpu-allocation