Mistral â đ§ Briques cĆur du LLM
Embeddings · Attention · FFN · Normalisation/Régularisation · Position/RoPE. Modales ultra-densifiées ++ : schémas, tableaux, formules, KPIs, checklists Dev/Ops & snippets PyTorch/pseudo-SDK.
Perf & stabilitĂ© Long context (RoPE/ALiBi) Snippets prĂȘts Ă lâemploi
Glossaire express
- GQA : Grouped-Query Attention (K/V partagĂ©s, mĂ©moireâ).
- FlashAttention : kernels attention optimisĂ©s (latence/mĂ©moireâ).
- KV cache : mémo K,V pour génération rapide (stream).
- SwiGLU : activation/gating FFN performante.
- Pre-norm : normalisation avant sous-couches (stabilité).
- RoPE : Rotary Positional Embeddings (ordre via rotations).
- ALiBi : biais linéaire de distance (long contexte).
- Weight tying : partage embeddings in/out.
- Drop-path : stochastic depth (régularisation réseau profond).
- NTK scaling : ajustement des fréquences RoPE pour fen. étendue.
Embeddings â projection tokens â vecteurs denses
Résumé exécutable
- Table |V| Ă d (poids appris) + weight-tying sortie âparams.
- Tokenizer BPE/SentencePiece multi-langue + code â OOVâ, compressionâ.
- Normaliser chiffres/unités si la tùche y est sensible.
Compression fr/en : ~1.3â1.5 tok/mot
Schéma (ASCII)
tokens: [He, ll, o, <sp>, Wo, rld]
â
âŒ
E(token_id) â vecteurs d (BĂTĂd) â + RoPE (Q/K) â blocs (attn/ffn)
Formules utiles
# ParamĂštres approximatifs
params_embeddings â |V| * d
gain_weight_tying â |V| * d (sortie partagĂ©e)
mĂ©moire(batch) â B*T*d*sizeof(dtype)Comparatif tokenizer (indicatif)
| Type | Avantages | Limites | Usages |
|---|---|---|---|
| BPE | Stable, répandu | Granularité code inégale | Général, web |
| SentencePiece | Sans espace, flexible | Paramétrage fin requis | Multi-langue |
| ByteLevel | Pas dâOOV | Seq. plus longues | Code/doc binaire |
Anti-patterns
- Changer de tokenizer en prod sans migration dâindex RAG.
- Vocab Ă©norme (VRAMâ) sans ROI.
- MĂ©langer plusieurs tokenizers sur un mĂȘme flux RAG.
PyTorch (extrait)
import torch, torch.nn as nn
E = nn.Embedding(vocab_size, d_model)
x = E(tokens) # [B, T, d]Ops/Prod
- Figer tokenizer & mapping ID entre versions majeures.
- Documenter la date de build du vocabulaire (audit).
- Tester équivalence post-quantization (8/4-bit).
Attention â dĂ©pendances longues & pondĂ©ration contextuelle
Formule (par tĂȘte)
Q = X Wq ; K = X Wk ; V = X Wv
A = softmax( (Q K^T) / sqrt(d_h) ) V # d_h = d_model / n_heads
masque causal: interdit de voir le futur- MHA capte des relations variĂ©es; GQA partage K,V â mĂ©moireâ.
- FlashAttention : kernels efficaces (latence/mĂ©moireâ).
Complexité & gains
| Variante | Temps | Mémoire | Notes |
|---|---|---|---|
| NaĂŻve | O(TÂČ·d) | O(TÂČ) | petits T OK |
| + KV cache | O(T·d) | O(T·d) | streaming rapide |
| GQA | â MHA | â | K/V partagĂ©s |
| FenĂȘtre glissante | ~O(T·w) | ~O(T·w) | wâȘT long contexte |
Réglages & piÚges
- n_heads â d/64..d/128 (selon implĂ©mentation).
- DĂ©limiteurs & sections clairs â attention guidĂ©e.
- Stop sequences + max_new_tokens pour formats stricts.
- â Contexte > fenĂȘtre â troncature silencieuse.
vLLM (OpenAI-like)
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1 \
--max-model-len 32768 --gpu-memory-utilization 0.92Ops/Prod
- Batching dynamique + paged KV cache.
- Observabilité: p50/p95/p99, tokens, coûts, refus.
- Cache de réponses par empreinte (prompt+ctx).
FFN â transformations non linĂ©aires (SwiGLU/GeLU, MoE)
Bloc (SwiGLU)
# FFN (SwiGLU)
FFN(x) = W3 · ( (W1 x) â swish(W2 x) ) # â : produit Hadamard
d_ff â 2â4Ă d_model- SwiGLU > GeLU (perplexity souvent meilleure, si kernels OK).
- Dropout modéré + grad-clip pour stabilité fine-tuning.
MoE (Mixtral)
- Routeur â top-2 experts actifs / token (capacitĂ© contrĂŽlĂ©e).
- Perplexity/qualitĂ©â Ă FLOPs quasi constants.
- â Ajoute complexitĂ© inferencing (routes, balance loss).
ParamĂštres & shapes
| Objet | Shape | Note |
|---|---|---|
| EntrĂ©e | BĂTĂd | depuis attention |
| Largeur | d_ff | 2â4Ăd (expertâ) |
| Sortie | BĂTĂd | rĂ©siduel + norm |
PyTorch (schéma)
class FFN(nn.Module):
def __init__(self, d, d_ff):
super().__init__()
self.w1 = nn.Linear(d, d_ff)
self.w2 = nn.Linear(d, d_ff)
self.w3 = nn.Linear(d_ff, d)
def forward(self, x):
return self.w3( self.w1(x) * torch.nn.functional.silu(self.w2(x)) )Anti-patterns
- FFN trop Ă©troit â underfit (capacitĂ© limitĂ©e).
- Pas de rĂ©gularisation â sur-apprentissage/dĂ©rives.
- MoE sans balance loss â experts dĂ©sĂ©quilibrĂ©s.
Tip : sur MoE, mesurer expert-utilization & latence p95; ajuster capacité (capacity factor) et le top-k du routeur.
Normalisation & RĂ©gularisation â stabilitĂ© & gĂ©nĂ©ralisation
Normals (pré-norm)
- RMSNorm (fréquent sur Mistral) vs LayerNorm.
- PrĂ©-norm : la norme prĂ©cĂšde attn/ffn â gradients stables.
- Init/échelle adaptées (post-init gains modestes).
Régularisation
- Dropout modéré (attn/ffn), weight decay (AdamW).
- Grad-clip (norme) contre explosions.
- Drop-path (stochastic depth) si trĂšs profond.
Formules
# RMSNorm
y = x * rsqrt(mean(x^2) + eps) * w
# Label smoothing (indicatif): y_ls = (1-Δ)*y + Δ/|V|PyTorch (extrait)
class RMSNorm(nn.Module):
def __init__(self, d, eps=1e-6):
super().__init__()
self.w = nn.Parameter(torch.ones(d)); self.eps = eps
def forward(self, x):
return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps) * self.wAnti-patterns
- Cumuler trop de rĂ©gularisations â sous-apprentissage.
- Changer de norme entre pré-train & fine-tune.
- Ignorer le grad-clip sur datasets hétérogÚnes.
[ x ] â Norm â Attention â + â Norm â FFN â + â ...
^___________________________________________ résidu
Tip : instabilitĂ©s en FT â augmenter un peu dropout, activer grad-clip, vĂ©rifier ordre prĂ©-norm, rĂ©duire lr (cosine/warmup).
Position & Rotary (RoPE) â ordre des tokens & long contexte
Principe
- RoPE applique une rotation dépendante de la position sur Q/K (fréquences log-spaced).
- Conserve lâordre dans lâespace vectoriel â meilleure extrapolation que sinus additifs.
- Compat NTK/RoPE scaling pour Ă©tendre la fenĂȘtre (8kâ16k/32k).
Schéma (SVG)
Formules & pratiques
# Idée: rotation complexe dépendant de la position p
# Q', K' = rot(Q, Ξ(p)), rot(K, Ξ(p))
# NTK/RoPE scaling: ajuster Ξ pour fenĂȘtres plus longuesComparatif positions
| Méthode | Atout | Limite | Contexte |
|---|---|---|---|
| Sinus additif | Simple | Extrapolation faible | court |
| RoPE | Extrapole mieux | Réglages requis | moyen/long |
| ALiBi | TrÚs long, biais distance | Style différent | trÚs long |
PiĂšges & check
- Ne pas mélanger stratégies entre base & FT sans re-calibrage.
- Off-by-one sur positions â dĂ©gradations subtiles.
- Ăvaluer prompts >8k si scaling actif (qualitĂ© & latence).
Long-context prompting (RAG):
[ chunks 500â1500 tok | overlap 10â20% ] â index â retrieve K â Re-rank â prompt balisĂ©
Tip : constituer un golden set long-contexte (8kâ32k) et monitorer perplexity/qualitĂ© + p95/p99.
