Jaxo „VMAP“ funkcijos ir „Just-in-Time“ (JIT) rinkinys yra galingi įrankiai, skirti optimizuoti skaitmeninių skaičiavimų našumą. Štai kaip jie sąveikauja:
sąveika tarp „VMAP“ ir „Jit“
- Vektorizacija ir kompiliacija: „VMAP“ pirmiausia naudojamas vektorizuojant funkcijas, o tai reiškia, kad reikia pritaikyti funkciją elementinėje dalyje per vieną ar daugiau masyvo matmenų. Šis procesas pašalina poreikį aiškių „Python“ kilpų, padidinant skaitomumą ir našumą, panaudojant aparatinės įrangos optimizavimą, pavyzdžiui, GPU ir TPU [1] [3].
- JIT kompiliacija: JIT, kita vertus, kaupia „Python“ funkcijas į XLA optimizuotus vykdomuosius elementus, žymiai padidindamas našumą, paverčiant „Python“ kodą į formą, kurią galima efektyviau atlikti aparatinėje įrangoje [4] [8].
- Derinant „VMAP“ ir JIT: Nors pats „VMAP“ iš esmės neatlieka JIT kompiliacijos, jis gali būti naudojamas kartu su JIT, kad dar labiau optimizuotų našumą. Kai funkcija yra vektorizuota naudojant „VMAP“, JIT pritaikymas gali sudaryti vektorizuotą funkciją, dėl kurios gali būti dar greitesnis vykdymo laikas. Šis derinys yra ypač efektyvus operacijoms, kurias galima paralelizuoti keliuose įrenginiuose, tokiuose kaip GPU ar TPU [4] [5].
- Konkretizavimas ir statiniai argumentai: tiek „VMAP“, tiek JIT reikalauja kruopščiai tvarkyti statinius argumentus ir masyvo dydžius. „VMAP“ gali susidurti su klausimais, panašiais į JIT, kai susiduriama su dinaminiais dydžiais, nes tam gali prireikti pastovaus dydžio įėjimų, kad būtų išvengta betonizavimo klaidų. Naudojant „in_axes“ ir nurodyti statinius argumentus kaip „nė vienas“ gali padėti valdyti šiuos apribojimus [2] [3].
Apibendrinant galima pasakyti, kad „VMAP“ ir JIT yra papildomi įrankiai JAX. „VMAP“ funkcijas paverčia vektorinėmis formomis, kurias galima efektyviai vykdyti šiuolaikinėje aparatinėje įrangoje, o JIT kaupia šias funkcijas, kad gautų papildomą našumo padidėjimą. Derinant abu metodus, galite sukelti labai optimizuotus ir efektyvius skaitmeninius skaičiavimus.
Citatos:[1] https://apxml.com/courses/getting-started-with-Jax/chapter-4-Vectorization-with-Jax/JAX-VMAP-FUNCTION
[2] https://stackoverflow.com/questions/77427904/jax-vmap-jit-hind-the-scenes
[3] https://docs.jax.dev/en/latest/_autosummary/jax.vmap.html
[4] https://www.tensorops.ai/post/should-i-switch-from-bumpy-to- jax-1
[5] https://pyimagesearch.com/2023/02/27/learning-Jax-in-2023-Part-2-JAXS-Power-Tools-grad-jit-vmap-and-pmap/
[6] https://jiayiwu.me/blog/2021/04/05/learning-about-jax-axes-in-vmap.html
[7] https://stackoverflow.com/questions/66548897/jax-vmap-behaviour
[8] https://www.shakudo.io/blog/a-quick-introduction-to- josx
[9] https://dinocausevic.com/2023/06/13/jax-vmap/