Jax naudoja keletą metodų, kaip sumažinti atminties suskaidymą, kai veikia TPU:
1. Atminties hierarchijos panaudojimas: TPU turi sudėtingą atminties hierarchiją, įskaitant didelę pralaidumo atmintį (HBM), vektoriaus atmintį, skaliarinę atmintį ir akumuliatoriaus atmintį. JAX optimizuoja skaičiavimus struktūrizuodamas duomenis, kad būtų kuo mažiau pervedimai tarp šių atminties lygių, o tai padeda sumažinti suskaidymą užtikrinant efektyvų atminties naudojimą [3] [5].
2. Šios strategijos padeda efektyviau valdyti atmintį, sumažindamos suskaidymo tikimybę [3].
3. SHARDING IR LAGINGLELIO PROCIDACIJA: „Jax“ naudoja spragą, kad padalintų skaičiavimus per TPU branduolius, o tai padeda efektyviau valdyti atmintį, paskirstant darbo krūvį. Šis požiūris užtikrina, kad atmintis būtų paskirstyta ir išskirta taip, kad būtų sumažintas suskaidymas [3] [7].
4. Efektyvus duomenų išdėstymas: JAX optimizuoja duomenų išdėstymą, kad atitiktų TPU draugiškus dydžius, dažnai paminkštinimo matmenis iki optimalių dydžių kartotinių (pvz., 128). Tai užtikrina, kad atmintis būtų paskirstyta gretimuose blokuose, mažinant suskaidymą [3] [5].
5. JIT kompiliacija ir atminties pakartotinis naudojimas: „Jax“ „Just-in-Time“ (JIT) kompiliacijos ir atminties pakartotinio naudojimo mechanizmai padeda sumažinti nereikalingus asignavimus. Jei įmanoma, pakartotinai panaudodamas atminties blokus, Jax sumažina naujų paskirstymų dažnį, o tai gali sukelti suskaidymą [1] [3].
Šie metodai kartu padeda sumažinti atminties suskaidymą ir optimizuoti TPU našumą.
Citatos:[1] https://app.studyraid.com/en/read/11969/381958/memory-management-best-praktices
[2] https://www.datacamp.com/tutorial/combine-google-gemma-with-tpus-fine-nune-and-run-inference-with-evenced-gherance-and-speed
[3] https://app.studyraid.com/en/read/11969/381956/tpu-computation-Strategies
[4] https://stackoverflow.com/questions/60871/how-to-solve-memory-fragmentation
[5] https://cloud.google.com/tpu/docs/performance-guide
[6] https://www.kaggle.com/code/matthewdwatson/gemma-2-tpu-fine-tuning
[7] https://docs.jax.dev/en/latest/pallas/tpu/distribed.html
[8] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html