Emberek, CUDA történt!

kami911 képe

Az AMD éven óta azon dolgozik, hogy az Nvidia-exkluzív Cuda GPU compute stack rendszerét és ökoszisztémáját valamilyen módon futtathatóvá tegye saját eszközein. Azzal, hogy az AMD adatközponti termékeit egyre komolyabban veszik és egyre jobban veszik, könnyű megoldást kellene találnia – a hardveres irányból – az Nvidia által uralt AI-forradalom legnépszerűbb CUDA nevű backendjével való kompatibilitásra. Kezdetben ezt a ROCm (Radeon Open eCosystem) nevű saját ökoszisztémájának HIP és HIPIFY nevű megoldásával képzelte el, ahol a meglévő CUDA kódokat kell portolni a HUP segítségével AMD környezeteken is futtatható megoldásra. A portolás idő és pénz, így kétséges, hogy érdemes egy szolgáltató cégnek vállalni a kockázatot, hogy egy jól bevált szállítót és megfelelően felépített programokat lecseréljen egy olcsóbb, de további munkát igénylő megoldásra. Korábban említett HIP is egy olyan API, amelyet az alkalmazás fejlesztéséhez használnak annak érdekében, hogy futtatható legyen egy AMD vagy Nvidia GPU-n. Ez az hatékony API lehetővé teszi, hogy minimális erőfeszítéssel ugyanazon forráskódból fordítsanak, mind az AMD, mind a Nvidia GPU-kra. Ha az alkalmazás már CUDA-ban van megírva, és azt szeretnék kiterjeszteni az AMD GPU-kra, akkor pedig a HIPIFY eszköz használható. Ez az eszköz automatikusan átalakítja a forrást CUDA-ról HIP-re.

Az tehát látszik, hogy az AMD évek óta törekszik rá, hogy könnyebbé tegye az eredetileg Nvidia CUDA API-t célzó kódok futtatását a HIP/ROCm rendszerén. Ugyanakkor még mindig szükség van fejlesztői erőforrásra ezzel kapcsolatban. A eszközök minősége folyamatosan javult. Például a már említett HIPIFY segítségével, működhet az automatikus generálás. Bár ez sem egyszerű, azonnali és garantált megoldás – különösen akkor – ha a legjobb teljesítményt kívánják vele elérni. Az elmúlt két esztendőben az AMD csendben támogatott egy fejlesztést, amely a ROCm technológia felhasználásával lehetővé teszi a Nvidia CUDA binárisok futtatását AMD grafikus hardveren bármiféle módosítás nélkül. A gyakorlatban, ez sok meglévő feladatra egy kész megoldás a végfelhasználóknak a CUDA-képes szoftverek futtatására az AMD hardvereit használva, fejlesztői beavatkozás nélkül

Ez a projekt, amelyet néhány évvel ezelőttről ZLUDA néven ismerünk, kezdetben az Intel grafikus kártyákkal kívánta kompatibilissé tenni a CUDA-t. A nyílt forráskódú projekt azt célozta, hogy egy beépített CUDA implementációt nyújtson az Intel grafikus kártyákhoz az Intel oneAPI Level Zero tetején. A ZLUDA-t az Intel végül nem segítette tovább, és nem is hozta forgalomba a szoftvert. A projektet megszüntették, de kiderült, hogy az azt megvalósító fejlesztő, az akkor az Intelnél dolgozó Andrzej Janik, 2022-ben szerződött az AMD-hez, hogy hatékonyan alkalmazza a ZLUDA-t az AMD GPU-kon a HIP/ROCm használatával. A projekt, amelynek fejlesztése két évig tartott, immáron lehetővé teszi a CUDA kompatibilitást az AMD eszközein eredeti forráskód módosítása nélkül is.

