Aller au contenu

Exercices

Trente questions pour vérifier votre compréhension, du niveau débutant au niveau avancé. Chaque corrigé renvoie au chapitre concerné.

Niveau 1 — Fondations

1. Que calcule exactement un modèle de langage ?

Une distribution de probabilité \(P_\theta(x_t \mid x_{<t})\) sur le jeton suivant, sachant tous les précédents. Une procédure d'échantillonnage séparée tire ensuite un jeton dans cette distribution.

→ Chapitre 01

2. Pourquoi le vocabulaire de Kimi K3 compte-t-il 163 840 entrées et pas 100 000 mots ?

Parce que les jetons sont des sous-mots, pas des mots. Cela borne le vocabulaire tout en couvrant n'importe quelle chaîne — fautes de frappe, noms propres, identifiants de code, langues sans espaces —, puisque BPE part des 256 octets.

→ Chapitre 02

3. Combien d'octets occupe un vecteur caché de Kimi K3 en BF16 ?

\(7\,168 \times 2 = 14\,336\) octets, soit 14 Kio par jeton et par couche.

4. Qu'est-ce qui différencie le prefill du decode ?

Le prefill traite toute l'entrée en parallèle : limité par le calcul. Le decode produit un jeton à la fois en relisant tous les poids : limité par la bande passante mémoire. Ils exigent des noyaux différents.

5. Pourquoi divise-t-on par \(\sqrt{d_k}\) dans l'attention ?

Le produit scalaire de deux vecteurs de variance 1 sur \(d_k\) dimensions a une variance de \(d_k\). Diviser par \(\sqrt{d_k}\) ramène la variance à 1, ce qui maintient le softmax dans un régime non saturé.

6. Quel est le coût mémoire d'un cache KV à 1 M de jetons, contre celui d'un état KDA ?

Le cache MLA croît linéairement : ~29 Gio à 1 M chez K3. L'état KDA est fixe : ~217 Mio par requête, quelle que soit la longueur. C'est le cœur du compromis de l'attention hybride.

Niveau 2 — Architecture

7. Écrivez l'équation de KDA et nommez ses trois opérations.
\[\mathbf{S}_t = (\mathbf{I}-\beta_t\mathbf{k}_t\mathbf{k}_t^{\top})\operatorname{Diag}(\mathbf{\alpha}_t)\mathbf{S}_{t-1} + \beta_t\mathbf{k}_t\mathbf{v}_t^{\top}\]

① \(\operatorname{Diag}(\mathbf{\alpha}_t)\) : oublier, canal par canal. ② \((\mathbf{I}-\beta_t\mathbf{k}_t\mathbf{k}_t^\top)\) : effacer ce qui concerne la clé courante. ③ \(+\beta_t\mathbf{k}_t\mathbf{v}_t^\top\) : écrire.

→ KDA

8. Pourquoi \(g_{\min} = -5\) et pas \(-10\) ?

Sur une tuile de 16 jetons, la log-décroissance cumulée vaut au minimum \(16 \times g_{\min}\). Avec \(-5\) : \(e^{80} \approx 5{,}5\times10^{34}\), dans la plage BF16 (\(3\times10^{38}\)). Avec \(-10\) : \(e^{160}\), débordement.

Le choix est dicté par le format numérique, pas par une recherche d'hyperparamètre.

9. Pourquoi \(\mathbf{k}\) doit-il être normalisé L2 dans KDA ?

Parce que \(\mathbf{I}-\beta\mathbf{k}\mathbf{k}^\top\) n'est une projection bien conditionnée que si \(\|\mathbf{k}\|_2 = 1\). Sinon l'opérateur peut amplifier l'état au lieu de l'atténuer, et la récurrence diverge.

10. Pourquoi Kimi K3 peut-il utiliser NoPE sur ses couches MLA ?

Parce que les 69 couches KDA intercalées portent la position implicitement, via leur décroissance. Conséquence pratique : étendre le contexte de 8 K à 1 M ne demande aucune modification du modèle — ni rebasage RoPE, ni YaRN.

→ Gated MLA et NoPE

11. Pourquoi une couche MLA supplémentaire en position 93 ?

Pour que la dernière opération de mélange de jetons avant la production du logit soit un accès exact au contexte, et non une lecture dans une mémoire compressée.

12. Quel goulot AttnRes corrige-t-il, et par quelle analogie ?

