L'encodeur-décodeur causal (CED)¶
Le problème : le préremplissage des agents¶
Dans un flux de travail agentique, chaque appel d'outil produit un nouveau préremplissage. Le modèle lit le résultat de la commande, la sortie du test, le contenu du fichier — et doit propager tout cela à travers ses 40 couches avant de pouvoir écrire un seul jeton.
Quand le préfixe est en cache, le coût est faible. Quand il ne l'est pas — cache expiré, session reprise, suffixe nouveau — il faut tout recalculer. Le rapport technique décrit ce coût comme le goulet d'étranglement des charges agentiques.
L'idée¶
Le CED s'inspire de YoCo (You Only Cache Once, Sun et al., 2024), qui observait que la moitié supérieure des couches d'un Transformer peut partager directement le cache produit par la moitié inférieure.
DeepSeek généralise l'idée et lui ajoute de la profondeur de calcul. Les 20 premières couches forment un encodeur causal — causal parce que chaque jeton n'y voit toujours que ses prédécesseurs, contrairement à l'encodeur bidirectionnel d'un Transformer classique de traduction. Les 20 suivantes forment le décodeur.
La formulation¶
Pour l'attention globale, une couche \(l\) du décodeur (\(l > L/2\)) ne dérive pas ses entrées clé-valeur de son propre état caché \(H_l\). Elle les projette depuis l'état caché de sortie de l'encodeur, \(H_{L/2}\) :
| Symbole | Signification |
|---|---|
| \(H_{L/2}\) | état caché en sortie de la 20ᵉ couche, pour chaque jeton |
| \(W^{KV}_l\) | matrice de projection propre à la couche \(l\) |
| \(C_l\) | entrées clé-valeur de la couche \(l\) |
| \(Z_l\) | poids de compression associés |
| \(L\) | 40, le nombre total de couches |
Le point important est que les matrices \(W^{KV}_l\) dépendent de la couche. Chaque couche du décodeur obtient donc un cache différent, adapté à ses besoins — mais tous sont calculables à partir du même vecteur \(H_{L/2}\).
Pourquoi ce n'est pas un simple partage
Dans YoCo, les couches supérieures partagent littéralement le même cache. Dans le CED, elles partagent la même source mais appliquent chacune leur propre projection. C'est ce que le rapport technique appelle augmenter « la capacité de cache et la profondeur de calcul de la génération du cache ».
En pratique, dans V4.1-Flash, une seule couche du décodeur — la couche 20 — est en mode Full et compresse effectivement son cache depuis \(H_{20}\) ; les dix-neuf autres le réutilisent via CSA2. Le CED définit d'où vient le cache, CSA2 définit combien de couches en produisent un.
Le gain¶
Pendant le préremplissage, il suffit donc d'exécuter l'encodeur. La sortie \(H_{20}\) permet de fabriquer tout le cache global dont le décodeur aura besoin, sans exécuter le décodeur.
La complexité passe de :
pour \(N \gg n_{\text{win}}\). C'est une division par deux du calcul de préremplissage — et c'est la raison des 8 G de paramètres activés par jeton en préremplissage contre 16 G en décodage.
Le grain de sable : la fenêtre glissante¶
Le CED ne s'applique qu'à la voie globale. La fenêtre glissante, elle, garde un calcul couche par couche : à toute couche \(l\), les clés et valeurs locales dérivent de \(H_l\), l'état caché de cette couche-là.
C'est un choix délibéré : cela augmente la profondeur de calcul de la génération du cache local. Mais cela crée un problème.
Pour décoder, il faut le cache de fenêtre glissante des couches du décodeur. Or ce cache dépend des états cachés du décodeur, qu'on vient précisément de ne pas calculer. Le reconstruire exactement demanderait de faire passer les \(n_{\text{win}} \times L/2 = 128 \times 20 = 2\,560\) derniers jetons du prompt à travers les 20 couches du décodeur.
Pour une conversation à tours courts — un appel d'outil renvoie 200 jetons, le préfixe en fait 400 000 — ce surcoût de 2 560 jetons devient proportionnellement énorme.
La réponse de DeepSeek est le Decoder SWA Bounded Replay : ne rejouer que les \(n_{\text{win}} = 128\) derniers jetons, et accepter un état approché. Le mécanisme et son coût sont traités au chapitre SWA Bounded Replay.
Le CED n'est pas gratuit
Le CED déplace une difficulté plutôt que de la supprimer. Il divise le préremplissage par deux à condition d'accepter une reconstruction approchée de l'état local du décodeur. Sans SWA Bounded Replay, le gain s'évaporerait pour les conversations multitours à tours courts — le cas d'usage même que le modèle vise.
Ce qui reste non démontré¶
Le rapport technique affirme que le CED « maintient une performance comparable à la ligne de base ». Aucune ablation chiffrée n'est publiée : ni comparaison avec un modèle identique sans CED, ni mesure de l'écart introduit par le rejeu borné du décodeur. C'est l'une des affirmations que ce rapport classe comme revendiquées plutôt que démontrées.
Chapitre suivant : CSA2