Core iznutra: više od 2.900 operacija na 12 pozadinskih sustava
Što nam govori broj operacija
Množenje matrica zvuči kao jedan zadatak. Njegova implementacija ovisi o značenju vrijednosti, načinu njihove pohrane i akumulacije međurezultata te o hardveru koji izvršava računanje. Matrica s pakiranim binarnim vrijednostima i matrica s brojevima s pomičnim zarezom mogu dijeliti apstraktnu operaciju, a ipak zahtijevati različita numerička pravila i drukčiji kod.
Core je računalni temelj Dweve za treniranje i inferenciju. Njegov javni katalog obuhvaća stotine tisuća ručno optimiziranih kernela, više od 2.900 operacija u 76 kategorija, 25 numeričkih formata i 12 pozadinskih sustava. Te brojke opisuju različite dijelove sustava. Operacija imenuje računanje. Numerički format određuje prikaz podataka. Pozadinski sustav označava cilj izvršavanja. Kernel implementira određenu kombinaciju tih izbora.
Važnije je razumjeti tu razliku nego katalog svesti na jedan veliki broj značajki. Razvojni inženjer treba znati postoji li potrebna kombinacija i prema kojem se ugovoru izvršava.
Računanje i njegov prikaz pripadaju zajedno
Uzmimo redukciju: skup vrijednosti svodi se na jedan rezultat. Riječ „zbroj” ostavlja nekoliko otvorenih pitanja. Jesu li ulazne vrijednosti predznačeni cijeli brojevi, brojevi s fiksnim ili pomičnim zarezom? U kojem se prikazu čuva akumulirani rezultat? Što se događa kada taj prikaz ne može pohraniti sljedeću vrijednost?
Core veže te izbore uz operaciju. Njezin ugovor izvršavanja obuhvaća tip podataka, širinu, pakiranje, akumulator, pozadinski sustav, skup instrukcija, pravila dispečiranja i način determinističnosti. Promjena bilo kojeg od tih elemenata može promijeniti značenje računanja, čak i kada operacija zadržava isto ime.
Među 25 numeričkih formata nalaze se binarni, ternarni, cjelobrojni, formati s fiksnim i pomičnim zarezom te prilagodljivi formati. Naziv obitelji tek je početak opisa aritmetike. Važni su i širina, predznak, skala i raspored pohrane. Zato katalog treba čitati kao skup podržanih kombinacija, a ne kao obećanje da je svaka operacija dostupna u svakom zamislivom formatu na svakom cilju.
Zato format za razmjenu ne može odgovoriti na sva pitanja o izvršavanju. ONNX opisuje računalni graf s tipiziranim ulazima, izlazima i operatorima. Sustavi tako dobivaju zajednički opis modela, ali ih izvršno okruženje i dalje mora implementirati. Dokumentacija o konceptima ONNX-a objašnjava razliku između prikaza grafa i izvršavanja.
12 pozadinskih sustava i jasni izbori izvršavanja
Dvanaest pozadinskih sustava Core obuhvaća skalarno izvršavanje, skupove CPU instrukcija, GPU-ove i prenosive ciljeve. Javni skup ciljeva uključuje Scalar, SSE2, AVX2, AVX-512, NEON, SVE2, CUDA, ROCm, Metal, Vulkan, WebGPU i WASM. Ti nazivi označavaju putove izvršavanja unutar Corea, a ne zasebne verzije modela.
Dispečiranje na trenutačnom računalu odabire podržanu implementaciju operacije i njezina ugovora izvršavanja. Odabrani put bilježi se zajedno s ćelijom izvršavanja, računalom i razlogom odabira. Zato se izvođenje može pregledati prema izborima koji su doista napravljeni.
Prenosivost ipak ima granice. Primjerice, dokumentacija WebAssemblyja razlikuje prenosivi binarni format od API-ja koje pruža okruženje domaćina. Izvršavanje u pregledniku i izvan njega može nuditi različita sučelja. Dokumentacija o prenosivosti WebAssemblyja pruža koristan kontekst za tu razliku. Sam naziv pozadinskog sustava ne opisuje okruženje u kojem aplikacija radi.
Mjesto Corea u Dweveu
Core koristi biblioteku primitives za temeljne operacije i uključuje ih u računalni sustav. Loom je izgrađen na Coreu i za zaključivanje koristi biblioteku solvers. Svaki dio tako ima jasnu odgovornost: primitives pruža osnovne operacije, Core izvršava računanje, a Loom na tim temeljima gradi zaključivanje.
Dweve je usluga. Fabric je njezin API i portal putem kojeg joj pristupaju ljudi i aplikacije. Fabric ne preuzima računalnu ulogu Corea ni ulogu Looma u zaključivanju. Sučelje i sustavi koji ga pokreću imaju različite namjene.
Počnite od izvršavanja koje vam treba
Pri procjeni računalnog sustava počnite od konkretnog izračuna i prikaza koji mu je potreban. Zatim utvrdite koji će ga pozadinski sustav izvršiti, koja se pravila akumulatora i pakiranja primjenjuju te koji je ugovor ponovljivosti deklariran. Ta pitanja pretvaraju katalog u alat koji tim može koristiti.
Javno objavljene brojke Corea opisuju širinu kataloga. Ugovor izvršavanja objašnjava kako ga čitati. Oboje je važno: koje zadatke sustav pokriva i što znači određena implementacija kada je upotrijebite.