Annak ellenére, hogy az AMD szintén nem indult el a ZLUDA kereskedelmi forgalomba hozatalának útján, az AMD a finanszírozási időszak lejárta után a fejlesztő nyílt forráskódúvá tehette a projektet. A Phoronix által végzett teljesítménytesztek azt mutatják, hogy az AMD ZLUDA implementációja meglepően jól teljesít különböző tesztekben. A ZLUDA programkönyvtár használatával a fejlesztők hatékonyan kikerülhetik a CUDA-t, ami egyszerű működést tesz lehetővé Radeon GPU-kon. Annak ellenére, hogy az AMD megszüntette a támogatást, a projekt nyílt forráskódú lett és folyamatos hozzájárulásokat vár a fejlesztői közösségtől.

A Phoronix teljesítménytesztjei kimutatták, hogy a ZLUDA jelentősen növeli a teljesítményt bizonyos alkalmazásokban, például a Blender 4.0 leképzési feladatoknál, ahol lehetővé teszi az AMD GPU-knak, hogy 10-20%-kal meghaladják a natív ROCm/HIP megoldások teljesítményét. Annak ellenére, hogy vannak korlátozások, mint például az OptiX és PTX szerelvény nyelvek részleges támogatása, az eredmények általánosságban pozitívak. A Geekbench tesztek szerint a ZLUDA használata CUDA-optimalizált binárisokkal akár 75%-kal növelheti a teljesítményt (bár egyes esetekben 60%-s teljesítmény csökkenés is látszik, de az talán kiküszöbölhető) az általános OpenCL futtatásokhoz képest.

Tesztek készültek a stabil NAMD 2.14 kiadással is. A NAMD régóta kínál Nvidia CUDA optimalizált verziókat a molekuladinamika szoftverében, bár csak a 2.15 alpha verzióbanjelent meg a ROCm a támogatás, és még nem a újabb NAMD 3.0 béta verziókban. A ZLUDA-val viszont elérhetővé vált a NAMD 2.14 CUDA kiadások optimális használata is Radeon GPU-kon gyorsítóval. Meglehetősen jó teljesítménnyel és forráskód-változtatások nélkül használhatóvá vált a szoftver – csak a standard NAMD CUDA kiadás binárisának használatával.

A Blender esetében a ZLUDA teljesítménye volt a legérdekesebb... A CUDA (OptiX nélküli) backend használata mutatta, hogy a Radeon teljesítmény meglehetősen versenyképes a Nvidia kártyákkal szemben.

A Blenderben a CUDA backend már évek óta jelen van, és a Blender fejlesztői eltávolították az OpenCL-t, hozzáadták a Radeon HIP backendet. De igazán meglepő az, hogy a ZLUDA + CUDA backend használatával kissé gyorsabb volt, mint a natív Radeon HIP rendszerrel.

Úgy tűnik, az AMD üzleti döntésére vezethető vissza a projekt megszüntetése. Bizonyos szempontból azonban érthető, mivel 2024-ben most már több szoftvercsomag is natív módon támogatja a ROCm/HIP-et, mint néhány évvel korábban. Ha a ZLUDA két évvel ezelőtt elérhető lett volna az AMD hardvereken, teljesen más helyzet alakulhatott volna ki. De mostanra az AMD képes stabil szoftverrel ellátott GPU-kat szállítani, és a szoftveres ökoszisztéma is jobban támogatja a ROCm-t.

De a ROCm még mindig korántsem olyan elterjedt 2024-ben, mint az Nvidia CUDA. Az Nvidia CUDA évek óta tartó uralma miatt mindig lesz olyan szoftver, amely célzottan támogatja a CUDA-t, de nem támogatja az AMD GPU-kat, legyen az már nem támogatott, vagy lejárt verzió vagy a fejlesztői erőforrások hiánya miatt. Ezért még mindig van értéke a ZLUDA erőfeszítésének. A ZLUDA fantasztikus technikai csoda a GPU-számítási lehetőségek bemutatására és a CUDA-only szoftverek futtatására a Radeon GPU-kon. Sajnálatos, hogy az AMD nem folytatja tovább az erőfeszítéseket, de legalább most már van erre egy nyílt forráskódú megoldás. Érdekes lesz látni, hogy a főleg Rust programozási nyelven írt, open-source kód hogyan fejlődik, és hogy van-e elég közösségi támogatás és igény a könnyű CUDA szoftver bináris támogatásra az AMD GPU-kon. Andrzej Janik nem fűzött túl sok reményt a crowd-fundinghoz és adományok révén történő fejlesztéshez.

