Čak i Nvidia mora učiti od drugih. Bitka GPU jezika tek počinje
Dugo je u industriji vladalo gotovo neupitno pravilo. Nvidia prodaje GPU-ove i računalnu snagu, a CUDA je softversko oružje koje joj daje gotovo monopol u svijetu umjetne inteligencije. Tko želi učinkovito programirati GPU, gotovo uvijek koristi CUDA. Tko koristi CUDA, gotovo sigurno koristi Nvidia karticu. Taj konsenzus postoji već godinama i duboko je ukorijenjen u cijelom AI ekosustavu.
No krajem prošle godine priča je počela mijenjati smjer. Nvidia je iznenada predstavila novu tehnologiju pod nazivom CUDA Tile i pritom izjavila da je riječ o najvećem iskoraku u CUDA-i još od 2006. godine. Takva samouvjerena izjava rijetko dolazi iz Nvidije i odmah je privukla pažnju tehničke zajednice. Razlog za tu promjenu krije se izvan same Nvidije. Kineski istraživački tim razvio je novi programski jezik za GPU pod nazivom TileLang, a njegova temeljna ideja vrlo je slična onome što Nvidia danas promovira kroz CUDA Tile. Još zanimljivije, DeepSeek je s izdanjem verzije V3.2 po prvi put objavio dvije varijante modela, jednu temeljenu na CUDA-i i drugu napisanu u TileLangu. Time se DeepSeek prvi put svjesno udaljio od potpune ovisnosti o CUDA-i.
Ranije je DeepSeek velik dio koda pisao izravno u CUDA-i, pa čak i u PTX-u, Nvidijinom vlasničkom asemblerskom jeziku, kako bi izvukao maksimum performansi. Takav pristup daje brzinu, ali istodobno model čvrsto veže uz Nvidia hardver. TileLang ide potpuno drugim putem. Nije vezan uz jednog proizvođača i omogućuje da isti model relativno lako radi i na drugim platformama, poput Huawei Ascenda. Zbog toga su se pojavile i šale da domaći proizvođači hardvera počinju vršiti pritisak na Nvidiju, pa ona mora učiti i “kopirati”.
No problem je dublji i nije riječ samo o tržišnom pritisku. Dugogodišnji GPU programeri već neko vrijeme osjećaju da CUDA sve teže prati zahtjeve AI ere. CUDA je nastala u vremenu kada su GPU-ovi primarno služili za grafički prikaz, gdje su zadaci bili ujednačeni, ponavljajući i savršeno prilagođeni SIMT modelu, jednoj instrukciji koja istodobno upravlja velikim brojem niti. Za grafiku je to idealno. GPU je poput proizvodne trake na kojoj svi elementi rade isto, samo na različitim podacima.
AI zaključivanje funkcionira drukčije. Sljedeći korak često ovisi o rezultatu prethodnog, tok izvršavanja je razgranat, a zadaci nisu jednako teški. GPU i dalje tjera niti da se kreću zajedno, pa brže niti čekaju sporije, a dio performansi se gubi. Uz to, AI modeli stalno ponovno koriste međurezultate, dok CUDA-ina paradigma često forsira zapisivanje u globalnu memoriju i ponovno čitanje, što dodatno troši vrijeme i energiju. Zbog svega toga CUDA programiranje postaje sve zahtjevnije. Teško ga je pisati, teško optimizirati, a programer mora razumjeti ne samo algoritam, već i ručno upravljati memorijom, prijenosima podataka i sinkronizacijom. Dovoljna je mala pogreška da performanse drastično padnu.
Nvidia je taj problem prepoznala još prije desetak godina i 2014. pokrenula cuDNN. Ideja je bila jednostavna. Umjesto da svaki programer sam piše kompleksne AI operacije u CUDA-i, Nvidia ih unaprijed optimizira i nudi kao gotove blokove, poput konvolucija ili množenja matrica. To je brzo, pouzdano i praktično, ali ima i jasna ograničenja. Možete koristiti samo ono što postoji. Kada se pojavi novi operator, opet se morate vratiti sirovoj CUDA-i.
TileLang bira drukčiji pristup. Umjesto da nudi više gotovih rješenja, preuzima na sebe najteži dio posla, raspoređivanje GPU resursa. Programer opisuje što želi izračunati i gdje se podaci nalaze, a pametni kompajler odlučuje kako to mapirati na hardver. Rezultat je kraći, čitljiviji kod koji zadržava visoke performanse. U nekim primjerima broj linija koda pada s nekoliko stotina na manje od stotinu, dok se brzina izvođenja čak povećava. Još važnije, TileLang pokazuje da se GPU može koristiti vrlo učinkovito i bez ručnog pisanja CUDA koda, ako je jezik dovoljno izražajan, a kompajler dovoljno pametan. Upravo tu Nvidia više nije mogla stajati po strani. CUDA Tile može se promatrati kao službeni, Nvidijin odgovor na taj trend, svojevrsna verzija pristupa koji je TileLang već pokazao u praksi.
Poruka je jasna. Nvidia želi zadržati zajednicu unutar vlastitog ekosustava i ponuditi moderno rješenje prije nego što se programeri masovno okrenu jezicima trećih strana. CUDA Tile, kao tehnologija prve strane, nudi najkraći i najsigurniji put do optimalnih performansi na Nvidia GPU-ovima. Ipak, to ne znači da TileLang gubi smisao. CUDA Tile ima jedno jasno ograničenje, radi samo na Nvidia hardveru. Upravo je hardverska neovisnost najveća snaga TileLanga. Ako takav pristup zaživi, pitanje više neće biti koliko je snažan CUDA ekosustav, nego hoće li vaš kod sutra raditi i na drugom čipu. U tom scenariju, bilo da se radi o AMD GPU-u, Google TPU-u ili domaćem AI akceleratoru, model se ne mora pisati ispočetka.
Sličnu priču već smo vidjeli u industriji videoigara. DirectX 12 je snažno vezan uz Windows i nudi izvrsne performanse, ali to nije spriječilo otvorenije tehnologije poput Vulkana da postupno osvoje sve veći dio tržišta. Programeri često biraju slobodu i dugoročnu fleksibilnost, čak i kada to znači odreći se dijela ekskluzivnih optimizacija.
Zato je danas borba oko GPU programskih jezika žešća nego ikada. Čak i Nvidia, koja je godinama diktirala pravila igre, sada mora gledati sa strane, učiti od drugih i prilagođavati se novoj stvarnosti.