Le résidu standard compresse toutes les couches précédentes dans un unique vecteur — le même défaut qu'un RNN dans le temps. Le Transformer avait résolu ce défaut par l'attention ; AttnRes applique le même remède à la profondeur.

13. Combien de paramètres AttnRes ajoute-t-il ?

Une pseudo-requête \(\mathbf{w}_l \in \mathbb{R}^{7168}\) par couche, soit ~667 000 au total — 0,00002 % du modèle. C'est une modification structurelle, pas paramétrique.

14. Pourquoi une RMSNorm dans le noyau d'AttnRes, et sur quoi porte-t-elle ?

Sur les clés, pas sur les valeurs. Sans elle, une couche dont la sortie a une grande amplitude dominerait mécaniquement les poids, indépendamment de sa pertinence.

15. Calculez le nombre de paramètres d'un expert routé.

\(3 \times \ell \times d_m = 3 \times 3584 \times 3072 = 33{,}03\) M. Le facteur 3 correspond aux trois matrices d'un FFN à porte. Attention : \(\ell = 3584\), pas \(d = 7168\).

16. Quel est le défaut de SwiGLU que SiTU-GLU corrige ?

Les deux facteurs multiplicatifs sont non bornés. Deux grandes coordonnées coïncidentes produisent une valeur aberrante, qui déborde en basse précision. SiTU-GLU borne les deux branches à \(\beta_1\beta_2 = 100\).

17. Pourquoi un plafond doux (\(\tanh\)) plutôt qu'un écrêtage dur ?

L'écrêtage dur a un gradient exactement nul au-delà du seuil : un neurone saturé est mort et ne peut plus revenir. Le \(\tanh\) préserve un gradient non nul partout.

18. Le biais d'équilibrage entre-t-il dans les poids de mélange ?

Non. Il entre dans la sélection \(\operatorname{argtop}_k(\mathbf{s}+\mathbf{b})\) mais pas dans \(p_{i,j} = s_{i,j}/\sum_r s_{i,r}\). C'est ce qui rend la méthode « sans perte auxiliaire » : il régule l'aiguillage sans perturber l'optimisation du routeur.

C'est l'erreur d'implémentation la plus fréquente.

19. Quel lien QB entretient-il avec la règle par signe de DeepSeek-V3 ?

Un pas de SignSGD sur le dual de QB redonne exactement la règle par signe. La méthode antérieure descendait déjà sur le bon objectif, mais ne retenait que la direction de l'erreur. QB saute au minimiseur exact.

Cela explique pourquoi QB n'a aucun hyperparamètre.

20. Pourquoi entraîner MoonViT-V2 depuis zéro ?

Raison principale : la stabilité. Le MoonViT-3D initialisé depuis SigLIP montre des normes de gradient durablement plus élevées avec des pics fréquents, alors que MoonViT-V2 reste stable. Raison secondaire : un objectif contrastif favorise la sémantique globale au détriment des indices textuels et structurels fins.

Résultat : égale la ligne de base SigLIP, ne la dépasse pas.

Niveau 3 — Systèmes

21. Pourquoi la sommation directe des états ne marche-t-elle pas pour KCP ?

Parce que KDA applique \(\mathbf{M}_t\) à l'état entrant. L'effet d'un segment dépend donc de ce qui le précède, contrairement à l'attention linéaire additive. KCP transmet deux quantités : la transition cumulée \(\mathbf{M}\) et l'état local \(\widetilde{\mathbf{S}}\).

22. Quelle propriété algébrique rend le balayage préfixe possible ?

L'associativité de la composition : \((\mathbf{M}_2,\widetilde{\mathbf{S}}_2)\circ(\mathbf{M}_1,\widetilde{\mathbf{S}}_1) = (\mathbf{M}_2\mathbf{M}_1,\ \mathbf{M}_2\widetilde{\mathbf{S}}_1+\widetilde{\mathbf{S}}_2)\).

Sans elle, aucun scan parallèle n'est possible. C'est vérifié numériquement à \(1{,}39\times10^{-17}\) près.

23. Combien d'experts redondants par rang MoonEP garantit-il, et pourquoi est-ce important ?

Au plus \(E/R\). L'importance : réserver \(E/R\) emplacements garantit qu'un plan réalisable existe toujours, donc que l'entraînement ne s'interrompt jamais. Les méthodes antérieures (ECHO, UltraEP) doivent s'arrêter quand aucun plan ne rentre dans leur plafond.

