Jax atmiņas atkārtotas izmantošanas sistēma ir paredzēta, lai optimizētu atmiņas sadalījumu un samazinātu nevajadzīgu atmiņu piešķīrumu, it īpaši, strādājot ar liela mēroga aprēķiniem paātrinātāju ierīcēs, piemēram, GPU un TPU. Lūk, kā tas darbojas:
1. Masīva izsekošanas laiks Dzīves laiks: Džekss izseko masīvu kalpošanas laiku, lai noteiktu, kad atmiņu var droši izmantot atkārtoti. Tas nozīmē, ka pēc tam, kad masīvs vairs nav vajadzīgs, tā atmiņu var atkārtoti izmantot citām operācijām.
2. Atmiņas atkārtotas izmantošanas mehānisms: veicot aprēķinus, Džekss mēģina atkārtoti izmantot atmiņas blokus no vidējiem blokiem, kas vairs nav nepieciešami. Piemēram, ja aprēķinā tiek izmantots starpposma masīvs un pēc tam izmests, Jax mēģinās atkārtoti izmantot savu atmiņu turpmākajām operācijām. Tas ir īpaši efektīvs, ja funkciju sastādīšanai izmanto `jax.jit`, jo tas palīdz samazināt atmiņas sadalījumu atkārtotu aprēķinu laikā.
3. Bufera ziedojums: vēl viens atmiņas atkārtotas izmantošanas aspekts Jax ir bufera ziedojums. Tas nozīmē norādīt, ka noteiktus ievades buferus var atkārtoti izmantot, lai noturētu izejas vērtības, ja tie sakrīt ar formu un veidu. Tas tiek panākts, izmantojot parametru `donate_argnums` tādās funkcijās kā` jax.pmap` vai `jax.jit`. Ziedojot buferus, Jax var izvairīties no jaunas atmiņas piešķiršanas izejām, tādējādi samazinot vispārējo atmiņas izmantošanu.
4. Ierīces atmiņas piešķiršana: Džekss piešķir atmiņu mērķa ierīcē (piemēram, GPU vai TPU), nevis resursdatora RAM. Šī sadales stratēģija ir optimizēta, lai samazinātu atmiņas sadrumstalotību un samazinātu sadales pieskaitāmās izmaksas, it īpaši, ja tiek preallokēta atmiņa operācijām.
Kopumā JAX atmiņas atkārtotas izmantošanas sistēma palīdz optimizēt veiktspēju, samazinot nevajadzīgus atmiņas sadalījumus un nodrošinot efektīvu ierīces atmiņas izmantošanu, kas ir būtiska liela mēroga aprēķiniem.
Atsauces:[1] https://app.studyraid.com/en/read/11969/381958/memory-management-best-pracices
[2] https://docs.jax.dev/en/latest/faq.html
[3] https://stackoverflow.com/questions/74628777/why-does-gpu-memory-increase-when-rekreating-andreasigning-a-jap
[4] https://github.com/google/jax/discussions/8056
[5] https://docs.jax.dev/en/latest/device_memory_profiling.html
[6] https://news.ycombinator.com/item?id=29128998
[7] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[8] https://www.kaggle.com/code/goktugguvercin/automatic-differenciation-in-jax