Eszközök

Hugging Face Kernels: új tárolótípus, erősített biztonság és agent-orientált fejlesztési alapok

A közlemény főszereplője a Hugging Face Kernels projekt és a hozzá kapcsolódó kernel-builder eszköz, amelyek jelentős átdolgozáson estek át az elmúlt hónapokban.

Hugging Face Kernels: új tárolótípus, erősített biztonság és agent-orientált fejlesztési alapok

A Kernels projekt célja a saját kernel-ek csomagolásának, terjesztésének és fogyasztásának szabványosítása úgy, hogy a folyamat gördülékeny és biztonságos legyen, valamint jól illeszkedjen a Hugging Face Hub-hoz. Az elmúlt hónapokban a projekt jelentős átdolgozáson ment át: új tárolótípus, megerősített biztonsági rétegek, CLI-felosztás és agent-orientált fejlesztési alapok kerültek bevezetésre. Az alábbiakban összefoglaljuk a fontosabb változásokat és a közeljövő terveit.

Új repository típus: "kernel"

A Hub-on megjelent egy új repository típus, a "kernel". Ez lehetővé teszi, hogy a kernel-eket külön, számítási sajátosságokhoz igazítva kezeljék: a felhasználó például láthatja, mely akcelerátorok, operációs rendszerek és backend-verziók támogatottak egy adott kernelhez.

A kernel-ek elsőrendű entitássá tétele a Hub-on javítja a felfedezhetőséget és lehetővé teszi a trendek követését kernel-ek, modellek és az azokhoz kapcsolódó alkalmazások között.

Megerősített biztonság

Mivel a kernel-ek natív kódot futtatnak a betöltő Python folyamat jogosultságával, rosszindulatú kernel komoly kárt okozhat. Ennek megfelelően a Kernels projektnél a biztonság kiemelt fontosságú.

  • Reprodukálhatóság: Nix-et használják a build-ek tisztaságának és hermetikus kiértékelésének biztosítására, valamint a forrás Git SHA1-ét beágyazzák a kernelbe a bizonyíthatóság növeléséhez.

  • Trusted publishers (megbízható kiadók): az új repo-típus bevezetésével alapértelmezésben csak megbízható kiadók kerneljeit tölti be a kernels csomag. A trusted publisher olyan szervezet, amelyet a közösség jóhiszeműnek tekint. Nem megbízható forrásból is lehet kernel-t betölteni, de ekkor expliciten engedélyezni kell a trust_remote_code paraméterrel:

from kernels import get_kernel

kernel_module = get_kernel( "Atlas-Inference/gdn", version=1, trust_remote_code=True )

Publikáláshoz a felhasználóknak vagy szervezeteknek kérniük kell a kernel publisher jogosultságot az account beállításaikból; a jóváhagyást esetileg kezelik.

  • Kernel aláírás (code signing): további rétegként bevezették a kódaláírást. A kernel-t a fejlesztő privát kulcsával írják alá, és a publikus kulccsal ellenőrizhető. Ez védi azt az esetet, amikor egy támadó feltöri egy megbízható publisher Hub fiókját és rosszindulatú kernel-t tölt fel – a támadó nem tud érvényes aláírást készíteni nélküli a privát kulcs birtoklása.

    • A megvalósításhoz Sigstore cosign-t használnak ideiglenes (ephemeral) privát kulcsokkal; mivel ezek kulcsok időben korlátozottak, egy kiszivárgás esetén általában nem használhatók tovább.
    • Ellenőrzik továbbá, hogy a kernel-t egy megbízható GitHub workflow írta alá egy megbízható GitHub repo-ból.

Kernel signing támogatott a kernel-builder-ben és a kernels verify-signature parancs is elérhető a kernel aláírásának ellenőrzésére. A töltéskor való automatikus aláírásellenőrzés még nincs alapértelmezésben bekapcsolva: a csapat előbb további teszteket akar lefuttatni. Előzetes beállítási jegyzetek megtalálhatók a kernels 0.16.0 release notes-ban.

Átalakított CLI-k

Korábban több segédprogram (utility) összefonódott a kernels és a kernel-builder csomagokban. Most világosabb szeparációt vezettek be: a kernels könyvtár feladata a kernel-ek betöltése és előkészítése használatra, míg a kernel-builder a kernel építésével kapcsolatos teendőkért felel.

