Jax využíva niekoľko techník na minimalizáciu fragmentácie pamäte pri behu na TPU:
1. Využívanie hierarchie pamäte: TPU majú sofistikovanú hierarchiu pamäte, vrátane pamäť s vysokou šírkou pásma (HBM), vektorovej pamäte, skalárnej pamäte a pamäte akumulátora. Jax optimalizuje výpočty štruktúrovaním údajov, aby sa minimalizovali prenosy medzi týmito úrovňami pamäte, čo pomáha znižovať fragmentáciu zabezpečením efektívneho využívania pamäte [3] [5].
2. Stratégie predbežného načítania a vyrovnávacej pamäte: Predbežné načítanie údajov skryje latenciu prístupu pamäte, zatiaľ čo techniky ako kruhové vyrovnávacie pamäte a dvojité vyrovnávanie sa používajú na streamovanie dát a kontinuálny výpočet. Tieto stratégie pomáhajú efektívnejšie riadiť pamäť a znižujú pravdepodobnosť fragmentácie [3].
3. Sharding a paralelné spracovanie: Jax používa na rozdelenie výpočtov medzi jadrami TPU Sharding, čo pomáha efektívnejšie spravovať pamäť distribúciou pracovného zaťaženia. Tento prístup zaisťuje, že pamäť je pridelená a riešená spôsobom, ktorý minimalizuje fragmentáciu [3] [7].
4. Efektívne rozloženie údajov: Jax optimalizuje rozloženia údajov tak, aby zodpovedali veľkostiam priateľským k TPU, často čalúnenia rozmerov na násobky optimálnych veľkostí (napr. 128). To zaisťuje, že pamäť sa prideľuje v susedných blokoch, čím sa znižuje fragmentácia [3] [5].
5. Zostavenie kompilácie a opätovné použitie pamäte: mechanizmy kompilácie Just-In-Time (JIT) a mechanizmy opätovného použitia pamäte pomáhajú minimalizovať zbytočné alokácie. Opätovným použitím pamäťových blokov, ak je to možné, JAX znižuje frekvenciu nových prideľovaní, čo môže viesť k fragmentácii [1] [3].
Tieto techniky spoločne prispievajú k minimalizácii fragmentácie pamäte a optimalizácii výkonu na TPU.
Citácie:[1] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices
[2] https://www.datacamp.com/tutorial/combine-oogle-gemma-with-tpus-fine-tune-and-run-inference-inference-with-enhanced-performance-and-peed
[3] https://app.studyraid.com/en/read/11969/381956/tpu-computation-trategies
[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/distributed.html
[8] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html