JAX's Gradient Checkpointing, implementeret gennem `Jax.CheckPoint` (også kendt som` Jax.Remat`), hjælper med at styre hukommelsesforbruget ved at kontrollere, hvilke mellemværdier der er gemt under den fremadrettede pas af automatisk differentiering. Som standard gemmer JAX alle mellemværdier (rester) til at genbruge dem under bagudpasningen, hvilket kan føre til høje hukommelsesomkostninger, især på hardwareacceleratorer, hvor hukommelsesadgang er dyr [1] [3].
Gradient Checkpointing Mechanism:
1. Rematerialiseringsstrategi: I stedet for at opbevare alle mellemprodukter, tillader 'Jax.CheckPoint` nogle mellemprodukter, der kan beregnes (rematerialiseret) under bagudpasningen. Denne tilgang reducerer hukommelsesforbruget, men øger beregningstiden [1] [3].
2. hukommelsesreduktion: Mens kontrolpointing ikke eliminerer behovet for hukommelse under backpropagation helt (da gradienter stadig kræver hukommelse for mellemværdier), kan det reducere maksimal hukommelsesforbrug ved at undgå opbevaring af visse mellemprodukter [8]. Imidlertid afhænger de faktiske hukommelsesbesparelser af, hvordan kontrolpointing anvendes inden for beregningsgrafen.
3. Reduktion af hukommelsesfragmentering: Selvom `Jax.CheckPoint` primært målretter mod at reducere maksimalhukommelsesforbruget snarere end direkte adressering af hukommelsesfragmentering, kan effektiv brug af kontrolpointing hjælpe med at styre hukommelsesallokeringsmønstre. Ved at kontrollere, når mellemprodukterne gemmes og beregnet, kan det indirekte mindske fragmentering ved at reducere det samlede hukommelsesfodaftryk og potentielt minimere behovet for hyppige tildelinger og forhandlinger [7].
Sammenfattende, mens JAXs gradient -kontrolpointing primært er rettet mod at reducere brug af spidshukommelse ved at rematerialisering af mellemprodukter, kan det indirekte bidrage til bedre hukommelsesstyringspraksis, der hjælper med at afbøde fragmentering ved at optimere hukommelsesallokeringsmønstre. Imidlertid opnås direkte reduktion af hukommelsesfragmentering mere effektivt gennem andre strategier som batchoperationer og overvågning af hukommelsesbrug [7].
Citater:[1] https://docs.jax.dev/en/latest/gradient-checkpointing.html
[2] https://discuss.pytorch.org/t/gradient-checkpointing-and-its-effect-on-memory-and-runtime/198437
[3] https://docs.jax.dev/en/latest/_autosummary/jax.checkpoint.html
[4] https://github.com/google/jax/discussioner/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