Module L27 · Partie K · Ingénierie de l’IA
Les grands modèles de langue : de la prédiction du token suivant à l’assistant.
Un LLM est un transformer décodeur (L25) entraîné à prédire le token suivant sur des milliers de milliards de tokens, puis aligné pour suivre des consignes. Ce chapitre couvre la chaîne complète : tokenisation (BPE), pré-entraînement et ses données, affinage supervisé, RLHF et DPO, décodage, capacités émergentes et limites (hallucinations, raisonnement, mémoire), coûts d’inférence, quantification, et exécution locale — avec la vue mathématique (vraisemblance, entropie, gradient de politique) et la vue informatique (mémoire, débit, latence).
Durée : 4 séances · Prérequis : L11, L15, L16, L25. Objectifs : implémenter BPE ; expliquer SFT/RLHF/DPO avec leurs équations ; échantillonner correctement ; quantifier un modèle ; faire tourner un LLM local et mesurer ; lire InstructGPT, DPO, LLaMA, GPT-4 report.
Ce que vous saurez faire à la fin
- Coder un tokeniseur BPE et calculer la perplexité d’un modèle.
- Écrire la fonction objectif de SFT, la récompense de RLHF et la perte de DPO, et expliquer pourquoi DPO évite le modèle de récompense.
- Choisir température, top-p, pénalités ; comprendre la génération spéculative.
- Estimer mémoire et débit d’un modèle en fp16/int8/int4 et le servir localement.
Fiche de cours · Définitions
Définitions
Fiche de cours · Formules
Formules à connaître
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire
01 / Tokeniser
BPE depuis zéro, et ce que cela change pour le modèle
Conséquences : un mot rare est éclaté en morceaux (« inconnu » → plusieurs tokens) ; les nombres sont découpés bizarrement (« 12345 » ≠ « 123 » + « 45 » selon les fusions) — d’où les faiblesses en arithmétique ; le français coûte ≈ 1,5× plus de tokens que l’anglais avec un vocabulaire appris sur de l’anglais ; et le modèle ne voit jamais de lettres : « combien de r dans strawberry » est une question sur des tokens qu’il ne peut pas décomposer.
02 / Aligner
De SFT à DPO : les trois pertes, implémentées sur un modèle jouet
03 / Décoder
Échantillonnage : température, top-p, pénalité — et la génération spéculative vérifiée
Règles pratiques : code et extraction → T ≈ 0–0,3 ; rédaction → 0,7 ; brainstorming → 1,0 avec top-p 0,95. Une pénalité de répétition > 1,2 casse le code (les accolades se répètent légitimement). La graine ne suffit pas à la reproductibilité : le calcul parallèle sur GPU n’est pas déterministe au bit près.
04 / Servir
Vue informatique : mémoire, débit, coût — et faire tourner un LLM chez soi
| Outil | Usage | Point fort |
|---|---|---|
| llama.cpp / Ollama | Inférence locale CPU/GPU, GGUF quantifié | Simplicité, tourne sur un portable |
| vLLM, TGI, SGLang | Serveur haut débit | PagedAttention (cache KV paginé), lots continus, spéculatif |
| Hugging Face transformers + PEFT | Affinage (LoRA, QLoRA) | Écosystème, modèles ouverts |
| bitsandbytes, GPTQ, AWQ, llama.cpp k-quants | Quantification | int8/int4 avec ≤ 1–2 % de perte |
| API (OpenAI, Anthropic, Mistral, Gemini) | Modèles frontières | Qualité ; coût variable ; données qui sortent |
05 / Comprendre
Capacités, limites, et ce que la recherche en dit
Ce qui marche (et pourquoi)
- Apprentissage en contexte : quelques exemples dans le prompt suffisent — mécanisme des têtes d’induction (L25) et méta-apprentissage implicite pendant le pré-entraînement.
- Chaîne de raisonnement : « raisonne étape par étape » rallonge la séquence, donc le calcul disponible (limite TC⁰ de L25) ; les modèles « à raisonnement » (o1, R1) sont entraînés par RL à produire ces chaînes.
- Code, traduction, résumé, extraction structurée : tâches où la vérification est possible ou la donnée abondante.
- Outils : appeler une calculatrice, une recherche, du code (function calling) compense l’arithmétique et la connaissance figée.
Ce qui ne marche pas (et pourquoi)
- Hallucinations : optimisation de la plausibilité ; calibration dégradée par le RLHF (GPT-4 report) ; remède partiel : RAG, citations, abstention apprise, vérification.
- Arithmétique et comptage : tokenisation + profondeur bornée.
- Connaissance figée : date de coupure ; RAG ou outils.
- Sensibilité au prompt : reformuler change la réponse (L28 pour la mesurer).
- Biais et sécurité : reflet du corpus ; jailbreaks ; injection de prompt (L26) ; fuite de données d’entraînement (mémorisation).
- Coût et empreinte : GPT-4 ≈ 10⁵ fois le coût d’une requête de recherche classique.
Évaluer tout cela rigoureusement : chapitre L32 (métriques) — MMLU, GSM8K, HumanEval, MT-Bench, contamination, et pourquoi les classements publics trompent.
06 / Articles
Les articles à lire
| Article | Contribution | À retenir |
|---|---|---|
| Sennrich et al., Neural Machine Translation of Rare Words with Subword Units (BPE), ACL 2016 — 1508.07909 | BPE pour les sous-mots | Le tokeniseur est un choix de modélisation, pas un détail |
| Brown et al., Language Models are Few-Shot Learners (GPT-3), 2020 — 2005.14165 | Apprentissage en contexte à l’échelle | Évaluation par prompts ; contamination discutée en annexe |
| Ouyang et al., Training language models to follow instructions (InstructGPT), 2022 — 2203.02155 | SFT + modèle de récompense + PPO ; un 1,3B aligné préféré à GPT-3 175B | L’alignement vaut plus que la taille pour l’utilité perçue ; « alignment tax » |
| Bai et al., Constitutional AI, 2022 — 2212.08073 | Préférences générées par le modèle selon des principes (RLAIF) | Réduire l’annotation humaine ; transparence des critères |
| Rafailov et al., Direct Preference Optimization, NeurIPS 2023 — 2305.18290 | RLHF sans RL : perte de classification sur les paires | Théorème 2 ; standard pour les modèles ouverts |
| Wei et al., Chain-of-Thought Prompting, NeurIPS 2022 — 2201.11903 | Le raisonnement explicite émerge avec la taille | Lien avec la profondeur de calcul |
| Hu et al., LoRA, ICLR 2022 — 2106.09685 ; Dettmers et al., QLoRA, 2023 — 2305.14314 | Affinage à faible rang ; sur base quantifiée en 4 bits | Affiner un 65B sur un GPU de 48 Go |
| Leviathan et al., Fast Inference from Transformers via Speculative Decoding, ICML 2023 — 2211.17192 | Génération spéculative exacte | Théorème 3 |
| Kwon et al., Efficient Memory Management for LLM Serving (vLLM, PagedAttention), SOSP 2023 — 2309.06180 | Cache KV paginé comme une mémoire virtuelle | Débit ×2–4 en service |
| Frantar et al., GPTQ, 2022 — 2210.17323 ; Lin et al., AWQ, 2023 — 2306.00978 | Quantification post-entraînement 4 bits précise | Théorème 4 et ses remèdes |
| OpenAI, GPT-4 Technical Report, 2023 — 2303.08774 | Prédiction des performances par lois d’échelle ; calibration ; évaluations | Le RLHF dégrade la calibration (fig. 8) ; peu de détails techniques : lire ce qui manque |
| Carlini et al., Extracting Training Data from LLMs, 2021 — 2012.07805 | Mémorisation et fuite de données | Données personnelles dans le corpus = risque |
TP guidé
TP — Un LLM local, affiné, mesuré (6 h)
- Servir. Installer Ollama ;
ollama run llama3.1:8b; mesurer tokens/s en lot 1 (fichier de 20 prompts, chronométrer) ; comparer q4_K_M et q8_0 : vitesse, mémoire, et 20 questions de culture générale notées à la main. - Tokeniser. Avec
tiktokenou le tokeniseur HF du modèle : compter les tokens d’un même texte en français, anglais, code, JSON ; expliquer les écarts ; trouver un mot découpé en 4 tokens. - Perplexité. Avec transformers, calculer la perplexité d’un petit modèle (GPT-2, Qwen-0.5B) sur (a) un texte Wikipédia, (b) un texte que vous avez écrit, (c) un texte aléatoire ; interpréter.
- Affiner par LoRA. PEFT + un jeu de 300 paires (instruction, réponse) dans votre domaine (générées puis relues à la main) ; r = 16, 3 époques, sur GPU (Colab suffit). Évaluer avant/après sur 50 questions tenues à l’écart, avec un juge et 10 vérifications humaines. Observer l’oubli : la performance sur des questions générales a-t-elle baissé ?
- DPO. Construire 200 paires de préférences (réponse concise et citée vs verbeuse), entraîner par DPO (TRL), mesurer la longueur moyenne et la préférence d’un juge avant/après.
- Livrable. Dépôt avec mesures de débit, tableau de perplexités, adaptateurs LoRA, résultats avant/après avec IC, et une page « ce que l’alignement a changé et ce qu’il a cassé ».
Exercices
Exercices auto-corrigés
Exercice 1 — Perplexité et entropie croisée
Écrivez perplexite(probas) (probas : liste des probabilités assignées par le modèle à chaque vrai token) et vérifiez : un modèle parfait a une perplexité de 1 ; un modèle uniforme sur V tokens a V ; la perplexité est la moyenne géométrique des inverses.
Correction
def perplexite(probas): return float(np.exp(-np.mean(np.log(probas))))Exercice 2 — Gradient de la perte DPO
Pour une paire (w, l), avec h = β[(log πθ(w) − log πref(w)) − (log πθ(l) − log πref(l))], la perte est −log σ(h). Écrivez perte_dpo(theta, ref, w, l, beta) et grad_dpo(...) pour une politique softmax sur V réponses (theta : logits), et vérifiez le gradient par différences finies.
Correction
def perte_dpo(theta, ref, w, l, beta):
lp, lr = np.log(softmax(theta)), np.log(softmax(ref)); h = beta * ((lp[w] - lr[w]) - (lp[l] - lr[l]))
return float(np.log(1 + np.exp(-h)))
def grad_dpo(theta, ref, w, l, beta):
p = softmax(theta); lp, lr = np.log(p), np.log(softmax(ref)); h = beta * ((lp[w] - lr[w]) - (lp[l] - lr[l]))
s = 1 / (1 + np.exp(h)) # = 1 − σ(h)
gw = -p.copy(); gw[w] += 1; gl = -p.copy(); gl[l] += 1
return -s * beta * (gw - gl)Exercices
Exercices auto-corrigés (suite)
Exercice 3 — Quantification par groupes
Implémentez quantifier(w, bits, groupe) qui découpe w en groupes consécutifs, calcule pour chacun un facteur d’échelle a = max|w| et quantifie sur 2bits − 1 niveaux symétriques, et dequantifier. Vérifiez que l’erreur relative RMS diminue quand le groupe rétrécit, et qu’elle est ≈ Δ/(√12·σ) (Théorème 4) pour un grand groupe.
Correction
def quantifier(w, bits, groupe):
n = (2 ** bits - 1) // 2 # niveaux −n..n (int4 : −7..7)
W = w.reshape(-1, groupe); pas = np.abs(W).max(1) / n + 1e-12 # une échelle (le pas Δ) par groupe
return np.clip(np.round(W / pas[:, None]), -n, n).astype(int), pas
def dequantifier(q, echelles, groupe): return (q * echelles[:, None]).reshape(-1)Ce que stocke un fichier GGUF/GPTQ : les entiers sur 4 bits et un pas (fp16) par groupe de 32 à 128 poids — soit ≈ 4,5 bits par poids en moyenne.
Exercice 4 — Top-p et budget de contexte
a) Écrivez top_p(p, seuil) renvoyant les indices retenus (masse cumulée ≥ seuil, plus petit ensemble). b) Écrivez tokens_max_reponse(ctx, prompt_tokens, marge=64) et cout(tokens_in, tokens_out, prix_in, prix_out) (prix par million).
Correction
def top_p(p, seuil):
o = np.argsort(-p); c = np.cumsum(p[o]); k = int(np.searchsorted(c, seuil - 1e-12)) + 1; return list(o[:k])
def tokens_max_reponse(ctx, prompt_tokens, marge=64): return max(0, ctx - prompt_tokens - marge)
def cout(tokens_in, tokens_out, prix_in, prix_out): return (tokens_in * prix_in + tokens_out * prix_out) / 1e6Fiche de cours · Exercices corrigés
Exercices corrigés (rédaction)
Vérification
Qu’est-ce que DPO supprime par rapport au RLHF classique ?
Deux questions supplémentaires
1. Pourquoi les LLM comptent-ils mal les lettres ? Ils voient des tokens BPE, pas des caractères ; « strawberry » est un ou deux tokens opaques.
2. Pourquoi la génération en lot est-elle presque gratuite ? Le décodage est limité par la lecture des poids ; un lot partage cette lecture entre les requêtes.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| BPE | Tokenisation par fusions de paires fréquentes ; vocabulaire de 32 k–256 k. |
| Perplexité | exp(entropie croisée moyenne) ; nombre effectif de choix par token. |
| SFT | Affinage supervisé sur des démonstrations. |
| RLHF | Modèle de récompense + gradient de politique avec pénalité KL. |
| DPO | Optimisation directe des préférences, sans modèle de récompense. |
| Température / top-p | Contrôle de l’entropie de l’échantillonnage. |
| Génération spéculative | Petit modèle propose, grand vérifie ; loi exacte. |
| Quantification | Poids en int8/int4 par groupes avec échelles ; mémoire ÷2–4. |
| LoRA | Affinage par matrices de rang faible ajoutées aux poids. |
Suite
Le modèle est là. Comment lui parler pour obtenir ce que vous voulez — et le prouver.
Le prompt engineering n’est pas de la magie : c’est du conditionnement, mesurable. Chapitre suivant : techniques, mathématiques du few-shot, et surtout l’évaluation systématique des prompts.