Vue d'ensemble de l'architecture¶
Le schéma général¶
ENTRÉE : texte, images, vidéos
│
┌───────────────────────┴────────────────────────┐
│ │
texte → tokeniseur images/vidéos → MoonViT-V2
│ (163 840 jetons) (27 couches, 401 M)
│ │
│ projecteur MLP
│ │
└───────────────────────┬────────────────────────┘
│
séquence unifiée de vecteurs (d = 7168)
│
┌───────────▼───────────┐
│ COUCHE 1 (dense) │ FFN classique, pas de MoE
└───────────┬───────────┘
│
╔═══════════════════════▼═══════════════════════════╗
║ BLOC ×23 : KDA, KDA, KDA, Gated MLA ║
║ chaque couche d'attention est suivie d'un ║
║ Stable LatentMoE ║
║ chaque couche lit ses entrées via AttnRes ║
╚═══════════════════════╤═══════════════════════════╝
│
┌───────────▼───────────┐
│ COUCHE 93 : Gated MLA│ attention globale finale
└───────────┬───────────┘
│
agrégation AttnRes finale
│
RMSNorm + lm_head
│
163 840 logits → softmax
Le décompte des couches¶
93 couches au total. La décomposition est directement lisible dans le champ
full_attn_layers de la configuration publiée :
soit 69 couches KDA et 24 couches Gated MLA.
Pourquoi une MLA supplémentaire à la fin ?
Le rapport le dit explicitement : ensuring that the final layer always performs global attention. La dernière opération de mélange de jetons avant la production du logit est donc toujours une attention globale exacte, et non une attention linéaire à mémoire compressée.
Intuition : c'est au dernier instant que le modèle a besoin d'un accès exact et non filtré à tout le contexte pour trancher.
La couche 1 est dense (first_k_dense_replace: 1) : son FFN est un SiTU-GLU
classique à pleine largeur (dimension intermédiaire 33 792), sans routage. Les
92 autres couches ont un Stable LatentMoE.
Pourquoi la première couche est-elle dense ?
Pratique héritée de DeepSeek et conservée par toute la série Kimi. À la première couche, les représentations sont encore très proches des embeddings bruts ; le routage y est peu informatif et tend à se dégrader en routage par identité de jeton. Une couche dense évite ce gaspillage.
Ce que fait une couche¶
Chaque couche \(l\) enchaîne deux sous-couches, chacune précédée d'une lecture AttnRes et suivie d'une écriture résiduelle :
┌──── AttnRes : combinaison pondérée de b₀ … b_{n-1}, b_n^{i-1}
│ (au lieu du simple h_{l-1})
▼
┌──────────┐
│ RMSNorm │
└────┬─────┘
▼
┌────────────────────────────────┐
│ KDA (couches 1,2,3,5,6,7,…) │ mélange de jetons
│ ou Gated MLA (couches 4,8,…) │
└────┬───────────────────────────┘
▼ porte sigmoïde de rang plein
▼
┌──────────┐
│ RMSNorm │
└────┬─────┘
▼
┌────────────────────────────────┐
│ Stable LatentMoE │ mélange de canaux
│ 2 partagés + 16/896 routés │
└────┬───────────────────────────┘
▼
sortie de la couche, sommée dans la représentation du bloc b_n
Les trois axes, concrètement¶
Axe séquence : où circule l'information entre positions¶
| Couches KDA (69) | Couches Gated MLA (24) | |
|---|---|---|
| Mécanisme | Récurrence à décroissance + règle delta | Attention softmax sur latent compressé |
| Coût en longueur | \(O(T)\) | \(O(T^2)\) |
| Mémoire par requête | État fixe \(128 \times 128\) par tête | Cache latent de rang 512 par jeton |
| Position | Implicite (décroissance) | Aucune (NoPE) |
| Rôle | Récence, structure locale, position | Rappel global exact |
Axe profondeur : où circule l'information entre couches¶
Au lieu de \(\mathbf{h}_{l} = \mathbf{h}_{l-1} + f_{l-1}(\mathbf{h}_{l-1})\), chaque couche calcule une combinaison pondérée par attention des sorties de tous les blocs précédents et de l'embedding. Les 93 couches sont regroupées en 8 blocs de 12 couches (le dernier partiel : \(93 = 7\times12 + 9\)), et l'embedding compte comme une neuvième source.
Axe largeur : où circule l'information entre canaux¶
Chaque couche MoE dispose de \(896 \times 33{,}0\text{ M} = 29{,}6\) milliards de paramètres d'experts, dont \(16 \times 33{,}0\text{ M} = 528\) millions sont utilisés par jeton — plus 2 experts partagés toujours actifs.
Le budget de paramètres, module par module¶
Reconstruit depuis la configuration publiée ; le calcul complet et exécutable est en Retrouver les paramètres.
| Module | Par couche | Total | Part |
|---|---|---|---|
| Experts routés (896) | 29,60 G | 2 723 G | 98,0 % |
| Couches KDA (69) | 440 M | 30,4 G | 1,1 % |
| Experts partagés (2) | 132 M | 12,2 G | 0,4 % |
Embedding + lm_head |
— | 2,35 G | 0,08 % |
| Couches Gated MLA (24) | 232 M | 5,6 G | 0,20 % |
| Projections \(\mathbf{W}^{\downarrow},\mathbf{W}^{\uparrow}\) | 51 M | 4,7 G | 0,17 % |
| FFN dense (couche 1) | 727 M | 0,73 G | 0,03 % |
| Routeurs | 6,4 M | 0,59 G | 0,02 % |
| Encodeur visuel | — | 0,40 G | 0,01 % |
| Total | ≈ 2 779 G | 100 % |
La lecture qui compte
98 % des paramètres sont des experts MoE, et 98,2 % d'entre eux sont inactifs pour un jeton donné. Kimi K3 est essentiellement une immense bibliothèque de petits réseaux, plus une machinerie d'attention relativement modeste (36 G de paramètres, soit 1,3 % du total) chargée de décider quoi consulter.
Par où l'information passe, pour un seul jeton¶
1 embedding 7 168 valeurs
2 couche 1 dense (FFN 33 792) 0,73 G params actifs
3 ×92 couches :
a. AttnRes : lit ≤ 9 représentations ~7 168 × 9 comparaisons
b. attention KDA ou MLA ~440 M ou 232 M params
c. routeur : 896 scores → top 16 6,4 M params
d. W↓ : 7168 → 3584 25,7 M params
e. 16 experts en dimension 3 584 528 M params
f. RMSNorm + W↑ : 3584 → 7168 25,7 M params
g. 2 experts partagés en dimension 7 168 132 M params
4 RMSNorm finale
5 lm_head : 7 168 → 163 840 1,17 G params
─────────────────
total actif ≈ 104 G paramètres
Vérification de compréhension¶
Combien de communications all-to-all une passe avant déclenche-t-elle ?
Deux par couche MoE (dispatch et combine), soit \(92 \times 2 = 184\) pour un seul jeton traversant le modèle. C'est ce volume que MoonEP doit rendre parfaitement équilibré et sans copie intermédiaire.
Pourquoi les couches KDA ont-elles plus de paramètres (440 M) que les couches MLA (232 M) ?
Parce que MLA compresse : ses projections passent par des goulots de rang faible (512 pour KV, 1 536 pour Q), tandis que KDA projette à pleine largeur \(7168 \to 96\times128 = 12\,288\) pour Q, K et V — trois matrices de 88 M chacune, plus la porte et la sortie. C'est le prix de l'absence de cache : KDA n'a rien à compresser, puisqu'il ne stocke rien qui croisse.
Chapitre suivant : L'attention hybride 3:1