Core im Überblick: über 2.900 Operationen auf 12 Backends
Was die Anzahl der Operationen aussagt
Matrixmultiplikation klingt nach einer einzigen Aufgabe. Wie sie umgesetzt wird, hängt davon ab, was die Werte bedeuten, wie sie gespeichert werden, wie Zwischenergebnisse aufsummiert werden und welche Hardware die Arbeit ausführt. Eine gepackte Binärmatrix und eine Gleitkommamatrix können dieselbe abstrakte Operation verwenden und dennoch unterschiedliche Rechenregeln und unterschiedlichen Code erfordern.
Core ist die Rechengrundlage von Dweve für Training und Inferenz. Der öffentliche Katalog umfasst Hunderttausende handoptimierte Kernel für über 2.900 Operationen in 76 Kategorien, 25 Zahlenformaten und auf 12 Backends. Diese Zahlen beschreiben verschiedene Teile des Systems. Eine Operation benennt die Berechnung. Ein Zahlenformat legt die Darstellung fest. Ein Backend bezeichnet ein Ausführungsziel. Ein Kernel setzt eine bestimmte Kombination dieser Entscheidungen um.
Diese Unterscheidung ist wichtiger, als den Katalog als eine einzige große Funktionszahl zu betrachten. Entwickler müssen wissen, ob die benötigte Kombination verfügbar ist und welchem Vertrag sie folgt.
Berechnung und Darstellung gehören zusammen
Nehmen wir eine Reduktion: Eine Sammlung von Werten wird zu einem Ergebnis zusammengeführt. Das Wort „Summe“ lässt einige Fragen offen. Sind die Eingaben vorzeichenbehaftete Ganzzahlen, Festkomma- oder Gleitkommawerte? In welcher Darstellung wird das Zwischenergebnis gespeichert? Was geschieht, wenn der nächste Wert nicht mehr hineinpasst?
Core verknüpft diese Entscheidungen mit der jeweiligen Operation. Ihr Ausführungsvertrag umfasst Datentyp, Breite, Packung, Akkumulator, Backend, Befehlssatz, Dispatch-Richtlinie und Determinismusmodus. Eine Änderung an einem dieser Punkte kann die Bedeutung der Berechnung verändern, selbst wenn die Operation gleich heißt.
Die 25 Zahlenformate umfassen Binär-, Ternär-, Ganzzahl-, Festkomma-, adaptive und Gleitkommaformate. Die Familienbezeichnung ist erst der Anfang der Beschreibung der Arithmetik. Auch Breite, Vorzeichen, Skalierung und Speicherlayout sind entscheidend. Der Katalog ist daher als Sammlung unterstützter Kombinationen zu verstehen und nicht als Zusage, dass jede Operation in jedem denkbaren Format auf jedem Ziel verfügbar ist.
Auch ein Austauschformat klärt nicht alle Fragen zur Ausführung. ONNX beschreibt einen Berechnungsgraphen mit typisierten Eingaben, Ausgaben und Operatoren. Das gibt Systemen ein gemeinsames Modellformat; die Laufzeit muss diese Operatoren dennoch implementieren. Die Dokumentation zu den ONNX-Konzepten erläutert den Unterschied zwischen Graphdarstellung und Ausführung.
12 Backends, klar festgelegte Ausführungsoptionen
Die 12 Backends von Core umfassen skalare Ausführung, CPU-Befehlssätze sowie GPU- und portable Ziele. Zum öffentlichen Zielumfang gehören Scalar, SSE2, AVX2, AVX-512, NEON, SVE2, CUDA, ROCm, Metal, Vulkan, WebGPU und WASM. Diese Namen bezeichnen Ausführungspfade innerhalb von Core und keine separaten Modellversionen.
Dispatch wählt auf dem aktuellen Host eine unterstützte Implementierung für die Operation und ihren Ausführungsvertrag aus. Der gewählte Pfad wird zusammen mit Ausführungszelle, Host und Auswahlgrund festgehalten. So lässt sich nachvollziehen, welche Entscheidungen ein Lauf tatsächlich getroffen hat.
Auch Portabilität hat Grenzen. Die WebAssembly-Dokumentation unterscheidet beispielsweise zwischen einem portablen Binärformat und den APIs, die eine Hostumgebung bereitstellt. Im Browser und außerhalb davon können unterschiedliche Schnittstellen zur Verfügung stehen. Die Dokumentation zur Portabilität von WebAssembly liefert hilfreichen Kontext dazu. Die Bezeichnung eines Backends allein beschreibt noch nicht die Laufzeitumgebung einer Anwendung.
Core im Dweve-System
Core nutzt die Primitives-Bibliothek für grundlegende Operationen und bindet diese in das Rechensystem ein. Loom baut auf Core auf und verwendet für seine Schlussfolgerungen die Solvers-Bibliothek. Damit hat jeder Teil eine klare Aufgabe: Primitives liefern Basisoperationen, Core führt Berechnungen aus und Loom baut darauf seine Schlussfolgerungen auf.
Dweve ist der Dienst. Fabric ist dessen API und Portal, über die Menschen und Anwendungen auf den Dienst zugreifen. Fabric übernimmt weder die Rechenaufgabe von Core noch die Schlussfolgerungsarbeit von Loom. Die Schnittstelle und die Systeme dahinter erfüllen unterschiedliche Aufgaben.
Bei der benötigten Ausführung beginnen
Wer ein Rechensystem bewertet, sollte mit einer konkreten Berechnung und der dafür nötigen Darstellung beginnen. Danach folgen Fragen zum ausführenden Backend, zu Akkumulator- und Packungsregeln sowie zum festgelegten Wiederholungsvertrag. So wird ein Katalog für ein Team praktisch nutzbar.
Die öffentlichen Kennzahlen von Core beschreiben die Breite des Katalogs. Der Ausführungsvertrag erklärt, wie er zu lesen ist. Beides gehört zusammen: Welche Arbeit das System abdeckt und was eine konkrete Implementierung bei ihrer Nutzung bedeutet.