Mixture-of-Experts : routage et capacité

Suivre scores de routeur, top-k, experts partagés/routés, capacité et communication.

Applied AI · advanced · Session 19

Carte du mécanisme

           h_t (représentation du token t)
                      │
                      ▼
              ┌───────────────┐  E = 4 logits par token ;
              │    ROUTEUR    │  exemple de calcul sur 3 :
              └───────┬───────┘  [2,1 ; 1,8 ; 0,2]
                      ▼  softmax → [0,529 ; 0,392 ; 0,079]
              ┌───────────────┐
              │  TOP-k (k=2)  │  garde E1, E2
              └───────┬───────┘
      ┌──────────┬────┴─────┬──────────┬──────────┐
      ▼          ▼          ▼          ▼          ▼
 ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────┐
 │ E1 C=5 │ │ E2 C=5 │ │ E3 C=5 │ │ E4 C=5 │ │ PARTAGÉ  │
 │ 6 dem. │ │ 4 dem. │ │ 3 dem. │ │ 3 dem. │ │ toujours │
 │ ❌ 1   │ │   ok   │ │   ok   │ │   ok   │ │  actif   │
 │ rejeté │ │        │ │        │ │        │ │          │
 └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ └────┬─────┘
     └──────────┴──────────┴──────────┴───────────┘
                      ▼  somme pondérée + résiduel
                   h_t′  (all-to-all retour si multi-GPU)

Le problème — Pourquoi des experts

Pour gagner en capacité, un bloc dense doit grossir — et chaque token paie le bloc entier : ×20 de paramètres, ×20 de FLOPs par token, même pour prédire « le ». La facture de calcul suit la capacité au lieu de suivre le besoin.

L’idée — Pourquoi des experts

Le MoE découple les deux : E sous-réseaux (experts) existent, k seulement s’activent par token. Dans la trace : 64 experts routés + 1 partagé = 26 Md de paramètres, mais (2+1) × 0,4 = 1,2 Md actifs par token — un ratio ≈ 21×.

Pourquoi / à quel prix — Pourquoi des experts

Capacité totale sans coût dense équivalent — c’est l’argument. Le prix immédiat : les 26 Md doivent résider en mémoire GPU au chargement. Le ratio 21× parle des FLOPs — jamais de la mémoire ni, on le verra, de la latence.

Contrôle : Ici 26 Md de paramètres au total mais 1,2 Md actifs par token. Quelle grandeur détermine la mémoire du GPU au chargement, et laquelle détermine les FLOPs par token ?

Support visuel — Pourquoi des experts

                    dense 26 Md        MoE 64 + 1 experts
paramètres          26 Md              26 Md
en mémoire GPU      26 Md              26 Md    ← identique !
FLOPs par token     ∝ 26 Md            ∝ 1,2 Md (top-2 + partagé)

                    ratio ≈ 21× — sur les FLOPs, et seulement là

Le problème — Routeur

Qui décide quels experts voient quel token ? Un aiguillage écrit à la main — par langue ? par thème ? — serait rigide et faux ; il faut une décision par token, apprise avec le reste du modèle.

L’idée — Routeur

Le routeur est une petite projection : h_t → un logit par expert. Exemple de calcul sur 3 experts : [2,1 ; 1,8 ; 0,2] → softmax [0,529 ; 0,392 ; 0,079]. Ces scores sont des décisions apprises par la perte globale — pas des catégories humaines.

Pourquoi / à quel prix — Routeur

L’aiguillage appris s’adapte sans intervention. Le prix : l’illisibilité — rien ne garantit qu’un expert « soit » les maths ou le code ; la spécialisation observée est statistique et peut changer au moindre ré-équilibrage.

Contrôle : Le routeur donne [0,529 ; 0,392 ; 0,079] pour t1. Que se passerait-il si le troisième logit passait de 0,2 à 1,9 — quelle décision top-2 change, et le routeur a-t-il pour autant « compris » le token ?

Le problème — Top-k et mélange

Faire tourner tous les experts « un peu » ruinerait l’économie ; n’en garder qu’un rend le choix brutal et le gradient fragile. Combien d’experts activer, et comment recombiner leurs sorties ?

L’idée — Top-k et mélange

Top-k tranche : k = 2 experts par token, poids renormalisés — 0,529 et 0,392 deviennent 0,574 et 0,426 (division par 0,921). Un expert partagé, toujours actif, complète : sortie = Σ poids × expert + partagé + résiduel.

