Files

83 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 verarbeitet
- `output_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 Sekunde
- `total_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
1. **Prefill mit Output vergleichen** Prefill ist `tok/s/user`, Output-Gesamt ist `tok/s`. Ein Modell mit hohem `prefill_throughput_per_user` und niedrigem `output_token_throughput` ist ein "Prompt-Monster" aber ein "Generation-Schnarcher".
2. **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.
3. **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× |