Zum Inhalt springen
Kurzer Hinweis: flozi00 TechHub ist ein Solo-Nebenprojekt neben einem Vollzeitjob — persönliche Lernnotizen, keine offiziellen Aussagen. Kritische Schritte selbst prüfen.

Ihre Agenten-Flotte ist ein Storage-Array: Die KV-Cache-Tiering-Mathematik hinter agentischer Inferenz

Warum Agenten-Token-Kosten nicht wie Chat skalieren: durchgerechnete KV-Bytes pro Runde für eine 100k-Kontext-Agentensession auf DeepSeek-V3-MLA, die flottenweiten GB/s allein fürs KV-Re-Read, die PCIe-vs-HBM-Tiering-Lücke und ehrliche Kapazitätsplanung in Working-Set-Bytes — belegt mit DualPath[^dualpath], HotInfra'26 und den Primärquellen.

9 Min. Lesezeitflozi00
aimachine-learninggpugpu-memoryinferenceoptimizationdeep-learning

Agentische Inferenz wird verkauft als „dieselben GPUs, längere Prompts". Die Arithmetik sagt etwas anderes. Eine Multi-Turn-Agentenschleife sieht-chat-Workload gar nicht ähnlich: Sie sieht aus wie ein Storage-Array mit angehängten GPUs — eine Flotte von Prozessen, deren dominierende Kosten nicht Tokens-pro-Sekunde sind, sondern Bytes an KV-Cache, die pro Runde bewegt werden, und deren Kapazitätsplanung in Gigabyte Working Set erfolgen sollte, nicht in Requests oder FLOPs. Dieser Leitfaden rechnet die Zahlen pro Runde und pro Flotte durch — jede Figur berechnet aus der site-verifizierten KV-Cache-Formel und Primärquellen.

Die Form des Workloads: Lange-Präfix-Re-Reads plus kleine Incremente

Chat besteht aus kurzen Prompts, wenigen Runden, kleinem Zustand. Eine agentische Schleife — planen, ein Tool aufrufen, das Ergebnis lesen, wieder planen — macht das Gegenteil. Der Sitzungskontext wächst monoton: Jede Runde liest das gesamte Präfix erneut und hängt ein kleines Inkrement an. Pro Runde macht ein Agent mit 100k Kontext, einem 2.048-Token-Tool-Ergebnis und 512 generierten Tokens:

  • Präfix-Re-Read: Die vollständige KV von ~100k bisherigen Tokens muss bei jedem Decode-Schritt der Attention zur Verfügung stehen — 512-mal neu gelesen während der Antwort.
  • Inkrement: Nur 2.048 + 512 Tokens neue KV werden berechnet und geschrieben.

Referenzmodell: DeepSeek-V3 MLA1 — die site-verifizierte Konfiguration (KV-Cache-Leitfaden): 576 Latent-Elemente pro Token pro Schicht, 61 Schichten, bf16 → 70.272 B ≈ 68,6 KiB pro Token. Selbst nach MLAs 93,3-%-Kompression gegenüber MHA ist der Multiplikator die Kontextlänge:

KV pro Sitzung=70.272 B/Token×100.000 Tokens=7,03 GB\text{KV pro Sitzung} = 70.272 \, \text{B/Token} \times 100.000 \, \text{Tokens} = 7{,}03 \text{ GB}

Das ist ein Agent, der auf der GPU residiert. Jetzt zählen wir die Bytes, die tatsächlich bewegt werden müssen.

HBM-Bytes pro Runde: Agent vs Chat

Beim Decode liest jeder Schritt die vollständige KV dieses Workers aus dem HBM (das Gewichts-Lesen teilt sich über den Batch; das KV-Lesen nicht — es ist pro Sequenz, bei jedem Schritt, immer). Direkt berechnet:

GrößeAgent: 100k Kontext, 512-Token-RundeChat: 8k Kontext, 256-Token-Runde
Gehaltene KV pro Sitzung7,03 GB0,56 GB
KV-Read pro Decode-Schritt7,03 GB0,56 GB
KV-Read pro Runde (Schritte × Voll-Read)512 × 7,03 = 3.598 GB256 × 0,56 = 144 GB
Neue KV pro Runde geschrieben (2.560 / 256 Tokens)0,18 GB0,018 GB

