Jaxi gradiendi kontrollpunkt, mida rakendatakse `Jax.checkpoint` kaudu (tuntud ka kui` jax.remat`), aitab mälu kasutamist hallata, kontrollides, milliseid vaheväärtusi automaatse diferentseerumise edasiliikumise ajal salvestatakse. Vaikimisi salvestab Jax kõik vaheväärtused (jäägid), et neid tagasipööramise ajal uuesti kasutada, mis võib põhjustada kõrgeid mälukulusid, eriti riistvarakiirendites, kus mälu juurdepääs on kallis [1] [3].
gradiendi kontrollpunkti mehhanism:
1. ümberkujundamise strateegia: kõigi vaheühendite säilitamise asemel lubab `Jax.CheckPoint` tagasipassi ajal mõned vaheühendid (ümberkujundada). See lähenemisviis vähendab mälu kasutamist, kuid suurendab arvutusaega [1] [3].
2. Mälu vähendamine: kuigi kontrollpunkt ei välista mäluvajadust tagapropageerimise ajal täielikult (kuna gradiendid vajavad vaheväärtuste jaoks endiselt mälu), võib see vähendada mälu tipptasemel kasutamist, vältides teatud vaheühendite salvestamist [8]. Tegelik mälu kokkuhoid sõltub aga sellest, kuidas kontrollpunkti arvutusgraafias rakendatakse.
3. Mälu killustatuse vähendamine: kuigi `Jax.CheckPoint` on suunatud peamiselt mälu maksimaalse kasutamise vähendamisele, selle asemel et mälu fragmenteerimist otseselt käsitleda, aitab kontrollpunkti tõhus kasutamine aidata mälu jaotamise mustreid hallata. Juhtides vaheühendite salvestamist ja uuesti kompileerimist, võib see kaudselt leevendada killustumist, vähendades üldist mälu jalajälge ja minimeerides vajadust sagedaste eraldiste ja käitlemiste järele [7].
Kokkuvõtlikult võib öelda, et kuigi Jaxi gradiendi kontrollpunkti eesmärk on peamiselt mälu tipptasemel kasutamise vähendamine vaheühendite ümberkujundamisega, võib see kaudselt aidata kaasa paremate mäluhalduspraktikatele, mis aitavad killustumist leevendada, optimeerides mälu jaotamise mustreid. Mälu killustatuse otsene vähendamine saavutatakse tõhusamalt muude strateegiate kaudu, näiteks partiimistoimingute ja mälu kasutamise jälgimise kaudu [7].
Tsitaadid:[1] https://docs.jax.dev/en/latest/gradient-checkpoting.html
]
[3] https://docs.jax.dev/en/latest/_autosummary/jax.checkpoint.html
[4] https://github.com/google/jax/dicusions/20252
[5] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
]
[7] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices
[8] https://github.com/google/jax/issues/19822