Pourquoi / à quel prix — Top-k et mélange

k petit préserve l’économie ; le mélange garde un gradient pour deux chemins. Le prix : chaque token dépend d’une décision discrète — un logit qui bascule change le chemin de calcul entier, comportement moins continu qu’un bloc dense.

Contrôle : Les poids renormalisés de t1 sont 0,574 et 0,426. Recalculez-les à partir de 0,529 et 0,392, puis dites ce que l’expert partagé ajoute à cette somme et pourquoi il n’entre pas dans le top-2.

Le problème — Capacité

8 tokens, top-2, 4 experts : 16 affectations à caser. Or un tenseur GPU a des dimensions fixes — un expert ne peut pas accepter « autant que nécessaire ». Que se passe-t-il quand la demande dépasse la place ?

L’idée — Capacité

La capacité est une dimension de tenseur : C = ceil(T×k/E × f) = ceil(4 × 1,25) = 5 ici. La trace le montre : E1 reçoit 6 demandes pour 5 places — le 6ᵉ arrivé est rejeté, et sa sortie ne porte plus que 0,426 du mélange prévu (logits supposés égaux à ceux de t1).

Pourquoi / à quel prix — Capacité

C borne mémoire et calcul par expert — indispensable au tenseur. Le prix : la politique de débordement (rejet, report, file) devient un choix d’architecture qui touche la qualité ; et un f généreux achète moins de rejets contre plus de padding — f = 2 laisse 50 % de slots vides.

Contrôle : C = ceil(8×2/4 × 1,25) = 5 et E1 en demande 6. Recalculez C pour f = 1,0 puis f = 2,0 : combien de tokens sont rejetés dans chaque cas, et combien de slots restent vides ?

Support visuel — Capacité

buffer de dispatch [E, C, d]  avec C = 5

       slot →   1     2     3     4     5     demandes
E1             t1    t2    t3    t4    t5     6 → ❌ t6 rejeté
E2             t1    t3    t6    t7     ·     4
E3             t2    t5    t8     ·     ·     3
E4             t4    t7    t8     ·     ·     3

16 affectations, 20 slots : 15 remplis, 5 vides, 1 rejet

Le problème — Équilibrage

La trace donne 6/4/3/3 : E1 sature pendant qu’E3 et E4 tournent à 60 %. Poussé à l’extrême, un routeur « paresseux » envoie tout vers un seul expert — et les autres n’apprennent plus jamais rien.

L’idée — Équilibrage

Une perte auxiliaire pousse la répartition vers l’uniforme. C’est un curseur, pas un interrupteur : trop faible, effondrement sur un expert ; trop forte, elle contredit le routeur même quand E1 est réellement le bon choix.

Pourquoi / à quel prix — Équilibrage

Le bon réglage garde tous les experts vivants sans écraser la spécialisation utile. Le prix : un terme de perte de plus à surveiller, dont l’effet se lit en distribution de charge — une métrique système — autant qu’en qualité.

Contrôle : La répartition observée est 6/4/3/3 au lieu de 4/4/4/4. Une perte auxiliaire très forte la ramènerait à l’uniforme : qu’est-ce qui serait perdu si E1 était le seul expert utile pour ces tokens ?

Le problème — Communication

Les 4 experts vivent sur 4 GPU. Chaque token top-2 doit voyager vers ses experts puis revenir — et les 20 slots réservés, padding de 25 % compris, traversent le réseau dans les deux sens. Où part la latence ?

L’idée — Communication

Le all-to-all cadence le pas : deux allers-retours par token top-2, un rythme dicté par l’expert le plus chargé (E1 à 100 %). Les 1,2 Md actifs mesurent le calcul ; le réseau, lui, facture les slots — utilisés ou non.

Pourquoi / à quel prix — Communication

Bien placé — experts co-localisés, lots groupés — le MoE tient ses promesses. Le prix générique : la latence est souvent dominée par la communication ; « paramètres actifs » est un excellent indicateur de FLOPs et un très mauvais indicateur de vitesse.

Contrôle : 15 slots utilisés sur 20 réservés partent quand même sur le réseau. Si les 4 experts vivent sur 4 GPU, combien d’allers-retours all-to-all un seul token top-2 déclenche-t-il, et pourquoi 1,2 Md actifs ne garantissent pas la vitesse ?

Support visuel — Communication

