4.4 KiB
AIPerf Token-Metriken: Einheit & Interpretation
AIPerf exportiert mehrere Metriken die alle "tokens/sec" im Namen tragen, aber unterschiedliche Einheiten haben. Das führt zu Fehlinterpretationen wenn man die falsche Metrik für die falsche Frage verwendet.
Metrik-Übersicht
| Metrik (JSON-Key) | Einheit | Bedeutung |
|---|---|---|
prefill_throughput_per_user |
tokens/sec/user | Wie schnell der Prompt eines Users verarbeitet wird (Prompt → erstes Token) |
output_token_throughput |
tokens/sec | Gesamter Output-Durchsatz aller parallelen Sessions zusammen |
output_token_throughput_per_user |
tokens/sec/user | Output-Generierungsgeschwindigkeit, pro einzelnem User |
e2e_output_token_throughput |
tokens/sec/user | End-to-End Throughput: Gesamtzeit (inkl. TTFT) / Output-Tokens, pro User |
total_token_throughput |
tokens/sec | (Input + Output)-Tokens gesamt, alle Sessions |
request_throughput |
requests/sec | Anzahl abgeschlossener Requests pro Sekunde |
Kritische Unterscheidung
„Per User" = Session-Rate
Diese Metriken beschreiben das Erlebnis eines einzelnen Endnutzers:
prefill_throughput_per_user: 505→ Jeder User bekommt seinen Prompt mit 505 tok/s verarbeitetoutput_token_throughput_per_user: 13.4→ Jeder User sieht ~13.4 neue Tokens pro Sekunde (die "Schreibgeschwindigkeit" des Modells)e2e_output_token_throughput: 11.9→ Inklusive Wartezeit bis zum ersten Token braucht der Request pro Output-Token länger
Wichtig: Bei prefill_throughput_per_user ist der Einheitshinweis irreführend. Es ist keine Durchschnittsbildung über alle Users, sondern tatsächlich die Rate pro Session. Bei 100 parallelen Sessions mit je 505 tok/s benötigt der Node also insgesamt 50.500 tok/s Prefill-Kapazität (was nicht direkt gemessen wird).
„Gesamt" = Node-Rate
Diese Metriken beschreiben die gesamte Leistung der Inferenz-Instanz:
output_token_throughput: 1083→ Alle 100 Sessions zusammen generieren 1083 Output-Tokens pro Sekundetotal_token_throughput: 5468→ (Input + Output) zusammen → inklusive Prefill-Arbeit
Praktische Berechnungen
Input Token/s (nicht direkt gemessen)
"Input" oder "Prefill" in Gesamtzahlen ist nicht separat exportiert. Annäherung:
input_tokens/sec ≈ total_token_throughput - output_token_throughput
Beispiel (gemma @ conc=100):
- total: 5468 tok/s
- output: 1083 tok/s
- → input ≈ 4385 tok/s
Gesamtleistungs-Ranking
Für Kapazitätsplanung (wie viele Tokens kann der Node pro Sekunde verarbeiten?) verwende total_token_throughput:
| Modell @ conc=100 | Input t/s | Output t/s | Total t/s |
|---|---|---|---|
| moonshotai-kimi-k2.6 | ~5115 | 1270 | 6385 |
| gemma-4-31b-it | ~4385 | 1083 | 5468 |
| qwen3.6-27b-nvfp4 | ~4191 | 992 | 5183 |
| gpt-oss-120b | ~3300 | 804 | 4104 |
Erlebnis-Ranking
Für Kundenerfahrung (was spürt ein einzelner User?) verwende die _per_user-Metriken:
| Modell @ conc=100 | Prefill/User | Output/User |
|---|---|---|
| moonshotai-kimi-k2.6 | 276 | 17.9 |
| qwen3.6-27b-nvfp4 | 226 | 15.7 |
| gemma-4-31b-it | 505 | 13.4 |
| gpt-oss-120b | 137 | 12.3 |
Fehlerquellen
-
Prefill mit Output vergleichen – Prefill ist
tok/s/user, Output-Gesamt isttok/s. Ein Modell mit hohemprefill_throughput_per_userund niedrigemoutput_token_throughputist ein "Prompt-Monster" aber ein "Generation-Schnarcher". -
Gesamtleistung mit User-Erlebnis verwechseln – Ein Node mit 10.000 tok/s Gesamtleistung bei 500 concurrent Sessions gibt jedem User nur 20 tok/s. Das ist unbrauchbar für Chat.
-
Input/Prefill vernachlässigen – Bei RAG-Anwendungen (lange Contexte) dominiert der Prefill die Gesamtlaufzeit. Ein Modell mit 505 tok/s Prefill braucht für 4K Context ~8 Sekunden bis zum ersten Token.
Empfohlene KPIs pro Use-Case
| Use Case | Primäre Metrik | Sekundäre Metrik | Warnschwelle |
|---|---|---|---|
| Chat-UI (Echtzeit) | output_token_throughput_per_user |
ttft_p99 |
< 20 tok/s pro User |
| API-Burst (Batch) | output_token_throughput (gesamt) |
request_throughput |
Steigt nicht mehr mit Conc |
| RAG / Lang-Context | prefill_throughput_per_user |
ttft_p99 |
> 10s für 4K Input |
| Kapazitätsplanung | total_token_throughput |
ttft_p99 |
Degradation > 2× |