How many sessions can we keep warm per GPU config (H200 / B300) for Qwen3.6-27B, Qwen3.6-35B-A3B, Mistral-Medium-3.5-128B and GLM-5.2, at FP8 or (B300-only) NVFP4 weights? Working hypothesis: a request that hits a warm session is served well and comfortably; a cold request re-prefills its whole context and briefly thrashes the GPU for everyone. Plan on warm p5.
A transparent memory model, calibrated to a 1×H200 + 27B FP8 pool of 2.77M KV tokens — a figure projected from the baseline's measured FP16 pool (~1.337M tokens, ×2 for FP8 plus freed activation memory), not itself a direct measurement. The per-GPU activation reserve is solved from that anchor, so every other configuration falls out of the same arithmetic rather than being guessed.
tables.py use a fixed seed instead and are smooth. Real non-linearities (the expert-union kink at n=32, the cap's tail-truncation, the prefix floor) are explained in docs/scenarios.md.--kv-cache-dtype fp8_e4m3), as tested in the baseline. The FP16 switch doubles KV bytes/token (half the pool, heavier decode reads); weights and the DeltaNet state are unaffected, and the activation-reserve calibration stays pinned to the FP8 anchor. Sanity: FP16 + 27B + 1×H200 gives a 1.39M-token pool, inside the baseline's measured [1.14M, 1.40M].nvidia-smi dump shows 275,040 MiB = 288.4 GB — nominal bytes, no Hopper-style over-provision — so the transferred reserve must add the hidden margin back (research/gpu_b300.md; formerly a sensitivity, measured 2026-07-27).research/nvfp4.md — e.g. RedHatAI's 35B-A3B keeps the DeltaNet blocks BF16 while NVIDIA's GLM recipe quantizes only the routed experts). Gated to native-FP4 GPUs: vLLM's Hopper fallback is weight-only Marlin with a known correctness bug (open as of 2026-07-27), so H-generation NVFP4 is deliberately not modelled. The KV cache is never 4-bit here — an owner policy: vLLM's nvfp4 KV shipped 2026-05 (Blackwell-datacenter-only, values dequantized to FP8 before attention) but is not modelled in this study (research/nvfp4.md). Non-obvious: on the MoE models NVFP4 makes the fixed per-step read heavier (BF16-kept blocks) while expert reads shrink 1.78× — low-concurrency decode slows, high-concurrency speeds up.research/model_mistral_medium35.md.kv_decode_bpt/const. vLLM requires FP8 KV on this path, so the FP16 toggle is disabled. FP8 weights (~756 GB) fit from 7×H200 / 4×B300 per the vLLM recipe's 893 GB floor (3×B300 = 864 GB passes the pool arithmetic only); NVFP4 (~465 GB) from 2×B300. research/model_glm52.md.research/model_35ba3b.md. Edit the CONFIG block to revise.nvfp4.md and gpu_b300.md. Strongest cross-check: the derived GLM-5.2 NVFP4 resident matches the vLLM recipe's ~465 GB within 0.05%.A · Prompt-length distribution
Log-normal density, user vs subagent. Dashed line = the max_seq_len truncation cap.
B · Warm sessions (p5) vs hardware
The planning view: how the p5 warm-session count scales with GPU count, under the current workload, KV dtype and offload. Ring = your current configuration.
C · Per-user decode speed vs max_num_seqs
p50 line, p5–p95 band, log speed axis. Shaded span = GPU-resident warm capacity zone; lines = 40 (hard floor) / 50 (comfortable) tok/s.
D · Aggregate throughput vs max_num_seqs
System p50 tok/s (×replicas for DP).
Monte-Carlo model mirrored from scripts/scenario_model.py. Constants live in the CONFIG block. Model/GPU provenance: research/model_35ba3b.md, model_mistral_medium35.md, model_glm52.md, gpu_b300.md, nvfp4.md.