Eine Agentenrunde bewegt 25× die HBM-Bytes einer Chat-Runde auf demselben Modell — und der Faktor skaliert linear mit dem Kontext, weil der Read-pro-Schritt die ganze Sitzung ist, nicht das Inkrement. Der KV-Write ist Rauschen; das Re-Read ist der Workload. Dieses eine Verhältnis erklärt, warum Agenten-Token-Kosten nicht wie Chat-Token-Kosten aussehen: Chat amortisiert, Agents scannen erneut.

Prefill-vs-Decode-Rahmen: Das inkrementelle Prefill einer Runde (~2k Tokens) ist FLOP-lastig — rund 2 × 2 × 37B aktive Parameter × 2.048 ≈ 303 TFLOP, weniger als eine halbe Sekunde auf einer H100. Der Decode ist bytes-lastig: 3.598 GB reine Re-Reads pro Runde. Keine der beiden Formen ist die Engpass-Form von Chat.

Die Bandbreiten-Wand: 50 gleichzeitige 1M-Kontext-Worker

Skaliere zu einer bescheidenen Agentenflotte: 50 Worker, jeweils bei 1M Kontext geparkt.

KV pro Worker=70.272×106 B=70,27 GBFlotten-Working-Set=50×70,27=3.514 GB (≈3,51 TB)\text{KV pro Worker} = 70.272 \times 10^6 \, \text{B} = 70{,}27 \text{ GB} \qquad \text{Flotten-Working-Set} = 50 \times 70{,}27 = 3.514 \text{ GB} \,(\approx 3{,}51 \text{ TB})

Damit überhaupt dekodiert werden kann, liest jeder Worker bei jedem Schritt seine eigene vollständige Cache erneut (teils aus HBM, teils von überall, wohin das Tiering den Rest gelegt hat). Aggregierte Read-Bandbreite, nur um die Flotte dekodieren zu lassen, bei drei Raten pro Worker:

Decode-Rate pro WorkerAggregierte KV-Read-Bandbreite
10 Tok/s50 × 10 × 70,27 GB = 35,1 TB/s
20 Tok/s70,3 TB/s
40 Tok/s140,5 TB/s

Eine einzelne H100 liest 3,35 TB/s. Auf ~25 Karten (die reine KV-Kapazität einer 141-GB-Karten-Flotte — eine Karte der H200-Klasse, HBM3e mit 4,8 TB/s — unten berechnet) bedeuten 70,3 TB/s ~2,8 TB/s reinen KV-Traffic pro Karte — 84 % der 3,35 TB/s einer H100 bzw. 59 % der 4,8 TB/s dieser H200, für die Bewegung der eigenen Historie eines einzigen Workers zurück zu sich selbst, ohne ein einziges Attention-Rechenwerk.

Die GPU wartet meist im Leerlauf: Für ein 37B-aktiv-MoE-Token bei 100k Kontext braucht die Arithmetik ~75 µs SM-Zeit, während der KV-Read ~2,1 ms dauert — eine Rechen-Auslastung von 3,4 %. Die Karte ist nicht FLOP-begrenzt; sie ist Storage-I/O-begrenzt, ganz im Sinne eines Datenbankservers. Genau diese Beobachtung stellt HotInfra'262 ins Zentrum: Reimagining LLM Inference Infrastructure with Memory-Centric KV Cache Servers (Kiyawat & Skadron, HotInfra '26, ko-lokiert mit ISCA '26) schlägt vor, KV in speicherzentrische Server zu disaggregieren — auf einem CXL/PNM/PIM-Gerätespektrum von CPU-angehängten CXL-DDRx-Expandern bis zu Near-Memory-Compute-Knoten. Ihre Beispiel-Workload ist ein 32K-Token-Generation-Lauf. Das Muster hat in ihrem Vokabular einen Namen: ein KV-Cache-Server — Storage-Array-Denken, formal vorgeschlagen. Die Mechanik spiegelt, was die NVLink-Bandbreiten-Grundwahrheit und unsere Scale-up-Netzwerk-Analyse andernorts zeigen: Das Fabric, das der Workload wirklich braucht, ist das Speicher-Fabric — und die GPUs hängen daran wie Beschleuniger.