Ennek eredményeképp mindkét eszköz karcsúbb és célspecifikusabb lett. Részletes dokumentáció található a kernels CLI és a kernel-builder CLI oldalaknál.

Több framework és backend támogatás

Kiterjesztették a támogatást több framework és backend irányába, a legfontosabb változások:

  • Torch Stable ABI támogatás: a kernels és kernel-builder mostantól támogatja a Torch Stable ABI-t, ami azt jelenti, hogy a kernel fejlesztők egy adott Torch verziót vagy az azt követő körülbelül két évre visszamenőleg kompatibilis verziókat célozhatják meg. Példa: egy Torch 2.9 Stable ABI-t célzó kernel a Torch >= 2.9 környezetben fog működni.

  • Apache TVM FFI támogatás: a TVM FFI az első, Torch-on kívüli framework támogatás, amely standardizált ABI-t ad a kernel-eknek, és együttműködik más frameworkökkel, például PyTorch, Jax és CuPy-vel. Ez lehetővé teszi a többframework-ön átívelő kernel-ek készítését.

Alapok az agentikus (agentic) kernel-fejlesztéshez

A kernel-builder és a kernels eszközök kiegészítik az agentikus kernel-fejlesztés növekedését: az ügynökök (agents) képesek lehetnek egy (optimalizált) kernel létrehozására a semmiből, majd annak lefordítására, benchmarkolására és iteratív finomhangolására.

  • A kernel-builder segít egy kiszámítható projektstruktúrát és reprodukálható build-folyamatot létrehozni, ami fontos az agentek automatizált működéséhez.
  • A CLI-k agent-optimalizált viselkedésre törekednek: nem interaktív parancsok, géppel könnyen feldolgozható kimenetek.
  • Backend-specifikus "skills" segítenek az agenteknek kezelni a különböző backendek idioszinkráziáit (toolchain, fordítási útvonalak, teljesítményjellemzők).

A sikeres build önmagában nem elegendő: a kernelnek valódi gyorsulást kell hoznia a célhardveren. Ezért fontos a benchmarking több hardverkonfiguráción és akár különböző akcelerátor-generációkon. A szoros integráció a HF Jobs szolgáltatással egyszerűsíti az automatizált benchmark futtatást, eredménygyűjtést és összehasonlítást a referencia-baseline-nal.

Példák agent-augmentált kernel-ekre:

Egyéb fejlesztések

  • Környezet beállítás: a kernel-builder által igényelt build környezet felállítása egyszerűsítve lett egy telepítő (installation script) segítségével. Emellett van Terraform útmutató az időszakos (ephemeral) példányok használatához.

  • System card: minden elkészült kernelhez egy system card készül, amely hasznos információkat mutat (használat, exponált interfészek stb.), és ez lesz a kernel Hub-oldalának front matter-e.

  • Kompatibilitás ellenőrzése: a has_kernel() metódussal programból ellenőrizhető, hogy egy kernel kompatibilis-e az aktuális rendszerrel. Részletesebb indoklásokért a get_kernel_variants() visszaadja az elfogadott és elutasított variánsokat és az elutasítás okát.

  • manylinux_2_28 támogatás javítása: korábban statikusan linkelték a libstdc++ könyvtárat, hogy elkerüljék a régebbi libstdc++ verziók kompatibilitási problémáit. Ez azonban ütközésekhez és memóriakorrupcióhoz vezetett, ha több libstdc++ verzió is jelen volt (például PyTorch dinamikusan linkelt és a kernel statikusan linkelt libstdc++-a). A megoldásként most dinamikusan linkelik a libstdc++-t, és a hivatalos manylinux_2_28 toolchain-nel fordítanak a jobb kompatibilitás érdekében.

Következtetés

A Kernels projekt célja mind a kernel-fejlesztők, mind a kernel-felhasználók szolgálata: egyszerűsíteni a csomagolást és terjesztést, miközben különös figyelmet fordítanak a biztonságra és a reprodukálhatóságra. A most bevezetett repository típus, a trusted publishers és a kódaláírási megoldás jelentősen növeli a biztonságot; a CLI-szétválasztás, framework-bővítések és agent-optimalizált funkciók pedig a fejlesztési munkafolyamatokat segítik. A projekt nyitott a közösségi visszajelzésekre és hozzájárulásokra.

Köszönet Aritra-nak a poszt áttekintéséért.