Training gegen Inferenz
Zwei völlig verschiedene Kostenprofile: warum Training einmalig und teuer ist, Inferenz dauerhaft und in Summe oft teurer.
Die Idee
Training ist die Ausbildung, Inferenz ist die tägliche Arbeit. Die Ausbildung kostet einmal viel, die tägliche Arbeit kostet jeden Tag ein wenig, und über die Jahre meist mehr.
Der Vergleich
| Training | Inferenz | |
|---|---|---|
| Häufigkeit | einmal, gelegentlich wiederholt | dauernd |
| Dauer | Tage bis Monate | Millisekunden bis Sekunden |
| Hardware | viele Karten, schnell verbunden | eine oder wenige Karten |
| Engpass | Rechenleistung und Verbindung | Speicherbandbreite |
| Fehlerfolge | Lauf wiederholen | Nutzer wartet oder bekommt Falsches |
Die zwei Phasen der Inferenz
- 01
Prefill
Der gesamte Prompt wird auf einmal verarbeitet. Das ist eine große Matrixmultiplikation und lastet die Karte voll aus. Die Zeit bis zum ersten Token hängt fast nur von der Promptlänge ab.
- 02
Decode
Jedes weitere Token wird einzeln erzeugt und hängt vom vorigen ab. Hier ist die Karte weitgehend unbeschäftigt und wartet auf den Speicher.
Daraus folgen die beiden Kennzahlen, die in der Praxis zählen:
| Kennzahl | Bedeutung | Bestimmt durch |
|---|---|---|
| Zeit bis zum ersten Token | Wie schnell etwas passiert | Promptlänge, Rechenleistung |
| Token je Sekunde danach | Wie flüssig es sich anfühlt | Bandbreite, Modellgröße |
Ein Nutzer empfindet 20 bis 30 Token je Sekunde als flüssig, weil das über der Lesegeschwindigkeit liegt. Eine Zeit bis zum ersten Token über zwei Sekunden wird als Hängen wahrgenommen, unabhängig davon, wie schnell es danach geht.
Latenz gegen Durchsatz
Batch 1 -> 40 Token/s je Anfrage, 40 Token/s gesamt
Batch 8 -> 35 Token/s je Anfrage, 280 Token/s gesamt
Batch 32 -> 28 Token/s je Anfrage, 896 Token/s gesamt
Batch 128 -> 15 Token/s je Anfrage, 1920 Token/s gesamt
Der Durchsatz wächst fast linear, während die einzelne Anfrage nur wenig langsamer wird. Deshalb ist Stapelverarbeitung fast immer die richtige Entscheidung, bis eine Zusage zur Antwortzeit verletzt wird.
Die Kostenformeln
Gleichsetzen ergibt den Punkt, an dem der Betrieb das Training überholt:
Bei D = 2e12 Trainingstoken liegt der Punkt bei 6e12 erzeugten Token. Ein
Dienst, der eine Million Anfragen je Tag mit je 500 Token beantwortet, erzeugt
5e8 Token je Tag und erreicht diesen Punkt nach rund 33 Jahren. Bei hundert
Millionen Anfragen je Tag nach vier Monaten.
Diese Rechnung ignoriert allerdings, dass Inferenz und Training in der Praxis sehr unterschiedliche Auslastungen erreichen. Training läuft nahe der Spitzenleistung, Inferenz im Decode-Schritt bei wenigen Prozent. Rechnet man in Karten-Stunden statt in FLOPs, verschiebt sich der Punkt um eine Größenordnung zugunsten des Trainings.
Was für die Auslegung folgt
- Zeit bis zum ersten Token und Token je Sekunde getrennt als Zusage festlegen.
- Die maximale Prompt- und Antwortlänge begrenzen, sonst ist die Kapazität nicht planbar.
- Stapelverarbeitung mit Wartezeit-Obergrenze konfigurieren, nicht mit fester Stapelgröße.
- Prefill und Decode getrennt messen. Ein Gesamtwert verdeckt, welche Phase klemmt.
- Für Spitzenlasten eine Warteschlange vorsehen statt zusätzlicher Karten. Warten ist billiger als Vorhalten.
Passende Kurse und Quellen
PyTorch-Dokumentation
Die Referenz zu Autograd, Datentypen, Speicherverhalten und Determinismus. Die Stelle, an der sich Fragen zur Reproduzierbarkeit tatsächlich klären lassen.
Die Stelle, an der sich Fragen zu Determinismus und Speicherverhalten tatsächlich klären lassen.