Das Tiering-Muster

DualPath (arXiv:2602.21548) formuliert das Problem im eigenen ersten Satz: „The performance of multi-turn, agentic LLM inference is increasingly dominated by KV-Cache storage I/O rather than computation." In disaggregierten Prefill/Decode-Clustern sättigt das Laden der Runden-KV aus externem Storage die Storage-NICs der Prefill-Seite, während die der Decode-Seite brachliegen; DualPath ergänzt einen Storage-zu-Decode-Pfad (via RDMA über das Compute-Netzwerk) und berichtet bis zu 1,87× Offline- und im Mittel 1,96× Online-Serving-Durchsatz gegenüber der hauseigenen Baseline. Die Bedeutung für die Kapazitätsplanung: Das Paper behandelt KV als einen platzierten, bewegten und lastausbalancierten Bytestrom — ein Storage-Scheduling-Problem, kein Model-Serving-Problem. Es belegt zahlenmäßig, was die Runden-Mathematik oben vorhersagt: Der Präfix-Re-Read ist eine zwingende Datenbewegung, und wohin diese Bytes geroutet werden, entscheidet den Durchsatz, bevor FLOPs überhaupt ins Bild kommen.

TensorRT-LLMs KV Cache Manager V23 ist dasselbe Muster in Produktform: ein Hot Tier im HBM und ein Cold Pool für ausgelagerte KV, Cold-Page-Codecs für komprimierte Kaltseiten, pool_ratio-Quoten pro Schichtgruppe und Cold-Tier-Statistiken in kvCacheIterationStatsByColdPoolGroup (die 1.2-Release-Notes führen die Pool-Ratio- und Cold-Tier-Statistik-Breaking-Changes; die Cold-Page-Codecs und die V1-Deprekations-Ankündigung kamen mit der v1.3.0-RC-Reihe, August 2026). V2 ist die empfohlene Architektur, und NVIDIA hat angekündigt, dass V1 depreziert wird; Hot/Cold-Tiering ist längst keine Exotik mehr — es ist das default-geschaltete Control Plane für exakt den Re-Read-Traffic, den dieser Leitfaden berechnet.

Die mechanische Lücke: PCIe vs HBM

Ob das „Cold Tier" Host-DRAM über die PCIe-Leitung4, ein CXL-Expander oder ein entfernter KV-Server ist — die Bytes kreuzen ein Fabric, das langsamer ist als HBM, meist PCIe. PCIe 5.0 x16 ≈ 64 GB/s roh, ~63 GB/s effektiv (32 GT/s × 16 Lanes bei 128b/130b-Encoding, gemäß PCI-SIG-Gen5-Spezifikation). Gegen HBM3e mit 4,8 TB/s:

4.800 GB/s63 GB/s≈76×\frac{4.800 \text{ GB/s}}{63 \text{ GB/s}} \approx 76\times

Die ~75-fache Lücke ist kein Detail — sie fixiert das Fundament jeder Runde. Re-Read-Zeiten, berechnet:

BewegungHBM3e (4,8 TB/s)PCIe 5.0 x16 (~63 GB/s)
100k-KV (7,03 GB) neu lesen — jede Rundengrenze1,46 ms0,112 s
1M-KV (70,27 GB) nachladen — Eviction/Snapshot-Restore14,6 ms1,12 s

Ein Page-in aus dem Cold Tier addiert eine Zehntelsekunde bis zu einer Sekunde pro Runde — unsichtbar in Chat-Maßstäben, katastrophal bei Agenten-Kadenz (eine Tool-Schleife kann in unter einer Sekunde rondieren). Deshalb ist die Placement-Politik des Tierings (welche Seiten heiß bleiben) wichtiger als die Kapazität: Bytes, die im HBM bleiben, kosten 76× weniger Latenz bei jeder Berührung. NVLink-C2C-Klasse-Links (2,25 TB/s+ laut den NVLink-Zahlen) liegen zwischen den Extremen und sind der Grund, warum integrierte GB200-Klasse-Designs besser standhalten als PCIe-angehängtes Host-Offloading.

Die Ökonomie: Tokens/Joule mit dem I/O-Term

