# Exercices corrigés — Cache KV, mémoire récurrente, MLA et bas rang

**Consigne générale:** chaque réponse doit montrer les données, la transformation, le résultat, une vérification et une limite. Un nombre seul ou une définition recopiée ne suffit pas.

> **Données de départ:** Avec 32 couches, 8 têtes KV, d_head=128, BF16 et 4 096 tokens, le cache brut simplifié vaut 4 096×32×2×8×128×2 octets = 536 870 912 octets = 512 Mio (0,5 Gio). Diviser la largeur latente par quatre réduit le terme par token, pas sa croissance linéaire.
>
> **Frontière à conserver:** Les formules simplifiées omettent alignement, quantification, buffers et détails de partage. Elles servent à comparer des tendances, pas à promettre une empreinte réelle.

## Exercice 1 — Trace calculée — Cache KV standard

Reproduisez puis commentez la chaîne `bytes≈tokens×layers×2×heads×d_head×bytes/value`. Doublez la longueur de contexte de 4 096 à 8 192 tokens, en gardant 32 couches, 8 têtes KV, d_head=128 et BF16. Recalculez le cache brut simplifié.

**Livrable:** un tableau données → opération → résultat → interprétation, plus deux phrases sur la valeur modifiée.

<details><summary>Solution guidée</summary>

Avec 32 couches, 8 têtes KV, d_head=128, BF16 et 4 096 tokens, le cache brut simplifié vaut 4 096×32×2×8×128×2 octets = 536 870 912 octets = 512 Mio (0,5 Gio). Diviser la largeur latente par quatre réduit le terme par token, pas sa croissance linéaire.

**Variante résolue:** Le cache passe de 536 870 912 octets (512 Mio) à 1 073 741 824 octets (1 Gio). La croissance est linéaire avec le nombre de tokens; MLA ou un état récurrent peuvent réduire des dimensions différentes mais changent aussi la fidélité ou le mode de récupération.

Le cache conserve clés et valeurs de chaque token passé, par couche : bytes ≈ tokens × couches × 2 × têtes × d_head × octets. La lecture est fidèle — attention exacte sur tout le passé — et le calcul se refait facteur par facteur, sans calculatrice. L’état S — 32 couches × 128 × 128 × BF16 = 1 Mio — résume tout le passé : 4 096 ou 524 288 tokens, toujours 1 Mio. La croissance disparaît ; c’est l’aboutissement des mémoires des sessions précédentes. La vérification minimale consiste à contrôler les dimensions, le signe et l’ordre de grandeur. Si la variation obtenue contredit la prédiction, localiser la première opération qui change de sens au lieu de corriger seulement la dernière ligne.

</details>

### Barème Exercice 1 — /10

| Critère | Points |
|---|---:|
| Données et formes explicites | 2 |
| Calcul traçable | 3 |
| Prédiction avant variation | 2 |
| Interprétation et vérification | 2 |
| Limite nommée | 1 |

## Exercice 2 — Diagnostic d’une explication séduisante — MLA

Un collègue affirme: « MLA prouve que le système sera exact, rapide et stable dans tous les contextes. »

1. Séparez mécanisme, hypothèse, observation et conclusion.
2. Citez deux éléments corrects de la leçon et deux extrapolations non justifiées.
3. Proposez une expérience bornée avec variable contrôlée, métrique et seuil d’arrêt.
4. Réécrivez l’affirmation en une phrase défendable.

<details><summary>Solution argumentée</summary>

Multi-head Latent Attention compresse chaque token en un vecteur latent c_t (512 valeurs) — la seule chose mise en cache — puis reconstruit K et V via W_UK et W_UV au moment de lire. Largeur ÷ 4 ⇒ 32 Kio/token, 4 Gio à 131 072 tokens. W (d×m) ≈ A(d×r)·B(r×m) coûte r(d+m) paramètres au lieu de d·m. Pour 4096×4096 : r=512 divise par 4 ; r=2048 donne 16 777 216 — exactement le coût d’origine. Le seuil d’équilibre est r = d·m/(d+m) = 2048 ici. Les formules simplifiées omettent alignement, quantification, buffers et détails de partage. Elles servent à comparer des tendances, pas à promettre une empreinte réelle.

