veilletech.fr
9 oct. Feed du jour
#08 LLM Article

Dynamo : le cache KV suit la session de l'agent

Un agent qui attend un outil n'a pas besoin du GPU. Juste de son cache.

NVIDIA Dynamo, le routeur au-dessus de vLLM et SGLang, regroupe les requêtes d'un agent par identifiant de session — reconnu d'office pour Claude Code, Codex et OpenCode. Il peut ainsi mettre en pause, à la frontière d'un appel d'outil, les sessions qui saturent le cache KV au lieu de l'évincer. Gain annoncé : 12 à 16 % de débit sur SWE-bench face au routage par requête.

3 min de lectureavancévidéo 1:15
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Pourquoi ça compte
  3. Le mécanisme
  4. Les résultats
  5. Comment s'y prendre
  6. À retenir

Ce qui se passe

Sur le blog de PyTorch, l'équipe de NVIDIA Dynamo — la couche qui route les requêtes vers des moteurs vLLM ou SGLang — explique comment elle sert les agents de code. Tout repose sur un identifiant de session, commun à toutes les requêtes d'une même trajectoire d'agent, avec un identifiant parent pour les sous-agents.

Pourquoi ça compte

Un agent n'envoie pas des requêtes isolées. Sa session s'ouvre sur des dizaines de milliers de jetons (prompt système, outils, consignes), renvoie tout son contexte à chaque tour, et passe l'essentiel de son temps à attendre un outil — pendant que son cache KV reste en mémoire GPU. Un routeur qui raisonne requête par requête, y compris le KvRouter de Dynamo, ignore que N agents au tour k occupent N fois leur contexte. Quand ce volume dépasse la HBM, puis la DRAM, le moteur évince des sessions vivantes, et chaque tour suivant repaie un préremplissage complet.

Le mécanisme

L'identifiant. Dynamo lit les en-têtes que les agents envoient déjà :

Agent Session Parent
Claude Code x-claude-code-session-id, x-claude-code-agent-id x-claude-code-parent-agent-id
Codex thread-id x-codex-parent-thread-id
OpenCode x-opencode-session-id x-opencode-parent-session-id

Un agent maison ajoute x-dynamo-session-id, et x-dynamo-parent-session-id pour un sous-agent, à ses appels compatibles OpenAI :

Terminal
curl http://localhost:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'x-dynamo-session-id: revue-pr-1234' \
  -d '{"model":"mon-modele","messages":[{"role":"user","content":"..."}]}'

Des greffons couvrent Pi, Hermes et OpenClaw (ai-dynamo/agent-plugins).

Le planificateur. Écrit en Rust à partir de l'article ThunderAgent, il suit chaque session sur deux axes : elle génère ou elle attend un outil, elle est active ou suspendue. Sa mesure est U, la part du cache KV d'un GPU occupée par les sessions qui lui sont affectées.

appel d'outilrésultatU ≥ 0,95U ≤ 0,85GénèreAttend un outilSuspendue
Une session n'est suspendue qu'en attendant un outil, jamais en pleine génération

Les résultats

Sur SWE-bench, avec deux répliques MiniMax-M2 en TP4 sur un nœud 8×H100 : +12 à 16 % de débit face au seul routage KV. Sur des déploiements d'apprentissage par renforcement (Qwen3-Coder-30B-A3B, 8×H20), +11 à 14,6 % à concurrence moyenne face à l'équilibreur par défaut de VERL, avec plus de 94,5 % de réussite du cache de préfixe. Ce sont les chiffres de l'éditeur.

Restent expérimentaux un index du cache déplacé vers Mooncake et une interface de « KvHints » (Share, Prefetch, Demote, Pin, Retain) proposée à vLLM et SGLang ; seul Share fonctionne déjà.

Comment s'y prendre

Lancer le déploiement avec DYN_REQUEST_TRACE=1. Dynamo écrit alors une trace par requête — session, jetons, métriques de cache, noms d'outils — sans le contenu des prompts par défaut. Elle se rejoue hors GPU avec AISimulate, ou sur vos GPU avec AIPerf, pour comparer routage, nombre de workers et capacité de cache sur votre propre trafic.

Source : Session-Aware Agentic Inference with NVIDIA Dynamo, PyTorch, 8 octobre 2026.