24. Que signifie « les formes de calcul sont statiquement connues » ?

Avec l'équilibre parfait, chaque rang reçoit exactement \(S\times K\) jetons. Les tailles étant connues à l'avance, la synchronisation hôte–GPU par couche disparaît et le pipeline n'est plus bloqué entre couches.

25. Où Kimi K3 loge-t-il le calcul de son encodeur visuel, et pourquoi ?

Dans les bulles du pipeline. Sous l'ordonnancement 1F1B entrelacé, les passes avant des premiers micro-lots sont toutes en début, les arrières des derniers en fin — laissant des trous structurels. Y loger le ViT élimine l'essentiel de son surcoût effectif.

26. Pourquoi le cache de préfixe est-il difficile sur une architecture hybride ?

Parce qu'un préfixe n'est réutilisable que si les deux caches sont restaurables à la même frontière. Or l'état KDA est une grosse matrice : on ne peut le sauvegarder qu'à des frontières rares. Naïvement, cela force des blocs de 1 024–6 144 jetons, à quoi le cache devient presque inutile.

Solution : découpler la granularité de hachage (512) de celle de l'allocation.

27. Comment K3 gère-t-il le retour arrière de l'état KDA en décodage spéculatif ?

L'état après tout préfixe accepté est entièrement déterminé par les entrées projetées des jetons brouillons, bien plus petites que l'état. K3 ne cache donc que ces entrées, rejoue la récurrence sur puce, et réécrit les états vérifiés.

Niveau 4 — Analyse critique

28. Pourquoi ne peut-on pas attribuer le « 2,5× » à l'architecture ?

Parce que le rapport l'attribue explicitement à KDA, AttnRes, Stable LatentMoE et aux recettes raffinées de données et d'entraînement, « collectivement ». Aucune ablation ne les sépare — et les données ont beaucoup évolué entre K2 et K3.

S'ajoutent : une figure sans axes chiffrés, un jeu de validation non publié, et l'absence de toute possibilité de vérification tierce.

29. Pourquoi les scores de codage de K3 sont-ils méthodologiquement fragiles ?

Parce qu'ils mélangent les harnais : Kimi Code, Claude Code, mini-SWE-agent. Le rapport en donne lui-même la preuve involontaire : GPT-5.5 obtient 66,0 avec Kimi Code et 69,0 avec Codex sur le même banc.

Comparer des scores obtenus sous harnais différents n'est pas une comparaison de modèles.

30. Quel est le déficit le plus structurel de Kimi K3 ?

La qualité du processus, pas du résultat. Il se manifeste de façon cohérente sur des domaines sans rapport :

  • Agent Behavior Bench : 65,0 contre 76,4 (le plus gros écart interne) ;
  • cybersécurité : boucles de débogage improductives, mauvaise sélection de stratégie, vérification insuffisante avant soumission ;
  • limitation reconnue : « proactivité excessive dans les situations ambiguës ».

Ce n'est pas un déficit de connaissance technique, mais de métacognition : savoir quand changer d'approche, quand s'arrêter, quand douter.

Exercice de synthèse

Reconstruisez les 2,78 T de paramètres à partir du config.json.
Bloc Calcul Valeur
Un expert \(3 \times 3584 \times 3072\) 33,03 M
Experts d'une couche \(896 \times 33{,}03\) M 29,60 G
\(\mathbf{W}^\downarrow + \mathbf{W}^\uparrow\) \(2 \times 7168 \times 3584\) 51,4 M
Experts partagés \(3 \times 7168 \times 6144\) 132,1 M
Routeur \(7168 \times 896\) 6,4 M
Couche MoE 29,78 G
92 couches MoE 2 740 G
24 couches MLA \(24 \times 232\) M 5,57 G
69 couches KDA \(69 \times 440\) M 30,4 G
FFN dense \(3 \times 7168 \times 33792\) 0,73 G
Embedding + lm_head \(2 \times 163840 \times 7168\) 2,35 G
TOTAL 2 779 G = 2,779 T

Activés : \(92 \times (16 \times 33{,}03 + 51{,}4 + 132{,}1 + 6{,}4)\) M \(+ 5{,}57 + 30{,}4 + 0{,}73 + 1{,}17\) G \(= \mathbf{104{,}0}\) G.

→ Retrouver les paramètres


Retour aux annexes