MoE (Mixture of Experts)

IA / LLM 🔴 Senior

Définition

Architecture où chaque couche contient plusieurs sous-réseaux « experts » et un routeur qui n'en active que quelques-uns par token. On obtient un très grand nombre de paramètrès totaux pour un coût de calcul constant : le Switch Transformer (Fedus, Zoph, Shazeer, soumis le 11 janvier 2021) atteint le trillion de paramètrès. DeepSeek-V4.1-Flash (552 B, 8 B activés par token en prefill) et Llama 4 (16 ou 128 experts) l'utilisent.

Analogie

Un hôpital : chaque patient ne voit que deux spécialistes, pas les cinquante médecins du bâtiment.

Exemple de code

# Routage MoE simplifié (top-k experts par token)
class MoE(nn.Module):
    def __init__(self, d, n_experts=8, k=2):
        super().__init__()
        self.router = nn.Linear(d, n_experts)
        self.experts = nn.ModuleList([FeedForward(d) for _ in range(n_experts)])
        self.k = k
    def forward(self, x):
        probs = torch.softmax(self.router(x), dim=-1)
        top_p, top_i = probs.topk(self.k, dim=-1)      # 2 experts sur 8
        out = torch.zeros_like(x)
        for j in range(self.k):                          # seuls k experts calculent
            for e in top_i[..., j].unique():
                m = top_i[..., j] == e
                out[m] += top_p[..., j][m, None] * self.experts[int(e)](x[m])
        return out

Cas d'usage

Lire une fiche modèle : « 552B total / 8B actifs » signifie coût d'inférence d'un 8B, mémoire d'un 552B.

Anti-pattern

Comparer deux modèles sur le seul nombre de paramètrès totaux : pour un MoE, ce sont les paramètrès actifs qui font la latence.
#ia#architecture#open-weights

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre