Eszközök

Mesterséges intelligenciával generált szöveg

Hugging Face 207 WebGPU kernelje: gyorsabb és tesztelhető böngészőalapú AI-műveletek

A Hugging Face WebAI csapata bemutatta a @huggingface/kernels könyvtárat és a webgpu-kernels gyűjtemény első 207 WebGPU kerneljét, melyek Apache-2.0 licenc alatt érhetők el.

Hugging Face 207 WebGPU kernelje: gyorsabb és tesztelhető böngészőalapú AI-műveletek

A Hugging Face WebAI csapata azt tűzte ki célul, hogy a böngészőben futó modellek inferálása gyors és egyszerű legyen. Ez több rétegben valósul meg: a modelleket böngészőbarát reprezentációkra kell hozni, a futtatókörnyezeteknek hatékony végrehajtási terveket kell készíteniük, és a legalacsonyabb szinten működő GPU-műveleteknek ki kell használniuk a különböző eszközök és böngészők adottságait.

Ennek az első rétegét jelentik a ma publikált eszközök:

  • A webgpu-kernels szervezetben elérhető 207 WebGPU kernel, mindegyik külön repositoryként a Hugging Face Hubon. A gyűjtemény Apache-2.0 licenc alatt érhető el.
  • @huggingface/kernels, egy minimális JavaScript könyvtár, amely képes betölteni, előkészíteni és a Hubról közvetlenül futtatni verzionált WebGPU kernelt.
  • Fleet, egy böngészőben futó mérő- és tesztsorozat, amely lefuttatja és pontozza a kernelt a helyi hardveren, és – a felhasználó beleegyezésével – privát teljesítmény- és helyességi bizonyítékokat gyűjt a közösség számára.

Miért fontosak a kernel-ek különálló csomagként?

A böngészőben futó modell végső soron GPU-műveletek sorozatává alakul (mátrixszorzások, normalizálás, konvolúciók, attention-primitívek, kvantálási és adatelrendezési transzformációk stb.). A WebGPU és a WGSL egységes API és shader-nyelv biztosítanak hozzáférést ezekhez a műveletekhez a modern böngészőkön keresztül, de a hordozhatóság még nem garantál teljesítményt: ugyanazt az eredményt adó shader-ek jelentősen eltérhetnek sebességben különböző GPU-kon, böngészőkben vagy driver-állapotokban.

Ezért fontos, hogy az egyes alacsony szintű műveletek külön, verzionált és tesztelt csomagokban legyenek elérhetők: így a magasabb szintű futtatókörnyezetek stabil API-val dolgozhatnak, miközben a kernel-implementációk függetlenül fejlődhetnek és optimalizálhatók.

Mit tartalmaz egy kernel repository?

Minden kernelnek saját kártyája (kernel card) és repository-ja van a Hubon, amely dokumentálja az operáció szemantikáját, bemeneteit, kimeneteit, attribútumait, támogatott típusait, forrásfájljait és egy futtatható @huggingface/kernels példát. A repository a következő alapvető elemeket tartalmazza:

  • manifest.json: az operációs szerződés forrása (bemenetek, kimenetek, attribútumok, típuskorlátozások, shape-szabályok).
  • metadata.json: a kernel azonosítója, ellenőrző összeg és származási információk.
  • test.json: helyességi tesztesetek a várt működés ellenőrzésére.
  • bench.json: benchmark és hangolási esetek, amelyek a terheléseket reprezentálják.
  • *.wgsl.jinja: paraméterezett WGSL sablonok, amelyekből az adott kérésre és eszközre shader-ek generálhatók.

Ez a struktúra egy WGSL shadert újrahasználható szoftver-artefakttá alakít: az interfész olvasható WGSL nélkül, a helyességi és teljesítményesetek az implementációval együtt utaznak, és a verziók explicit módon betölthetők.

Hogyan lehet betölteni egy kernelt a Hubról?

Telepítés npm-mel:

npm install @huggingface/kernels@preview

A futtatáshoz WebGPU-t támogató böngésző szükséges; a támogatottság a böngészőtől, operációs rendszertől, GPU-tól és drivertől függ. JavaScriptben a "gpu" in navigator kifejezéssel lehet ellenőrizni a jelenlétét.

A @huggingface/kernels könyvtár a kapcsolat a Hubon lévő repository és az alkalmazás között: a getKernel hívással megadjuk a Hub repository azonosítóját és a szerződés verzióját, majd a visszaadott függvényt típusos bemenettel és tensor-shape-ekkel meghívjuk. A betöltő a manifest alapján származtatja a kimeneti shape-et és logikai adattípust, és automatikusan lefoglalja a kimeneti buffert.

Példaként az ai.onnx.Add kernel kis bias-add példája illusztrálja a hívásmintát: ugyanaz a betöltési és futtatási mód marad érvényben a kis demonstrációs esetektől egészen a nagyobb, optimalizált műveletekig (például ai.onnx.MatMul).

A kernel-ek több variánst is tartalmazhatnak ugyanarra az operációra (például egyenes vektoros út egyenlő méretekhez, broadcast-specifikus indexelés más eseteknél), így a futtatórendszer a legmegfelelőbb implementációt választhatja ki a hardver és a bemenet függvényében anélkül, hogy az alkalmazás API-ja változna.