Bár az elmúlt években folyamatosan nőtt a ROCm/HIP-portált szoftverek száma, nehéz megérteni, miért döntött az AMD úgy, hogy megszünteti ezt a titkos ZLUDA fejlesztést támogató erőfeszítést. Ha csak egy szerződött fejlesztőről van szó, valószínűleg nem költségvetési korlátokról van szó, de persze a háttérben lehetnek jogi okok is, vagy más nem technikai okok is. Vagy csak nem akarják tovább fokozni a fejlesztői elköteleződést az Nvidia magas fallal körülvett kertjének építésében.

A ZLUDA használata esetén is az AMD GPU-kon még mindig hoz néhány ROCm-ból eredeztethető problémát, mint például a hivatalosan támogatott hardverek köre nem a lehető legszélesebb. Nem olyan széles, mint az Nvidia esetében. Szintén a ROCm-ből származó korlátozó tényező, hogy kizárólag a főbb vállalati Linux disztribúcióknak van szánva, és azon kívül a ROCm szoftvertámogatás gyakorlatilag a közösségi erőfeszoítésekre korlátozódik.

Vannak azonban ismert korlátok a ZLUDA részéről is. Például jelenleg csak a ROCm 5.x API célzását támogatja, és nem a frissen kiadott ROCm 6.x verziókat. Ebből következően, ha a legújabb ROCm 5.7 sorozatot használjuk, akkor a ROCm DKMS modulok fordíthatóak le és telepíthetőek fel a Linux 6.5 kernelre, amelyet például a legutolsó Ubuntu 22.04 LTS HWE csomagok tartalmaznak. Remélhetőleg elegendő lesz a közösségi támogatás ahhoz, hogy a ZLUDA-t átvezessék a ROCM 6-ra, így legalább fenntartható lesz a jelenlegi szoftverkiadásokkal. A többi problémát a projekt ezen az oldalon gyűjtötte össze.

A projekt folyamatos AMD ROCm támogatása egyelőre még kérdéses, mert a jelenlegi verzió kompatibilitása egyelőre csak a tavaly nyáron megjelent AMD ROCm 5.7-et támogatja. Az AMD jövőbeli részvétele a projektben is kérdéses, és ezzel együtt a jövőbeli ROCm verziók támogatása is. Mindazonáltal a projekt nyílt forráskódú státusza ösztönzi a közösségi erőfeszítéseket annak kompatibilitásának és funkcionalitásának további fejlesztése érdekében.

Az új verzió letölthető innen. Újdonságok, azaz senki sem várta a Vörös Csapatot - túl sok változás van felsorolni, de általánosságban:

  • Eltávolításra került az Intel GPU-támogatás a fordítóból.
  • Hozzáadásra került az AMD GPU-támogatás a fordítóhoz.
  • Eltávolításra került az Intel GPU hoszt kódja.
  • Hozzáadásra került az AMD GPU hoszt kódja.
  • Több eszközutasítás. Számuk 40-ről 68-ra emelkedett.
  • Több hoszt függvény. Számuk 48-ról 184-re emelkedett.
  • Hozzáadásra került az OptiX keretrendszer koncepciójának megvalósítása.
  • Minimális támogatás hozzáadása a cuDNN, a cuBLAS, a cuSPARSE, a cuFFT, az NCCL, az NVML programkönyvtárakhoz.
  • A ZLUDA indító javítása Windows esetében.