JAX tegeleb GPU -de mälu killustatusega võrreldes nende seadmete loomupärase arhitektuuri ja kujundamise tõttu TPU -dega.
GPU -de mälu killustumine
- Preallokatsiooni strateegia: Jax Preallocatesiga 75% kogu GPU mälust vaikimisi, kui esimese toimingu käivitatakse. See strateegia minimeerib jaotamise üldkulud ja mälu killustatus, kuid see võib põhjustada mäluväliseid vigu, kui seda ei hallata õigesti [1] [3].
- Mälu killustatusprobleemid: GPU -del on keeruline mäluhierarhia, mis võib mälu killustatuse probleeme süvendada. See keerukus muudab JAX -i keerukaks mälu tõhusaks haldamiseks ilma killustumiseta [6].
- Automaatse defragmentatsiooni puudumine: Erinevalt TPU-dest ei ole GPU-l Jaxis sisseehitatud mälu defragmentatsiooni. Sellise funktsiooni rakendamist kaalutakse, kuid praegu pole seda plaanitud [7].
Mälu killustumine TPU -del
- Lihtsustatud mäluhierarhia: TPU -del on GPU -dega võrreldes lihtsam mäluhierarhia, mis vähendab oluliste mälu killustatuse probleemide tõenäosust [6].
- Automaatne mälu defragmentatsioon: TFRT TPU taustprogramm toetab mälu automaatset defragmentatsiooni, mis aitab säilitada mälu tõhusat kasutamist ja vähendab killustumist [7].
- Järjestikune töötlemine: TPUS -protsessi andmed järjestikuselt, mis võib põhjustada prognoositavamaid mälu kasutamise mustreid ja potentsiaalselt vähem killustatust, võrreldes GPU -de paralleelse töötlemisega [8].
Üldiselt on Jaxi mäluhaldus GPU-del kartulikum killustatusele, kuna puudub automaatne defragmentatsioon ja keeruline GPU mäluhierarhia, samas kui TPU-d pakuvad sujuvamat lähenemisviisi sisseehitatud defragmentatsiooni võimalustega.
Tsitaadid:[1] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://arxiv.org/pdf/2309.07181.pdf
[3] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
]
[5] https://docs.jax.dev/en/latest/device_memory_profiling.html
]
[7] https://github.com/google/jax/issues/9064
[8] https://docs.jax.dev/en/latest/pallas/tpu/details.html
]