A verziózás (például version: 1) külön van az ONNX opsetektől vagy operátorok since_version mezőjétől; ez stabil JavaScript-szintű szerződést biztosít az alkalmazások számára, miközben a kernel-implementációk tovább fejlődhetnek.

Mennyivel gyorsabbak a kernelek?

A Hugging Face összehasonlította a gyűjteményt az ONNX Runtime Web (ORT WebGPU) megvalósításával egy Apple M4 GPU-n az ONNX Runtime Web 1.30.0-dev.20260826-b1f76d586a verzióval. A kiinduló 1,756 tesztesetből azokat tartották meg, ahol mindkét oldal egyező kimenetet és megbízható mérési eredményt adott: ez 809 eset volt.

A mérések szerint a Hugging Face WebGPU kerneli geometriai átlagban 2.57x gyorsabbak, és mediánban 1.90x gyorsabbak voltak; a 809 esetből 629 esetben győztek, 176 veszteség és 4 döntetlen volt. Néhány példa a részletesebb összehasonlításból:

  • Add (5 összehasonlított eset): 0.064 ms vs 0.227 ms, 3.52x gyorsulás.
  • MatMul (29 eset): 0.115 ms vs 0.131 ms, 1.14x gyorsulás.
  • Softmax (12 eset): 0.114 ms vs 0.240 ms, 2.11x gyorsulás.
  • LayerNormalization (6 eset): 0.061 ms vs 0.135 ms, 2.22x gyorsulás.

Volt néhány rendkívüli eset is: egy nehéz bilineáris Einsum eset (i,ij,j méret 4096) 0.136 ms alatt futott a Hugging Face kernellel szemben az ORT WebGPU 1,396 ms-ával (több mint 10,000x gyorsabb), és egy soronkénti CumSum [256, 4096] méreten 0.016 ms vs 4.784 ms volt (301x gyorsulás). Ezek nem általános elvárások minden helyzetre, de megmutatják, mennyit nyerhet egy specializált kernel, ha a generalizált implementáció rossz útra fut.

A mérések a GPU-n végzett munkát időzítették, kihagyva az olyan setup-lépéseket, mint a kernel betöltése, session létrehozása, bemenet feltöltése, shader fordítása és az eredmények visszaolvasása; ezért a rövid feladatok mérése nehezebb és az értékek inkább összehasonlító viszonyításnak tekintendők, nem általános teljesítményígéretnek.

A Hugging Face együtt dolgozik az ONNX Runtime csapattal is, hogy ezek az optimalizációk eljussanak az ONNX Runtime Web közösséghez.

Fleet: a közösség által gyűjtött mérési eredmények

Mivel a WebGPU teljesítmény erősen változik eszközök, böngészők és driverek szerint, egyetlen gép mérése kevés információt ad. A Fleet nevű böngészőeszköz lehetővé teszi bárki számára, hogy helyben lefuttassa a helyességi és teljesítményteszteket, és lássa, hogyan viselkednek a kerneler a saját hardverén.

A felhasználói beleegyezéssel minden futtatás privát bizonyítékként járul hozzá a közös adathalmazhoz, amely segít felderíteni eszközspecifikus hibákat, összehasonlítani variánsokat és finomítani a kiválasztási szabályokat. A cél: széles, valós világot lefedő mérések révén megbízhatóbb és gyorsabb kernelt adni mindenki számára.

Hova vezet ez tovább?

A 207 kernel a kezdet: a nyilvános, külön repository-kban tárolt, verzionált implementációk közös alapot adnak a kontraktusok átláthatóságához, a megvalósítások összevetéséhez, a helyesség reprodukálásához és a teljesítmény javításához anélkül, hogy minden shadert beágyaznánk minden futtatóba.

A Hub Kernels oldalán ezek a WebGPU kernelik együtt jelennek meg a CUDA, ROCm, Metal és egyéb platformokra készült kernel-ekkel, és azokat lehet keresni, szűrni és böngészni.

A komponensek kölcsönösen erősítik egymást: a repository-k átlátható, verzionált szerződéseket adnak; a @huggingface/kernels betöltést és futtatást tesz egyszerűvé JavaScriptből; a Fleet valós eszközökről gyűjt bizonyítékokat egy szélesebb körben, mint amit egy hagyományos laborban el lehet érni. Minden egyes futtatás feltárhat hibákat, segíthet a hangolásban, javíthatja a variáns-kiválasztást és validálhatja a jövőbeli kernel-verziókat.

A csapat célja, hogy ez a low-level alap szolgálja a következő lépéseket a böngésző alapú inferálásban: a kernelek összekapcsolása magasabb szintű modell-eszközökkel, a lefedettség növelése és a gyors, helyi inferencia egyszerűbb használata a WebAI ökoszisztémában.

Fedezze fel a WebGPU kernel-gyűjteményt, próbálja ki az @huggingface/kernels csomagot, és csatlakozzon a Fleethez, hogy eszközéről bizonyítékokat adjon hozzá és segítsen jobb kernelt építeni mindenki számára.