JAX používá několik technik k minimalizaci fragmentace paměti při spuštění na TPU:
1. Využití hierarchie paměti: TPU mají sofistikovanou hierarchii paměti, včetně paměti s vysokou šířkou pásma (HBM), vektorové paměti, skalární paměti a paměti akumulátoru. Jax optimalizuje výpočty strukturováním dat, aby se minimalizoval přenosy mezi těmito úrovněmi paměti, což pomáhá snížit fragmentaci zajištěním efektivního využití paměti [3] [5].
2. Strategie předběžného načítání a vyrovnávací paměti: Předběžné načítání dat skrývá latence přístupu k paměti, zatímco pro streamování dat a nepřetržité výpočet se používají techniky, jako jsou kruhové vyrovnávací paměti a dvojité vyrovnávání. Tyto strategie pomáhají efektivněji řídit paměť a snižují pravděpodobnost fragmentace [3].
3. Sharding a paralelní zpracování: JAX používá sharding k rozdělení výpočtů napříč jádry TPU, což pomáhá efektivněji spravovat paměť distribucí pracovní zátěže. Tento přístup zajišťuje, že paměť je přidělena a uvolněna způsobem, který minimalizuje fragmentaci [3] [7].
4. Efektivní rozložení dat: JAX optimalizuje rozložení dat tak, aby odpovídala velikosti přátelské k TPU, často rozměry polstrování na násobky optimálních velikostí (např. 128). Tím je zajištěno, že paměť je přidělena v sousedních blocích, což snižuje fragmentaci [3] [5].
5. Kompilace JIT a opětovné použití paměti: Mechanismy kompilace Jax Just-In-Time (JIT) a opětovné použití paměti pomáhají minimalizovat zbytečné alokace. Opětovným použitím paměťových bloků, pokud je to možné, Jax snižuje frekvenci nových alokací, což může vést k fragmentaci [1] [3].
Tyto techniky společně přispívají k minimalizaci fragmentace paměti a optimalizaci výkonu na TPU.
Citace:[1] https://app.studyraid.com/en/read/11969/381958/Memory-nagement-pest-Practices
[2] https://www.datacamp.com/tutorial/combine-google-gemma-with-tpus-fine-tune-and-inference-with-enhanced-erformance and-rychlostí
[3] https://app.studyraid.com/en/read/11969/381956/tpU-computationstrategies
[4] https://stackoverflow.com/questions/60871/how-tosove-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