Aller au contenu

Cache persistant, noyaux et désagrégation

La politique de rétention à deux vitesses

Dans le déploiement de DeepSeek-V4, cache global et cache de fenêtre glissante étaient gérés séparément mais au même endroit : un cache persistant sur SSD avec éviction LRU, dimensionné pour que les deux types restent résidents plus de 72 heures sous charge typique.

Le cache local n'y était conservé qu'à deux points précis — la fin du prompt et la fin de la sortie — pour permettre la régénération et les sessions multitours. Malgré cela, il représentait près de la moitié de la capacité du cache persistant, parce qu'il était stocké non compressé.

V4.1 sépare les deux :

Cache global Cache de fenêtre glissante
Support SSD, cache persistant pool mémoire distribué, 10 % de la DRAM de chaque machine
Durée de vie garantie ≥ 72 heures quelques minutes (TTL court)
Motif de réutilisation longue traîne fenêtre étroite dans une session active
En cas de manque recalcul complet du préfixe Encoder SWA Bounded Replay, 128 jetons

Le pool mémoire est bien plus petit en capacité agrégée, mais son taux de rotation élevé suffit à servir la grande majorité des sessions actives simultanées : les entrées expirées sont recyclées immédiatement.

Pourquoi cela tient

La viabilité de tout le dispositif repose sur un seul point, que le rapport technique identifie explicitement comme la pierre angulaire :

Section 3.2.1

« Ce rejeu borné est la pierre angulaire de la conception : il transforme un manque catastrophique en une dégradation gracieuse et peu coûteuse, justifiant ainsi le retrait du cache SWA du cache persistant. »

Sans le rejeu borné, un manque sur le cache local imposerait une passe complète sur 5 120 jetons — assez coûteux pour rendre l'éviction inacceptable. Avec lui, le manque coûte 128 jetons.

La fusion de noyaux

L'architecture est conceptuellement complexe — trois modes CSA2, indexation à deux niveaux, flux résiduels multiples, tables de correspondance, décodage spéculatif. Le rapport technique souligne que le flux de noyaux GPU qui en résulte est pourtant « remarquablement concis ».

Les noyaux mobilisés, tous issus de bibliothèques publiées par DeepSeek :

Bibliothèque Noyau
FlashMLA RoPE-attention-RoPE-cast fusionné
DeepGEMM Mega-Gate, Mega-mHC, Mega-MoE
TileKernels noyaux divers en TileLang
DeepSelect noyau Top-K

Résultat annoncé : une couche dont le CSA2 est en mode Reuse — c'est-à-dire 32 couches sur 40 — s'exécute avec 15 noyaux au préremplissage et 11 au décodage.

La désagrégation EPD

Au niveau du déploiement, DeepSeek sépare trois rôles sur des ressources distinctes : encodage visuel, préremplissage et décodage (Encoder– Prefill–Decode disaggregation).

Chacun peut ainsi être dimensionné indépendamment et recouvert en exécution. Ce n'est pas une nouveauté propre à V4.1 — la désagrégation préremplissage/décodage est une pratique établie — mais l'ajout d'un étage encodeur visuel séparé suit la même logique que l'encodeur désagrégé côté entraînement.

L'entraînement de CSA2 en distribué

Une difficulté peu visible mérite d'être signalée, car elle explique pourquoi peu d'architectures partagent leur cache entre couches.

Les couches qui partagent un cache peuvent être placées sur des étages de pipeline différents. Or l'exécution par étage suppose classiquement que chaque étage est autonome. DeepSeek a dû introduire trois mécanismes :

  • indexeurs fantômes — une réplique exécutable légère sur chaque étage concerné, avec un unique propriétaire logique des paramètres partagés. Le propriétaire assure l'optimisation et le checkpointing ; la synchronisation des paramètres et l'agrégation des gradients maintiennent les répliques cohérentes ;
  • extensions de charge utile du pipeline — les représentations intermédiaires et les informations de routage creux sont ajoutées aux communications point-à-point existantes, partitionnées de façon cohérente avec le parallélisme de contexte ;
  • gestion d'état partagé au niveau des micro-lots — suivi des durées de vie des états à travers l'exécution avant, la recalcul d'activations et la rétropropagation, avec libération dès que le dernier consommateur a terminé.

Pourquoi c'est important

Ces mécanismes ne changent rien à la qualité du modèle. Ils expliquent pourquoi le partage de cache entre couches, une idée simple sur le papier, reste rare : il casse l'hypothèse d'autonomie des étages de pipeline sur laquelle repose l'entraînement distribué standard.


Partie suivante : Entraînement