trajet d’UN token top-2 (experts sur des GPU distincts)

        t1 (top-2 : E1, E2)
GPU d’origine ──▶ GPU(E1) ──▶ retour   ┐ deux allers-retours
GPU d’origine ──▶ GPU(E2) ──▶ retour   ┘ par token top-2

le buffer [4 experts × 5 slots] fait le même voyage —
15 slots utiles et 5 vides paient le même all-to-all

Cas guidé — trace complète

Exemple de routage réduit à trois experts pour le calcul : scores [2,1;1,8;0,2] donnent après softmax environ [0,529;0,392;0,079]. Avec top-2, experts 1 et 2 sont actifs. Si l’expert 1 a déjà atteint sa capacité, le routeur doit appliquer la politique de débordement.

LOT : T = 8 tokens, E = 4 experts, k = 2, facteur de capacité f = 1,25
CAPACITÉ C = ceil(T×k/E × f) = ceil(8×2/4 × 1,25) = ceil(5) = 5

ROUTEUR sur t1 (exemple de calcul réduit à 3 experts ; le lot utilise E = 4) :
  logits [2,1 ; 1,8 ; 0,2]
  exp = [8,166 ; 6,050 ; 1,221]   somme = 15,437
  softmax = [0,529 ; 0,392 ; 0,079]
  top-2 → E1, E2 ; poids renormalisés 0,529/0,921 = 0,574 et 0,426

AFFECTATIONS (ordre d’arrivée dans le lot) :
  t1 → E1,E2   t2 → E1,E3   t3 → E1,E2   t4 → E1,E4
  t5 → E1,E3   t6 → E1,E2   t7 → E2,E4   t8 → E3,E4

COMPTAGE      E1 = 6   E2 = 4   E3 = 3   E4 = 3   (total 16 = 8×2 ✅)

E2, E3, E4 ≤ 5 → acceptés                              ✅
E1 = 6 > C = 5 → le 6ᵉ arrivé (t6) est rejeté          ❌
  (hypothèse d’illustration : t6 a les mêmes logits que t1)
  t6 ne reçoit que E2 : sa sortie ne porte que 0,426
  du mélange prévu ; 57,4 % du signal expert est perdu,
  seul le résiduel + l’expert partagé sauvent le token.

UTILISATION : E1 5/5=100 %  E2 4/5=80 %  E3 3/5=60 %  E4 3/5=60 %
  slots réservés 4×5 = 20, utilisés 15 → 25 % de padding payé au all-to-all

CONTRÔLE DE FORME : logits [T=8, E=4] → dispatch [E=4, C=5, d_model].
Un buffer [4, 4, d] refuserait E1 dès le 5ᵉ token : la capacité est une
dimension de tenseur, pas une politique optionnelle.

PARAMÈTRES : 64 experts routés × 0,4 Md + 1 partagé × 0,4 Md = 26 Md total
  actifs par token = (2 + 1) × 0,4 Md = 1,2 Md → ratio ≈ 21×

Politiques de débordement quand E1 reçoit 6 tokens pour C = 5

Politique Ce qui arrive à t6 Coût réel
Abandon (drop) perd E1, garde 0,426 du mélange (logits de t1 supposés) qualité dégradée, latence stable
Report sur E2/E3 traité par le 3ᵉ meilleur score décision du routeur contournée
Capacité f = 2,0 (C = 8) accepté, aucun rejet 32 slots pour 16 tokens : 50 % de padding
File d’attente traité au micro-lot suivant all-to-all supplémentaire, latence en dents de scie

Laboratoire causal

Prédire → modifier une variable → exécuter → expliquer l’écart

/interactives/curriculum/moe-attnres.html?lang=fr

Erreurs fréquentes

« Chaque expert se spécialise dans un domaine : maths, code, français. »

Le routeur produit des logits appris ([2,1 ; 1,8 ; 0,2]), pas des étiquettes. Dans la trace, t1 et t3 partent tous deux vers E1+E2 sans partager de thème, et t6 finit chez E2 uniquement parce que E1 était plein. La spécialisation observée est statistique, souvent illisible, et modifiable par la seule perte d’équilibrage.

« 1,2 Md actifs sur 26 Md, donc c’est 21× plus rapide qu’un dense équivalent. »