Chat-Decode-Ökonomie: Batch 1, ein Schritt liest Gewichte + KV. Agenten-Decode-Ökonomie auf derselben 700-W-Karte, pro Token berechnet:

SzenarioSchrittdauer (Gewichte 65 GB + KV)J/TokenObergrenze
Chat, 8k Kontext19,6 ms13,7 J51,1 Tok/s
Agent, 100k Kontext21,5 ms15,1 J46,5 Tok/s
Agent, 1M Kontext40,4 ms28,3 J24,8 Tok/s

Die interessante Zeile ist nicht J/Token — sondern dass bei 1M ~52 % der Schrittdauer eines Agenten reiner KV-Re-Read sind (70,27 GB ÷ 3,35 TB/s = 21,0 ms des 40,4-ms-Schritts; die restlichen ~48 % sind der Gewichts-Read — jede Mikrosekunde des Schritts ist Speicher-Traffic, nichts davon Rechenwerk). Die GPU verbrennt ihre volle 700 W, während sie 3,4 % nützliche Mathematik macht. Energie pro geliefertem Agenten-Token wird von einem I/O-Term dominiert, nicht von einem Rechenterm — das Gegenteil von Chat, wo der Gewichts-Read dominiert und Batching ihn amortisiert. Sobald KV hinter einem langsameren Tier liegt, kommt die PCIe-Energie dazu: Sekundenbruchteile pro Restore sind reale Joule für null FLOPs.

Wann Prefix-Caching das Re-Read tötet

RadixAttention (SGLang)5, arXiv:2312.07104) macht die Recompute-Hälfte des Re-Reads fast gratis: Geteilte Präfixe liegen in einem Radix-Baum, und das Paper berichtet bis zu 6,4× Durchsatz auf präfix-lastigen Workloads — Multi-Turn-agentische Schleifen sind sein Best-Case-Muster (Runde n teilt die Runden 1…n−1). Prefix-Caching vernichtet Prefill-Rechenleistung und hält die heiße KV auf einer GPU resident, sodass HBM-Re-Reads mit vollem Tempo fließen.

Wann es nicht geht: Eviction unter Gleichzeitigkeit

Prefix-Caching kann Kapazität nicht heilen. LRU-Eviction schlägt in dem Moment zu, in dem das Working Set das Hot Tier übersteigt — und das Working Set ist exakt das, was dieser Leitfaden berechnet. Auf einer 141-GB-Karte (Gewichte auf anderen Karten des Knotens):

1M-Worker pro 141-GB-Karte, nur KV: 141/70,27=2,0\text{1M-Worker pro 141-GB-Karte, nur KV: } 141/70{,}27 = 2{,}0

50 Worker × 1M Kontext = 3.514 GB KV = ~25 × 141-GB-Karten oder ~20 × 180-GB-Karten — nur um den Zustand der Flotte zu halten, bevor ein einziges FLOP Gewichte platziert ist. Bei 100k im Schnitt ist das Set 351 GB — immer noch 2,5 Karten voller reinem Cache. Unter einem Radix-Baum ist das brutal: Sobald Worker 51 ankommt, verdrängt die LRU genau die langen Präfixe, die agentische Runden billig machten — und die nächste Runde zahlt 0,11–1,1 s (siehe PCIe-Tabelle), um Bytes wiederherzustellen, die die Flotte gerade erst berechnet hat. Eviction-Druck bei Agenten-Kadenz ist eine Thrash-Schleife, und Gleichzeitigkeit ist der Auslöser.

Wie Kapazitätsplanung wirklich aussieht (die kritische Sicht)

„Agenten laufen auf derselben Infrastruktur wie Chat" ist die Marketing-Zeile — meist gefolgt von einer Tokens/s-Zahl. Die Arithmetik sagt etwas anderes, und die ehrliche Faustregel fällt direkt aus den Zahlen oben:

