Core zvnútra: viac ako 2 900 operácií na 12 backendoch
Čo nám hovorí počet operácií
Násobenie matíc znie ako jediná úloha. Jeho implementácia závisí od významu hodnôt, spôsobu ich uloženia, zhromažďovania čiastkových výsledkov a hardvéru, ktorý výpočet vykonáva. Matica s binárnymi hodnotami uloženými v balíkoch a matica s číslami s pohyblivou rádovou čiarkou môžu zdieľať abstraktnú operáciu, no vyžadujú odlišné numerické pravidlá aj kód.
Core je výpočtový základ Dweve pre tréning a inferenciu. Jeho verejný katalóg zahŕňa státisíce ručne optimalizovaných kernelov pre viac ako 2 900 operácií v 76 kategóriách, 25 číselných formátoch a 12 backendoch. Tieto čísla opisujú rôzne časti systému. Operácia pomenúva výpočet. Číselný formát určuje reprezentáciu. Backend označuje cieľ vykonávania. Kernel implementuje konkrétnu kombináciu možností.
Dôležitejšie než vnímať katalóg ako jedno veľké súhrnné číslo je rozumieť týmto rozdielom. Vývojár potrebuje vedieť, či požadovaná kombinácia existuje a aký kontrakt dodržiava.
Výpočet a jeho reprezentácia patria k sebe
Predstavme si redukciu: skupinu hodnôt spojíme do jedného výsledku. Slovo „súčet“ necháva viacero otázok otvorených. Sú vstupmi celé čísla so znamienkom, čísla s pevnou alebo pohyblivou rádovou čiarkou? V akej reprezentácii sa uchováva priebežný výsledok? Čo sa stane, keď sa do nej ďalšia hodnota nezmestí?
Core eviduje tieto voľby pri každej operácii. Jej kontrakt vykonávania zahŕňa dátový typ, šírku, balenie, akumulátor, backend, inštrukčnú sadu, politiku výberu implementácie a režim deterministickosti. Zmena ktorejkoľvek z nich môže zmeniť význam výpočtu, aj keď sa názov operácie nezmení.
Medzi 25 číselnými formátmi sú binárne, ternárne, celočíselné, pevná rádová čiarka, adaptívne a plávajúca rádová čiarka. Názov rodiny je len začiatkom opisu aritmetiky. Záleží aj na šírke, znamienku, mierke a rozložení v pamäti. Katalóg preto treba chápať ako súbor podporovaných kombinácií, nie ako prísľub, že každá operácia existuje v každom mysliteľnom formáte na každom cieľovom zariadení.
Aj preto výmenný formát nedokáže vyriešiť všetky otázky vykonávania. ONNX opisuje výpočtový graf s typovanými vstupmi, výstupmi a operátormi. Systémy tak získajú spoločný opis modelu, no runtime musí tieto operátory stále implementovať. Dokumentácia konceptov ONNX vysvetľuje rozdiel medzi reprezentáciou grafu a jeho vykonávaním.
12 backendov, jasne určené možnosti vykonávania
Dvanásť backendov Core pokrýva skalárne vykonávanie, inštrukčné sady CPU aj GPU a prenosné ciele. Verejný zoznam zahŕňa Scalar, SSE2, AVX2, AVX-512, NEON, SVE2, CUDA, ROCm, Metal, Vulkan, WebGPU a WASM. Tieto názvy označujú cesty vykonávania v rámci Core, nie samostatné verzie modelu.
Výber implementácie (dispatch) zvolí pre danú operáciu a jej kontrakt vykonávania podporovanú implementáciu na aktuálnom hostiteľskom systéme. Zvolená cesta sa zaznamená spolu s vykonávacou bunkou, hostiteľom a dôvodom výberu. Spustenie tak možno preskúmať podľa rozhodnutí, ktoré skutočne urobilo.
Prenositeľnosť má svoje hranice. Dokumentácia WebAssembly napríklad rozlišuje prenosný binárny formát a API poskytované hostiteľským prostredím. V prehliadači a mimo neho môžu byť dostupné odlišné rozhrania. Dokumentácia prenositeľnosti WebAssembly poskytuje k tomuto rozdielu užitočný kontext. Samotný názov backendu nevysvetľuje prevádzkové prostredie aplikácie.
Miesto Core v Dweve
Core využíva knižnicu primitives na základné operácie a začleňuje ich do výpočtového systému. Loom je postavený na Core a pri uvažovaní využíva knižnicu solvers. Každá časť má jasnú zodpovednosť: primitives poskytujú základné operácie, Core vykonáva výpočty a Loom na tomto základe rozvíja uvažovanie.
Dweve je služba. Fabric je jej API a portál, cez ktorý k nej pristupujú ľudia a aplikácie. Fabric nepreberá výpočtovú úlohu Core ani úlohu Loom pri uvažovaní. Rozhranie a systémy v jeho pozadí slúžia na odlišné účely.
Začnite od výpočtu, ktorý potrebujete
Pri posudzovaní výpočtového systému začnite konkrétnym výpočtom a požadovanou reprezentáciou. Potom sa pýtajte, ktorý backend ho vykoná, aké pravidlá platia pre akumulátor a balenie a aký kontrakt opakovateľného spustenia je deklarovaný. Vďaka týmto otázkam sa katalóg stane užitočným nástrojom pre tím.
Verejné čísla Core opisujú šírku katalógu. Kontrakt vykonávania vysvetľuje, ako ho čítať. Oboje patrí do jednej diskusie: akú prácu systém pokrýva a čo znamená konkrétna implementácia pri jej použití.