Le ratio 21× ne concerne que les FLOPs. Les 26 Md doivent résider en mémoire, les 20 slots réservés (dont 25 % de padding) traversent le all-to-all dans les deux sens, et le pas est cadencé par l’expert le plus chargé — E1 à 100 % d’occupation. En pratique la latence est souvent dominée par la communication, pas par le calcul actif.

Frontière, preuve et sources

Les noms d’activations et nombres exacts d’experts attribués à un modèle nommé restent rapportés par la source tant qu’une preuve primaire n’est pas attachée.

Statut de preuve : Mixte : mécanismes établis + choix de type Kimi K3 rapportés par la source.

  • Dossier de cours bilingue fourni par le propriétaire, chapitre 14.
  • Shazeer et al., “Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer”, ICLR (2017).
  • Fedus, Zoph & Shazeer, “Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity”, JMLR (2022).
  • Dai et al., “DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models”, ACL (2024).
  • Dossier source fourni par le propriétaire; les détails sur des produits nommés restent attribués à cette source jusqu’à vérification primaire.

Défi de transfert

Reprenez le lot de la trace (T = 8, E = 4, k = 2, f = 1,25).

  1. Pré-enregistrez : que devient le nombre de rejets si k passe à 1 (f inchangé) ? Et si f passe à 1,5 (k = 2) ?
  2. Calculez C et les rejets dans les deux cas, en réutilisant les affectations de la trace (premier expert de chaque paire pour k = 1).
  3. Concluez : lequel des deux leviers achète de la qualité, et avec quelle monnaie ?

Synthèse et ticket de sortie

  • Pourquoi des experts
  • Routeur
  • Top-k et mélange
  • Capacité
  • Équilibrage
  • Communication

Ticket : mécanisme · trace · observation · frontière · preuve · prochaine expérience

Notes formateur: Poser le problème avant de nommer le mécanisme. Recueillir une prédiction initiale et la conserver pour le ticket de sortie.

Notes formateur: Faire relier chaque étape à la suivante par un verbe causal. Signaler toute flèche purement décorative.

Notes formateur: Vote d’ouverture : « 26 Md ou 1,2 Md — lequel dimensionne votre commande de GPU ? ». Garder le décompte affiché : le beat montre que les deux chiffres servent, mais pas au même poste de budget.

Notes formateur: Ouvrir par un vote : « 26 Md ou 1,2 Md — quel chiffre commandez-vous au fournisseur de GPU ? » Les deux chiffres ont un usage, et c’est la confusion entre les deux qui coûte des budgets réels.

Notes formateur: Réponse : la mémoire au chargement suit les 26 Md — tous les experts résident ; les FLOPs par token suivent les 1,2 Md actifs. Erreur attendue, à récolter explicitement : « les 26 Md déterminent les FLOPs ». Les deux chiffres servent, sur deux postes différents.

Notes formateur: Faire entourer la ligne « en mémoire GPU » : c’est elle qui casse l’intuition « MoE = petit modèle ». Revenir à cette ligne au beat communication, quand la latence s’ajoutera au tableau.

Notes formateur: Demander d’abord : « comment VOUS aiguilleriez les tokens ? » — par langue ? par thème ? Les règles proposées sont toutes rigides : c’est le contraste voulu avec l’aiguillage appris du beat.

Notes formateur: Faire calculer le softmax à la main une seule fois, puis effacer les scores et demander de deviner le domaine du token. L’impossibilité de répondre est l’enseignement, pas un échec de l’exercice.

Notes formateur: Réponse : logits [2,1 ; 1,8 ; 1,9] → softmax ≈ [0,391 ; 0,289 ; 0,320] : le top-2 devient E1 et E3 — E3 remplace E2. Et non, le routeur n’a rien « compris » : un score appris a bougé, la décision a basculé. Erreur attendue : chercher une explication sémantique au basculement.

Notes formateur: Question éclair : « pourquoi pas k = 64 ? pourquoi pas k = 1 ? ». Chaque extrême se réfute en une phrase — coût dense d’un côté, gradient fragile de l’autre. Le beat justifie le milieu.

Notes formateur: Distribuer les 8 tokens à 4 apprenants « experts » physiquement dans la salle, avec 5 jetons chacun. Le débordement se vit mieux qu’il ne s’explique.

Notes formateur: Réponse : 0,529/0,921 = 0,574 et 0,392/0,921 = 0,426, avec 0,921 = 0,529 + 0,392. L’expert partagé s’ajoute hors renormalisation — toujours actif, il n’est pas en compétition : il traite tous les tokens. Erreur attendue : renormaliser sur les trois scores.

