Quantisierung
Modelle kleiner machen, ohne sie kaputt zu machen: int8 und int4, Ausreißerkanäle, die Verfahren im Vergleich und wie man den Verlust misst.
Die Idee
Ein Gewicht wird üblicherweise als 16-Bit-Zahl gespeichert. Speichert man es stattdessen als 4-Bit-Ganzzahl mit einem gemeinsamen Umrechnungsfaktor je Gruppe, schrumpft das Modell auf ein Viertel, und es passt auf eine Karte, auf die es vorher nicht passte.
Was das bringt
| Format | Modell 7 Mrd. | Modell 70 Mrd. | Typische Güteeinbuße |
|---|---|---|---|
| float16 | 14 GB | 140 GB | Ausgangswert |
| int8 | 7 GB | 70 GB | unter 1 % |
| int4 | 3,5 GB | 35 GB | 1 bis 3 % |
| int3 und darunter | 2,6 GB | 26 GB | deutlich, aufgabenabhängig |
Die Verfahren
| Verfahren | Prinzip | Braucht Kalibrierdaten |
|---|---|---|
| Runden auf nächsten Wert | Einfach abrunden | nein |
| GPTQ | Fehler schichtweise ausgleichen | ja, wenige hundert Beispiele |
| AWQ | Wichtige Kanäle schonen | ja |
| SmoothQuant | Skalen zwischen Gewicht und Aktivierung verschieben | ja |
| Quantisierungsbewusstes Training | Während des Trainings simuliert | volles Training |
- Immer mit Daten kalibrieren, die dem Betrieb ähneln, nicht mit beliebigem Text.
- Nach der Quantisierung gegen einen festen eigenen Bewertungssatz messen, nicht gegen fremde Zahlen.
- Die Gruppengröße beachten: kleinere Gruppen sind genauer und brauchen mehr Speicher für die Skalen.
- Ausgabeschicht und Einbettung oft in höherer Genauigkeit belassen; sie sind empfindlich und klein.
Die Rechnung
Der Speicheraufschlag der Skalen
Bei n = 4 und g = 128 sind das 4 + 32/128 = 4,25 Bit je Gewicht. Bei
g = 32 bereits 5,0 Bit, also 18 Prozent mehr Speicher für eine spürbar bessere
Genauigkeit. Diese Abwägung ist die eigentliche Entscheidung bei der Wahl eines
Quantisierungsformats.
Ausreißer
In großen Sprachmodellen treten in wenigen Dimensionen Aktivierungen auf, die hundertfach größer sind als der Rest. Sie zwingen den Skalierungsfaktor nach oben und machen alle anderen Werte in derselben Gruppe entsprechend gröber.
Drei Gegenstrategien:
- Getrennte Behandlung. Ausreißerkanäle bleiben in float16, der Rest wird in int8 gerechnet.
- Verschiebung. Ein Teil der Skala wird von der Aktivierung in das Gewicht verschoben, sodass beide gutmütig quantisierbar werden.
- Gewichtung nach Bedeutung. Kanäle mit großer Aktivierung werden vor der Quantisierung skaliert, sodass ihr Fehler kleiner ausfällt.
Messen statt annehmen
- 01
Eigenen Bewertungssatz zusammenstellen
100 bis 300 Aufgaben aus dem tatsächlichen Einsatz, mit erwarteten Ergebnissen.
- 02
Ausgangswert in float16 messen
Ohne diesen Wert ist jeder Vergleich sinnlos.
- 03
Je Stufe messen
int8, dann int4, jeweils gegen denselben Satz.
- 04
Nach Aufgabenart aufschlüsseln
Ein Gesamtwert verdeckt, dass Rechenaufgaben stärker leiden als Formulierungen.
Für ein Hochrisikosystem nach AI Act ist diese Messung nicht optional: Eine Änderung der Zahlendarstellung ist eine Änderung des Systems und gehört mit ihren Auswirkungen in die technische Dokumentation.
Passende Kurse und Quellen
Distilling the Knowledge in a Neural Network
Ein großes Modell bringt einem kleinen bei, was es kann. Die Grundlage der kleinen Modelle, die heute im Betrieb laufen.
Für alle, die kleine Modelle im Betrieb einsetzen wollen und die Grundlage dazu suchen.
Hugging Face Modell-Hub
Hunderttausende offene Modelle mit Lizenz, Modellkarte und Gewichten. Die erste Adresse, wenn geprüft werden soll, ob ein lokales Modell für eine Aufgabe reicht.
Die Lizenz steht auf der Modellkarte und ist nicht bei jedem offenen Modell kommerziell nutzbar.
llama.cpp
Ausführung quantisierter Modelle auf gewöhnlicher Hardware, bis hinunter zu einzelnen Karten und Kleinrechnern. Die Referenzimplementierung für den Betrieb ohne Rechenzentrum.
Für den Betrieb ohne Rechenzentrum, bis hinunter zu einzelnen Karten und Kleinrechnern.