Inblick i Core: över 2 900 operationer fördelade på 12 backender
Vad antalet operationer faktiskt säger
Matrisprodukt låter som en enda uppgift. Hur den implementeras beror på vad värdena betyder, hur de lagras, hur delresultat ackumuleras och vilken hårdvara som utför arbetet. En packad binär matris och en flyttalsmatris kan motsvara samma abstrakta operation, men kräva olika numeriska regler och olika kod.
Core är Dweves beräkningsgrund för träning och inferens. Den offentliga katalogen omfattar hundratusentals handoptimerade kärnor för över 2 900 operationer i 76 kategorier, 25 numeriska format och 12 backender. Siffrorna beskriver olika delar av systemet. En operation anger beräkningen. Ett numeriskt format definierar representationen. En backend identifierar ett exekveringsmål. En kärna implementerar en viss kombination av val.
Det är viktigare att förstå skillnaden än att se katalogen som en enda stor funktionssiffra. Utvecklaren behöver veta om den önskade kombinationen finns och vilket kontrakt den följer.
Beräkningen och dess representation hör ihop
Tänk på en reduktion: en samling värden kombineras till ett resultat. Ordet ”summa” lämnar flera frågor obesvarade. Är indata heltal med tecken, fixpunktsvärden eller flyttal? Vilken representation lagrar det ackumulerade resultatet? Vad händer när den representationen inte kan rymma nästa värde?
Core knyter dessa val till operationen. Exekveringskontraktet omfattar datatyp, bredd, packning, ackumulator, backend, instruktionsuppsättning, dispatchpolicy och determinismnivå. Om något av detta ändras kan beräkningens innebörd förändras, även om operationen har samma namn.
De 25 numeriska formaten omfattar familjer för binära och ternära tal, heltal, fixpunkt, adaptiv precision och flyttal. Familjenamnet är bara utgångspunkten för att beskriva aritmetiken. Även bredd, teckenrepresentation, skala och lagringslayout spelar roll. Katalogen bör därför läsas som en samling kombinationer som stöds, inte som ett löfte om att varje operation finns i alla tänkbara format på varje mål.
Det är också därför ett utbytesformat inte kan avgöra alla frågor om exekvering. ONNX beskriver en beräkningsgraf med typade indata, utdata och operatorer. Det ger systemen en gemensam modellbeskrivning, men körmiljön måste fortfarande implementera operatorerna. ONNX-dokumentationen om centrala begrepp förklarar skillnaden mellan grafrepresentation och exekvering.
12 backender med tydliga exekveringsval
Cores 12 backender omfattar skalär exekvering, CPU-instruktionsuppsättningar samt GPU- och portabla mål. Den offentliga uppsättningen omfattar Scalar, SSE2, AVX2, AVX-512, NEON, SVE2, CUDA, ROCm, Metal, Vulkan, WebGPU och WASM. Namnen beskriver exekveringsvägar i Core, inte separata modellversioner.
Dispatch väljer en implementation som stöds för operationen och dess exekveringskontrakt på den aktuella värddatorn. Den valda vägen registreras tillsammans med exekveringscellen, värddatorn och orsaken. Därför går det att granska en körning utifrån de val som faktiskt gjordes.
Portabilitet har fortfarande gränser. WebAssembly-dokumentationen skiljer exempelvis mellan ett portabelt binärformat och de API:er som värdmiljön tillhandahåller. Körning i en webbläsare och körning utanför webbläsaren kan erbjuda olika gränssnitt. WebAssemblys dokumentation om portabilitet ger användbar bakgrund till skillnaden. En backendetikett räcker inte för att beskriva programmets körmiljö.
Cores plats i Dweve
Core använder biblioteket primitives för grundläggande operationer och för in dessa byggstenar i beräkningssystemet. Loom bygger på Core och använder biblioteket solvers för sitt resonemangsarbete. Därmed får varje del ett tydligt ansvar: primitives tillhandahåller grundoperationer, Core utför beräkningar och Loom bygger resonemang ovanpå den grunden.
Dweve är tjänsten. Fabric är dess API och portal, där människor och applikationer får åtkomst till tjänsten. Fabric ersätter varken Cores beräkningsroll eller Looms resonemangsroll. Gränssnittet och systemen bakom det har olika uppgifter.
Börja med den exekvering du behöver
När du utvärderar ett beräkningssystem börjar du med en konkret beräkning och den representation den kräver. Fråga sedan vilken backend som ska utföra den, vilka regler som gäller för ackumulator och packning samt vilket kontrakt för uppspelning som deklareras. De frågorna gör katalogen användbar för ett team.
Cores offentliga siffror beskriver katalogens omfattning. Exekveringskontraktet förklarar hur den ska läsas. Båda behövs i samma samtal: vilket arbete systemet täcker och vad en viss implementation innebär när den används.