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:
| Format | Größe eines Modells mit 560 Millionen Parametern | Typisches Tempo auf der CPU |
|---|---|---|
| float32 | etwa 2,2 GB | Ausgangswert |
| int8 | etwa 0,6 GB | oft 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:
| Version | Zeit pro Paar aus Nachricht und Kategorie |
|---|---|
| Volle Präzision | etwa 113 ms |
| int8 ONNX | etwa 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.
Weiterlernen
Sieh es an echten Nachrichten
Probier die Live-Demo oder lies, wie die API funktioniert.