Initial commit: Hermes Agent Skills collection
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# 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× |
|
||||
Reference in New Issue
Block a user