Notes formateur: Faire jouer la scène avant la formule : 4 apprenants-experts, 5 jetons chacun, 16 affectations à distribuer selon la trace. Le rejet de t6 doit ARRIVER physiquement avant d’être expliqué.

Notes formateur: Ne pas annoncer C = 5 : faire dériver la formule, puis laisser la salle découvrir que E1 en veut 6. Le rejet doit être une surprise calculée par eux.

Notes formateur: Réponse : f = 1,0 → C = 4 : E1 rejette 2 tokens (6 − 4), 16 slots dont 14 remplis (2 vides) ; f = 2,0 → C = 8 : zéro rejet, 32 slots dont 16 utilisés (16 vides). Erreurs attendues : oublier le ceil, ou compter des rejets chez E2-E4 — seul E1 déborde.

Notes formateur: Faire vérifier les comptes ligne par ligne contre la liste d’affectations de la trace, puis demander : « qui décide que c’est t6 qui saute, et pas t1 ? » — l’ordre d’arrivée, une décision d’implémentation, pas de qualité.

Notes formateur: Écrire 6/4/3/3 au tableau et demander : « faut-il forcer 4/4/4/4 ? ». Laisser le débat pour/contre s’installer deux minutes — ce débat est précisément le curseur que le beat formalise.

Notes formateur: Poser le dilemme comme un curseur, pas comme un réglage : « poussez l’équilibrage jusqu’à 4/4/4/4 — qu’avez-vous cassé ? » Faire nommer la perte avant de donner le terme « spécialisation ».

Notes formateur: Réponse : si E1 est réellement le meilleur pour ces tokens, forcer 4/4/4/4 les envoie vers des experts moins bons — la qualité paie l’uniformité. La perte d’équilibrage combat alors la spécialisation utile : c’est un curseur, pas un objectif. Erreur attendue : « l’uniforme est toujours la cible ».

Notes formateur: Faire dessiner les 4 GPU et tracer le trajet complet de t7 (vers E2, vers E4, deux retours). Compter les traversées à voix haute AVANT d’introduire le mot « all-to-all ».

Notes formateur: Faire dessiner les 4 GPU au tableau et tracer le trajet de t7 (E2 puis E4) aller-retour. Compter les flèches à voix haute recadre le débat « MoE = gratuit » en trente secondes.

Notes formateur: Réponse : deux experts distants = deux allers + deux retours = quatre traversées réseau pour UN token ; et le buffer [E, C, d] voyage en entier, padding compris. Les 1,2 Md actifs mesurent le calcul, pas le réseau. Erreur attendue : « moins de FLOPs = plus rapide ».

Notes formateur: Faire multiplier : 8 tokens × 2 experts × 2 sens = 32 traversées pour un seul pas de couche MoE. Puis demander ce qui change si les 4 experts partagent un GPU — tout le beat tient dans cette réponse.

Notes formateur: Dérouler ligne par ligne. Une incohérence se localise à la première étape fautive, pas seulement sur la dernière ligne.

Notes formateur: Faire remplir la dernière ligne par les apprenants avant de la révéler : c’est le compromis qui décide en production.

Notes formateur: Conserver les valeurs initiales et finales. Interdire les changements simultanés qui rendent l’écart impossible à attribuer.

Notes formateur: Pour chaque affirmation, faire produire le contre-exemple minimal par le groupe avant de donner la correction.

Notes formateur: Séparer mécanisme vérifiable, choix d’implémentation rapporté et résultat expérimental. La précision de la preuve doit suivre celle de l’affirmation.

Notes formateur: Réponses : k = 1 → C = ceil(8×1/4 × 1,25) = 3 ; la charge top-1 devient 6/1/1/0 et E1 rejette 3 tokens sur 6 — moins de calcul, plus de casse. f = 1,5 → C = 6 : zéro rejet, mais 24 slots pour 16 affectations = 33 % de padding payé au all-to-all. Conclusion attendue : f achète de la qualité (moins de rejets) en monnaie de padding et de latence ; k achète du calcul en monnaie de robustesse du mélange. Vérifier les pré-enregistrements avant tout calcul. 10 minutes.

Notes formateur: Faire reconstruire la chaîne sans regarder les slides, puis remplir le ticket en six lignes maximum. Comparer à la prédiction initiale du premier slide et nommer ce qui a réellement changé.