L’affirmation mélange une relation locale et une garantie globale. Une version défendable décrit seulement le mécanisme observé, les conditions du test et la métrique relevée. Le test doit s’arrêter si les formes deviennent invalides, si la métrique se dégrade au-delà du seuil annoncé ou si une autre variable a changé.

</details>

### Barème Exercice 2 — /10

2 points par élément : séparation, ancrage dans la leçon, extrapolations, protocole, reformulation.

## Exercice 3 — Décision d’architecture et transfert — MLA n’est pas mémoire fixe

Vous devez reproduire le cas guidé « Avec 32 couches, 8 têtes KV, d_head=128, BF16 et 4 096 tokens, le cache brut simplifié vaut 4 096×32×2×8×128×2 octets = 536 870 912 octets = 512 Mio (0,5 Gio). Diviser la largeur latente par quatre réduit le terme par token, pas sa croissance linéaire. » dans deux conditions. Option A utilise la chaîne complète jusqu’à « MLA n’est pas mémoire fixe ». Option B est une référence transparente qui conserve « Cache KV standard », calcule directement la sortie attendue et n’utilise pas le mécanisme de compression ou d’ajustement étudié. Construisez une fiche de décision comportant:

- la charge et la contrainte dominante;
- le mécanisme de chaque option, sans slogan;
- une prédiction qualité, mémoire ou latence;
- un cas où votre procédure préférée perd;
- un protocole A/B, métriques et seuil de retour arrière;
- un verdict borné : choisir, différer ou refuser.

<details><summary>Éléments d’une bonne solution</summary>

Il n’y en avait pas : MLA compresse chaque entrée, il ne fusionne pas les tokens. Une entrée par token ⇒ croissance linéaire à coefficient réduit. Seul un état récurrent fusionne le passé en un objet de taille fixe. Rôles opposés : dans MLA, A et B SONT le chemin normal, entraînés depuis zéro, inamovibles. LoRA ajoute un delta bas rang À CÔTÉ de poids gelés, pour adapter après coup — fusionnable ou désactivable à volonté. Mixte : mécanismes établis + choix de type Kimi K3 rapportés par la source.

Une bonne réponse ne présente pas le mécanisme récent comme gagnant par défaut. Elle conserve une référence mesurable, fixe le seuil avant le test et distingue le coût du composant du comportement du système complet. Le verdict doit citer ce qui reste incertain et la prochaine preuve qui pourrait le modifier.

</details>

### Barème Exercice 3 — /15

| Critère | Points |
|---|---:|
| Cadrage et référence | 3 |
| Chaînes causales comparées | 4 |
| Protocole et métriques | 4 |
| Seuil de retour arrière | 2 |
| Verdict borné | 2 |

## Prolongement

Refaites l’exercice 3 en inversant la contrainte dominante. Si vous aviez optimisé la mémoire, imposez maintenant une qualité minimale stricte; si vous aviez optimisé la fidélité, imposez une enveloppe mémoire divisée par deux. Identifiez le premier point du verdict qui change et la preuve nécessaire.

## Relecture avant remise

Relisez votre paquet comme si un autre groupe devait reproduire votre travail sans vous parler. Toutes les valeurs ou hypothèses de départ sont-elles présentes ? Les formes ou rôles sont-ils écrits avant les opérations ? La prédiction précède-t-elle réellement l’observation ? Le résultat est-il traduit en comportement plutôt que laissé comme nombre isolé ? Avez-vous testé une valeur limite et identifié une condition d’arrêt ? Le choix de procédure ou d’architecture conserve-t-il une référence mesurable et un seuil de retour arrière fixé avant le test ? Enfin, surlignez une phrase qui décrit ce qui est établi, une phrase qui reste une hypothèse et une mesure susceptible de changer votre verdict. Si l’un de ces éléments manque, le travail n’est pas reproductible.

## Annexe de référence pour la correction

## Chapitre 13 — Enregistrements complets contre mémoire compressée

### 13.1 Deux stratégies de mémoire

But : comparer les enregistrements exacts aux résumés. Le cache clés-valeurs standard conserve des données par jeton. La mémoire linéaire récurrente compresse de nombreux jetons dans un état de taille fixe.

Une archive vidéo conserve chaque image ; un compte rendu conserve un résumé compact. Chacun répond mieux à certaines questions.

**Étape par étape**

- Cache par jeton : grandit avec le contexte ; préserve un accès plus direct aux jetons individuels.