KV-GB pro gleichzeitigem Agenten×Flottengro¨ße=Hot-Tier-Bytes;dann ×1/76 PD-Ratio fu¨r den Cold Tier wa¨hlen, NIC/HBM/Host-RAM passend.\text{KV-GB pro gleichzeitigem Agenten} \times \text{Flottengröße} = \text{Hot-Tier-Bytes;} \quad \text{dann } \times 1/76 \text{ PD-Ratio für den Cold Tier wählen, NIC/HBM/Host-RAM passend.}
  1. Working Set pro Agenten berechnen: Bytes/Token (hier 70,27 KB, gemäß den MLA-Zahlen) × Kontext. Aufschreiben; das ist die eine Zahl, die alles dimensioniert.
  2. Mit der Flottengröße multiplizieren: Das ist die Kapazität des Storage-Arrays. 50 × 1M = 3,5 TB verwalteter Zustand — planen wie Array-Kapazität: Hot-HBM-Tier, Cold-DRAM/CXL/Remote-Tier, Eviction-Politik als Placement-Engine.
  3. Bewegung provisionieren, nicht FLOPs: Flotten-Decode-Rate × Working Set = benötigte Read-Bandbreite (oben 70,3 TB/s bei 20 Tok/s). Prüfen gegen das aggregierte HBM des Hot Tiers und gegen das Cold-Tier-Fabric (63 GB/s pro PCIe x16; ~50 GB/s pro 400-Gb-NIC) — genau DualPaths Storage-NIC-Beobachtung.
  4. Die Idle-Mathematik prüfen, bevor man irgendeiner Tokens/s-Zahl glaubt: Bei 3,4 % GPU-Auslastung ist die Flotte ein Platten-Array mit teuer angehängten SIMD-Einheiten.

Das Muster formiert sich bereits: DualPath routet den Bytestrom, TensorRT-LLM V2 liefert Hot/Cold-Pools mit Codecs und Quoten, HotInfra'26 speichert KV in speicherzentrischen Cache-Servern auf CXL/PIM-Fabrics. Die Infrastruktur-Implikation — Agentenflotten wie Storage-Arrays planen, in Working-Set-Bytes — ist keine spekulative Prognose; sie ist die Design-Annahme, auf der diese Systeme 2026 gebaut wurden. Kapazität ist im Chat-Zeitalter still gescheitert, weil der Zustand eines Gesprächs trivial klein ist. Der Zustand einer gleichzeitigen Agentenflotte sind Terabytes, laufend neu gelesen. So dimensionieren.

Referenzen

Footnotes

  1. DeepSeek-V2, arXiv:2405.04434 (93,3 % KV-Reduktion); DeepSeek-V3-Konfiguration: kv_lora_rank 512 + qk_rope_head_dim 64 = 576 Elemente × 61 Schichten × 2 B = 70.272 B/Token ≈ 68,6 KiB. https://arxiv.org/abs/2405.04434 ↩

  2. Kiyawat & Skadron, Reimagining LLM Inference Infrastructure with Memory-Centric KV Cache Servers, HotInfra '26 (3rd Workshop on Hot Topics in System Infrastructure, ko-lokiert mit ISCA '26, Raleigh, NC, 28. Juni 2026). PDF-verifiziert: CXL-DDRx-→-CXL+-→-PNM+PIM-Gerätespektrum, KV-Cache-Server-Disaggregation, 32K-Token-Beispiel-Workload. https://hotinfra.org/2026/papers/hotinfra26-final59.pdf ↩

  3. NVIDIA TensorRT-LLM Release Notes, Reihe 1.2: KV Cache Manager V2 Cold Pool / Cold-Page-Codecs, pool_ratio-Schichtgruppen-Quoten (Breaking Change), kvCacheIterationStatsByColdPoolGroup-Cold-Tier-Statistiken; V2 empfohlen, V1 depreziert. https://nvidia.github.io/TensorRT-LLM/release-notes.html und https://github.com/NVIDIA/TensorRT-LLM/releases ↩

  4. PCI-SIG PCIe-5.0-Spezifikation: 32 GT/s pro Lane, 128b/130b-Encoding → ~64 GB/s roh / ~63 GB/s effektiv pro x16-Richtung. https://pcisig.com ↩

  5. Zheng et al., SGLang: Efficient Execution of Structured Language Model Programs, arXiv:2312.07104. RadixAttention-Radix-Baum-KV-Wiederverwendung, bis zu 6,4× Durchsatz auf präfix-lastigen (Multi-Turn-, Agenten-)Workloads. https://arxiv.org/abs/2312.07104 ↩