# 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× |