- État fixe : ne grandit pas avec le nombre de jetons ; risque l’interférence et la perte d’information.

- Les conceptions hybrides peuvent employer les deux mécanismes dans des couches ou rôles différents.

**Exemple détaillé :** Pour 1 000 jetons, une méthode par jeton conserve 1 000 enregistrements par couche concernée. Une méthode à état fixe conserve un état de forme prédéterminée. Cela ne prouve pas qu’elle utilise toujours moins de mémoire au total, mais explique la différence d’échelle.

**Pourquoi c’est important :** L’architecture est un compromis entre fidélité, vitesse, trafic mémoire et facilité d’entraînement.

**Vérification rapide :** quelle stratégie est la plus susceptible de retrouver un ancien jeton précis ? Réponse : l’enregistrement par jeton, même si la qualité dépend toujours de l’attention apprise.

### 13.2 Compression latente et MLA

But : réduire la taille du cache sans condenser toute l’histoire dans une seule matrice récurrente. Un vecteur latent est une représentation apprise plus petite. Multi-head Latent Attention, abrégé MLA, stocke une information latente comprimée et reconstruit les clés ou valeurs propres aux têtes lorsque nécessaire.

Stocke un dossier compressé au lieu de plusieurs copies déployées, puis décompresse la vue nécessaire à chaque travailleur.

**Étape par étape**

- Comprimer la représentation cachée x en c = xW_down.

- Mettre en cache le latent plus petit c.

- Utiliser des projections apprises vers le haut pour créer les formes de clés/valeurs nécessaires aux têtes d’attention.

- Une tête est un sous-espace d’attention parallèle ; plusieurs têtes peuvent apprendre des relations différentes.

**Exemple détaillé :** Exemple de formes : x possède 8 coordonnées. La compression à 2 donne c avec 2 coordonnées. Ré-étendre c en une clé à 8 coordonnées ne préserve pas magiquement tous les vecteurs 8-D possibles ; la clé est limitée aux motifs apprenables à travers le goulot de 2 dimensions.

**Pourquoi c’est important :** MLA est une mémoire comprimée par jeton, pas un unique état récurrent fixe pour tout le passé.

**Vérification rapide :** le cache MLA reste-t-il normalement constant lorsque le nombre de jetons augmente ? Réponse : non. Il peut être plus petit par jeton, mais grandit encore avec le nombre de jetons.

### 13.3 Factorisation de faible rang et LoRA

But : comprendre les espaces intermédiaires étroits. Une matrice complète 8×8 contient 64 nombres. La remplacer par une matrice 8×2 suivie d’une matrice 2×8 utilise 16+16=32 nombres dans ce comptage simplifié.

Un couloir étroit limite le nombre de flux indépendants pouvant passer en même temps.

**Étape par étape**

- Projeter vers le bas : h = xA.

- Projeter vers le haut : y = hB.

- La transformation combinée AB a un rang au plus égal à la largeur étroite.

- Low-Rank Adaptation, LoRA, ajoute généralement une mise à jour de faible rang entraînable à un poids de base gelé ; les mathématiques sont liées, mais l’usage n’est pas automatiquement identique à la compression architecturale.

**Exemple détaillé :** Cette distinction évite une confusion fréquente : toute factorisation de faible rang n’est pas nécessairement un adaptateur LoRA de spécialisation.

**Pourquoi c’est important :** Le faible rang échange une partie de la flexibilité contre moins de paramètres, de stockage ou de calcul, selon son emplacement.

**Vérification rapide :** combien de nombres contiennent des matrices 10×3 et 3×10 ensemble ? Réponse : 30+30=60.

## Sources et frontière de preuve

- Dossier de cours bilingue fourni par le propriétaire, chapitre 13.
- DeepSeek-AI, “DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model” (introduces Multi-head Latent Attention), arXiv:2405.04434 (2024).
- Hu et al., “LoRA: Low-Rank Adaptation of Large Language Models”, ICLR (2022).
- Dossier source fourni par le propriétaire; les détails sur des produits nommés restent attribués à cette source jusqu’à vérification primaire.

> **Portée:** Mixte : mécanismes établis + choix de type Kimi K3 rapportés par la source. Ces références soutiennent le cadre de la session; elles ne transforment pas un choix de produit rapporté en résultat indépendant.
