Experte7 Min. LesezeitAktualisiert

KI auf einer CPU ausführen: Quantisierung, ONNX und warum kleine Modelle gewinnen

Nicht immer braucht man eine GPU. Wie int8-Quantisierung, ONNX Runtime und die richtige Größe ein Modell auf der CPU in Millisekunden antworten lassen.

Warum Tempo zählt

Eine Chat-Moderations-API muss antworten, während der Nutzer noch auf den Bildschirm schaut: höchstens ein paar hundert Millisekunden. GPUs sind schnell, aber teuer; gewöhnliche Server haben CPUs. Ein Modell auf der CPU schnell zu machen, macht einen Moderationsdienst bezahlbar.

Was ein Modell berechnet

Ein neuronales Netz besteht vor allem aus Matrixmultiplikationen: Die Zahlen, die den Text darstellen, werden Schicht für Schicht mit den Gewichten des Modells multipliziert. Das Tempo hängt davon ab, wie viele Multiplikationen es gibt (Größe des Modells und Länge des Textes) und wie schnell jede einzelne ist.

Quantisierung

Gewichte werden normalerweise als 32-Bit-Gleitkommazahlen gespeichert. Quantisierung speichert sie als 8-Bit-Ganzzahlen (int8), mit einem Skalierungsfaktor pro Zeile oder Kanal:

FormatGröße eines Modells mit 560 Millionen ParameternTypisches Tempo auf der CPU
float32etwa 2,2 GBAusgangswert
int8etwa 0,6 GBoft 2- bis 4-mal schneller

Moderne CPUs haben Befehle, die viele 8-Bit-Zahlen gleichzeitig multiplizieren (VNNI, AVX-512, Intel AMX): Daher kommt das Tempo.

Der Preis ist ein winziger Präzisionsverlust. Mit dynamischer Quantisierung pro Kanal verliert ein guter Klassifikator meist kaum Messbares, aber die Werte verschieben sich leicht. Deshalb müssen die Schwellen nach dem Quantisieren neu abgeglichen werden: Jede Schwelle wird so verschoben, dass das quantisierte Modell auf einem Kalibrierungsdatensatz denselben Anteil an Nachrichten markiert wie das Original.

ONNX und ONNX Runtime

ONNX ist ein offenes Format, um ein Modell als Graph von Operationen zu speichern, unabhängig vom Framework, mit dem es trainiert wurde. ONNX Runtime führt diesen Graphen aus und ist für CPUs optimiert: Es fasst Operationen zusammen, nutzt alle Kerne und wählt die schnellsten verfügbaren Befehle.

Ein echtes Beispiel

VigiMod 1.2.1 hat etwa 560 Millionen Parameter. Auf 4 CPU-Kernen:

VersionZeit pro Paar aus Nachricht und Kategorie
Volle Präzisionetwa 113 ms
int8 ONNXetwa 32 ms (3,5-mal schneller)

Nach dem Abgleich der Schwellen lag der auf Validierungsdaten gemessene Qualitätsverlust unter 0,005 F1, also im Rauschen.

Weitere Tricks

  • Kürzere Eingaben: Begrenze den Kontext auf die letzten Nachrichten, die zählen.
  • Batching: Bewerte mehrere Nachrichten auf einmal, wenn sie zusammen ankommen.
  • Den festen Teil cachen (zum Beispiel eine lange Richtlinie) bei Modellen, die das unterstützen.
  • Kleineres Modell, bessere Daten: Ein kleines Modell mit den richtigen Beispielen schlägt oft ein großes allgemeines, zu einem Bruchteil der Kosten.

Wann man doch eine GPU braucht

Fürs Training und für sehr große Modelle, die lange Antworten erzeugen. Ein übliches Design ist eine Kaskade: ein schnelles kleines Modell für jede Nachricht, ein größeres nur für die wenigen unsicheren Fälle.

Teste dich

Beantworte die Fragen und prüfe dann deine Antworten.

  1. 1. Was ändert die int8-Quantisierung?
  2. 2. Warum müssen die Schwellen nach dem Quantisieren neu geprüft werden?
  3. 3. Was ist ONNX Runtime?
  4. 4. Was ist eine Kaskade?

Alle Leitfäden →

Sieh es an echten Nachrichten

Probier die Live-Demo oder lies, wie die API funktioniert.