Pemeriksaan gradien JAX, diimplementasikan melalui `jax.checkpoint` (juga dikenal sebagai` jax.remat`), membantu mengelola penggunaan memori dengan mengendalikan nilai -nilai perantara mana yang disimpan selama lintasan maju dari diferensiasi otomatis. Secara default, Jax menyimpan semua nilai menengah (residu) untuk menggunakannya kembali selama pass mundur, yang dapat menyebabkan biaya memori yang tinggi, terutama pada akselerator perangkat keras di mana akses memori mahal [1] [3].
Mekanisme Pemeriksaan Gradien:
1. Strategi Rematerialisasi: Alih -alih menyimpan semua perantara, `jax.checkpoint` memungkinkan beberapa perantara untuk dihitung ulang (difatialisasi ulang) selama lulus mundur. Pendekatan ini mengurangi penggunaan memori tetapi meningkatkan waktu perhitungan [1] [3].
2. Pengurangan Memori: Sementara pos pemeriksaan tidak menghilangkan kebutuhan memori selama backpropagation sepenuhnya (karena gradien masih membutuhkan memori untuk nilai -nilai menengah), dapat mengurangi penggunaan memori puncak dengan menghindari penyimpanan zat antara tertentu [8]. Namun, penghematan memori aktual tergantung pada bagaimana pos pemeriksaan diterapkan dalam grafik perhitungan.
3. Mengurangi fragmentasi memori: Meskipun `jax.checkpoint` terutama menargetkan pengurangan penggunaan memori puncak daripada secara langsung mengatasi fragmentasi memori, penggunaan pos pemeriksaan yang efisien dapat membantu mengelola pola alokasi memori. Dengan mengendalikan ketika perantara disimpan dan dihitung ulang, ia secara tidak langsung dapat mengurangi fragmentasi dengan mengurangi jejak memori secara keseluruhan dan berpotensi meminimalkan kebutuhan untuk alokasi dan deallokasi yang sering terjadi [7].
Singkatnya, sementara pos pemeriksaan gradien Jax terutama ditujukan untuk mengurangi penggunaan memori puncak dengan meremehkan perantara, secara tidak langsung dapat berkontribusi secara tidak langsung pada praktik manajemen memori yang lebih baik yang membantu mengurangi fragmentasi dengan mengoptimalkan pola alokasi memori. Namun, pengurangan langsung fragmentasi memori lebih efektif dicapai melalui strategi lain seperti operasi batching dan memantau penggunaan memori [7].
Kutipan:[1] https://docs.jax.dev/en/latest/gradient-checkpointing.html
[2] https://discuss.pytorch.org/t/gradient-checkpointing-and-its-nfect-on-memory-and-runtime/198437
[3] https://docs.jax.dev/en/latest/_autosummary/jax.checkpoint.html
[4] https://github.com/google/jax/discussions/20252
[5] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[6] https://discuss.pytorch.org/t/gradient-checkpointing-does-not-reduce-memory-usage/71421
[7] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices
[8] https://github.com/google/jax/issues/19822