# AIPerf Long-Input and Extreme-Context Benchmarking Session: 2026-06-18 — Full suite benchmark of 4 models (gemma-4-31b-it, gpt-oss-120b, moonshotai/kimi-k2.6, qwen3.6-27b-nvfp4) on ai.noris.de ## Key Finding: Long Inputs > High Concurrency for Bottleneck Isolation When evaluating maximum node capacity, testing conc=200+ is often operationally irrelevant because TTFT p99 exceeds acceptable thresholds (7s+ at conc=100). The real infrastructure bottleneck for RAG / long-context workloads is **memory-bandwidth-bound prefill** with long inputs. Recommended alternative: **Long-Input Prefill Test** - Concurrency: Fixed low (e.g., 10) to avoid queueing artifacts - Input length: 1024 / 2048 / 4096 tokens (double/triple the standard 512) - Output length: Short (128) to isolate prefill from generation - Duration: 300s to amortize cold-start ## Extreme Context Test (10k Input / 10k Output) For stress-testing context-window limits and sustained generation capacity: - **Input:** 10,000 tokens - **Output:** 10,000 tokens - **Concurrency:** 1 (sequentially, because runtime is 200–1000 seconds per request) - **Requests:** 10 per model - **Purpose:** Validates the full KV-cache lifecycle and sustained decode performance **Expected runtime:** At 10–50 tok/s output, one request takes 200–1000 seconds. Schedule accordingly. **Template:** ```yaml schema_version: "2.0" benchmark: models: items: - name: "vllm/MODEL_NAME" endpoint: urls: ["https://ai.noris.de/v1"] type: "chat" streaming: true datasets: - type: "synthetic" name: "main" entries: 10 isl: type: "fixed" value: 10000 osl: type: "fixed" value: 10000 phases: - type: "concurrency" name: "profiling" requests: 10 ``` ## Correct AIPerf 0.10.0 Synthetic Dataset Config (Long Input) ```yaml schema_version: "2.0" benchmark: models: items: - name: "vllm/gemma-4-31b-it" endpoint: urls: ["https://ai.noris.de/v1"] type: "chat" streaming: true datasets: - name: "synthetic_long" type: "synthetic" prompt_template: content: "Analyze the following topic in depth and provide detailed insights." strategy: type: "fixed" max_total_tokens: 1152 input_tokens: 1024 output_tokens: 128 phases: - type: "concurrency" name: "profiling" duration: 300 ``` **Critical YAML structure rules learned:** - `datasets` MUST be a **list** (`- name: ...`), NOT a dict with `default:` key - `name` goes directly under the list item, NOT nested under a `synthetic:` key - `prompt_template` and `strategy` are siblings to `name` and `type` ## Benchmark Results at conc=100 (Standard 512-in / 128-out) | Model | Input tok/s (total) | Output tok/s (total) | Total tok/s | TTFT p99 | |-------|--------------------|---------------------|-------------|----------| | moonshotai-kimi-k2.6 | 5,115 | 1,270 | 6,385 | 3,926ms | | gemma-4-31b-it | 4,385 | 1,083 | 5,468 | 2,060ms | | qwen3.6-27b-nvfp4 | 4,191 | 992 | 5,183 | 7,391ms | | gpt-oss-120b | 3,300 | 804 | 4,104 | 7,310ms | **Prefill degradation @ conc=100:** All models lose ~80% of per-user prefill speed vs conc=10. ## MSP Service-Tier Perspective (User Preference) When presenting for infrastructure/commercial decisions, structure per **service tier** not model comparison: - Single-User Experience (conc=1): TTFT p99, Output/User, SLA class - Multi-Tenant Load (conc=10→100): Throughput scaling, degradation curve - Steady-State: Long-run stability, drift detection - Service Recommendation: Positioning (Entry/Premium), suitable use cases ## Related Files - `templates/aiperf-long-input-config.yaml` — Working starter template - `references/aiperf-suite-orchestrator-pattern.md` — Full orchestration pattern - `references/aiperf-token-metrics-explained.md` — Token metric unit reference