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.



