Dweve

Core zevnitř: 2 900+ operací napříč 12 backendy

Statisíce ručně laděných kernelů. Více než 2 900 operací v 76 kategoriích. 25 numerických formátů a 12 backendů. Pohled do Core, výpočetního základu Dweve.

Core zevnitř: 2 900+ operací napříč 12 backendy

Co nám říká počet operací

Násobení matic zní jako jediná úloha. Jeho implementace ale závisí na tom, co hodnoty znamenají, jak jsou uložené, jak se sčítají průběžné výsledky a jaký hardware výpočet provádí. Matice s bitově sbalenými binárními hodnotami a matice s čísly s plovoucí řádovou čárkou mohou sdílet abstraktní operaci, přesto vyžadují odlišná numerická pravidla i odlišný kód.

Core je výpočetním základem Dweve pro trénování a inferenci. Jeho veřejný katalog zahrnuje statisíce ručně laděných kernelů pro více než 2 900 operací v 76 kategoriích, 25 numerických formátech a 12 backendech. Tato čísla popisují různé části systému. Operace pojmenovává výpočet. Numerický formát určuje reprezentaci. Backend označuje cíl provádění. Kernel implementuje konkrétní kombinaci těchto voleb.

Důležitější než chápat katalog jako jeden velký součet funkcí je rozumět tomuto rozlišení. Vývojář potřebuje vědět, zda požadovaná kombinace existuje a jakým kontraktem se řídí.

Více než 2 900 operací v 76 kategoriích; 25 numerických formátů; 12 backendů. Podporované volby provádění implementují statisíce ručně laděných kernelů.

Výpočet a jeho reprezentace patří k sobě

Uvažujme redukci: vezmeme množinu hodnot a spojíme je do výsledku. Slovo „součet“ ponechává několik otázek bez odpovědi. Jsou vstupy celá čísla se znaménkem, čísla s pevnou řádovou čárkou, nebo čísla s plovoucí řádovou čárkou? V jaké reprezentaci se uchovává průběžný výsledek? Co se stane, když se do ní další hodnota nevejde?

Core připojuje tyto volby přímo k operaci. Její kontrakt provádění zahrnuje datový typ, šířku, způsob zabalení, akumulátor, backend, instrukční sadu, pravidla výběru implementace i režim determinismu. Změna kterékoli z těchto voleb může změnit význam výpočtu, i když se název operace nemění.

25 numerických formátů zahrnuje binární, ternární, celočíselné, pevné řádové čárky, adaptivní i plovoucí řádové čárky. Název rodiny je jen začátkem popisu aritmetiky. Záleží také na šířce, znaménku, měřítku a uspořádání v paměti. Katalog je proto třeba chápat jako soubor podporovaných kombinací, nikoli jako příslib, že každá operace existuje v každém představitelném formátu na každém cíli.

Proto ani výměnný formát nevyřeší všechny otázky provádění. ONNX popisuje výpočetní graf s typovanými vstupy, výstupy a operátory. Systémům tak poskytuje společný popis modelu; běhové prostředí však stále musí tyto operátory implementovat. Dokumentace konceptů ONNX vysvětluje rozdíl mezi reprezentací grafu a jeho prováděním.

Volbu provádění lze číst podle operace, reprezentace, akumulátoru, backendu a pravidel opakovatelnosti. Schéma ukazuje reprezentativní výsek, nikoli matici pokrytí.

12 backendů, jasně určené volby provádění

Dvanáct backendů Core zahrnuje skalární provádění, instrukční sady CPU, GPU i přenositelné cíle. Veřejná sada cílů obsahuje Scalar, SSE2, AVX2, AVX-512, NEON, SVE2, CUDA, ROCm, Metal, Vulkan, WebGPU a WASM. Tyto názvy označují cesty provádění v rámci Core, nikoli samostatné verze modelu.

Dispečink na aktuálním hostiteli vybere podporovanou implementaci odpovídající operaci a jejímu kontraktu provádění. Zaznamená vybranou cestu spolu s prováděcí buňkou, hostitelem a důvodem výběru. Spuštění lze tedy zpětně prozkoumat podle skutečně použitých voleb.

Přenositelnost má své hranice. Dokumentace WebAssembly například rozlišuje přenositelný binární formát od API poskytovaných hostitelským prostředím. Prohlížeč a prostředí mimo prohlížeč mohou zpřístupňovat různá rozhraní. Dokumentace WebAssembly k přenositelnosti tuto odlišnost zasazuje do kontextu. Samotný název backendu nevysvětluje provozní prostředí aplikace.

Jaké místo má Core v Dweve

Knihovnu primitives využívá Core pro základní operace. Core tyto základy začleňuje do výpočetního systému. Loom je postavený na Core a pro své úlohy uvažování používá knihovnu solvers. Každá část tak má jasnou odpovědnost: primitives poskytují základní operace, Core provádí výpočty a Loom na tomto základě staví uvažování.

Dweve je služba. Fabric je její API a portál, přes který ke službě přistupují lidé i aplikace. Fabric nepřebírá výpočetní roli Core ani roli Loom při uvažování. Rozhraní a systémy v pozadí slouží různým účelům.

Knihovnu primitives využívá Core. Loom je postavený na Core a používá knihovnu solvers. Fabric je API a portálem služby Dweve.

Začněte tím, co potřebujete provádět

Při hodnocení výpočetního systému začněte konkrétním výpočtem a požadovanou reprezentací. Pak se ptejte, který backend jej provede, jaká pravidla platí pro akumulátor a zabalení hodnot a jaký kontrakt opakovatelnosti je deklarován. Díky těmto otázkám bude katalog pro tým prakticky použitelný.

Veřejná čísla Core popisují šíři katalogu. Kontrakt provádění vysvětluje, jak jej číst. Obojí patří do stejné debaty: jakou práci systém pokrývá a co konkrétní implementace znamená při použití.