Mistral â đ EntraĂźnement
Pré-entraßnement (LM) · Instruction Tuning / SFT · RLHF/RLAIF · Datasets (web filtré, code, multilingue, dialogues, docs). Modales ultra-densifiées : schémas, tableaux, formules, checklists & snippets.
Obj. LM & pertes Alignement (humain/IA) Curations & licences
Glossaire express
- LM (next token) : cross-entropy pour prédire le prochain token.
- SFT : fine-tuning supervisé sur paires (instruction, réponse).
- Instruction tuning : guides pour suivre prompts/contrats de sortie.
- RLHF : RL avec préférences humaines (RM + PPO).
- RLAIF : RL avec prĂ©fĂ©rences dâun modĂšle IA (proxy humain).
- DPO/ORPO/KTO : variantes sans RM explicite (préférences directes).
- Golden set : jeu dâĂ©val mĂ©tier versionnĂ© (exact-matchâŠ).
- ZeRO : sharding mémoire des optim/grad/poids.
- AMP/bfloat16 : apprentissage mixte précision.
- Curriculum : progression difficulté/longueur de séquence.
PrĂ©-entraĂźnement (Language Modeling) â objectif next-token
Objectif & pertes
# Cross-entropy (LM)
L = - Σ_t log pΞ(x_t | x_{<t})- Masque causal ; séquences tronquées/paddées.
- Schedule warmup â cosine (ou plateau) + AdamW.
- AMP/bfloat16 + grad-clip pour stabilité.
HyperparamĂštres (ordres de grandeur)
| ParamĂštre | 7B | MoE 8Ă7B | Note |
|---|---|---|---|
| LR max | 1e-4 â 2e-5 | â1e-4 | cosine, warmup 1â3% |
| Batch eff. | 128â512 | 256â1024 | grad-accum |
| Seq len | 4kâ8k | 8kâ32k | RoPE scaling |
| WD | 0.01 | 0.01 | AdamW |
Bonnes pratiques
- Mix de données équilibré (texte/code/multi-langue).
- Dedup agressif + filtres qualité (langue, toxicité, PII).
- Checkpointing fréquent + reprise idempotente.
Snippets (Transformers)
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
tok = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.2")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.2")
args = TrainingArguments(per_device_train_batch_size=2, fp16=True, lr_scheduler_type="cosine",
learning_rate=2e-5, warmup_ratio=0.02, gradient_accumulation_steps=16)
trainer = Trainer(model=model, args=args, train_dataset=lm_dataset)
trainer.train()Anti-patterns
- MĂ©langer sources bruyantes sans filtres â dĂ©rive & biais.
- Sous-estimer la VRAM séquence-longue (OOM tardifs).
- Pas de golden set prĂ©-train â difficile de dĂ©tecter rĂ©gressions.
Tip : curriculum par longueur : commencer Ă 2k, augmenter vers 8â32k (RoPE scaling) une fois la perte stabilisĂ©e.
Instruction Tuning / SFT â suivre des prompts & formats
Principe
- SupervisĂ© sur paires (instruction, sortie) proches des cas dâusage.
- Contrats de sortie (JSON/XML) + validateurs cÎté serveur.
- QLoRA/LoRA pour mémoire réduite (4/8-bit) et itérations rapides.
Exemple dataset (JSONL)
{"instruction":"Résume en 3 puces","input":"...","output":"- A\n- B\n- C"}
{"instruction":"Extrais email","input":"Contact: ...","output":"{\"email\":\"x@y.com\"}"}Qualité des données
- Diversifier tons/formats, inclure contre-exemples.
- Retirer PII, normaliser unités/chiffres si critique.
- Split train/val/test par source (éviter fuite).
QLoRA (schéma)
from peft import LoraConfig, get_peft_model
peft_cfg = LoraConfig(r=64, lora_alpha=16, target_modules=["q_proj","v_proj"])
model = get_peft_model(model, peft_cfg) # puis SFT sur dataset d'instructionsĂval SFT
- Exact-match, conformité de schéma, longueur, refus appropriés.
- Golden set versionné + CI (non-régression à chaque bump).
- Red-team prompts (jailbreak, PII, toxicité) en post-SFT.
Tip : imposer des stop sequences & max_new_tokens + sampling conservatif (temp=0.2, top-p=0.9) pour formats stricts.
RLHF / RLAIF â alignement via prĂ©fĂ©rences
Boucle RLHF (schéma)
Policy Ï_Ξ â GĂ©nĂšre rĂ©ponses â Score RM / prĂ©fĂ©rences â Optimise (PPO/DPO/ORPO)
Trois approches
- PPO (avec RM) : policy vs reward model, KL-penalty.
- DPO/ORPO : directement sur préférences (pairs win/lose), sans RM explicite.
- RLAIF : préférences produites par un modÚle IA (proxy humain).
Pertes (intuition)
# PPO (sketch)
L = E[ r_t - ÎČ KL(Ï_Ξ || Ï_ref) ] (avec avantage/clip)
# DPO (prĂ©fĂ©rences yâș > yâ»)
L = - log Ï(ÎČ (log Ï_Ξ(yâș|x) - log Ï_Ξ(yâ»|x)))Comparatif
| MĂ©thode | + Points forts | â Limites | Quand |
|---|---|---|---|
| PPO | Fin contrĂŽle via RM | Setup complexe | Produits sensibles |
| DPO/ORPO | Simple, stable | Moins fin que RM | Alignement rapide |
| RLAIF | Scale facile | Qualité proxy | Volumes massifs |
Snippets (pseudo)
# DPO mini
for x, y_pos, y_neg in prefs:
loss = -logsigmoid(beta*(logp(y_pos|x)-logp(y_neg|x)))
loss.backward(); opt.step()# PPO (idée)
adv = compute_advantage(rm_scores, kl_penalty)
loss = ppo_clip(policy, old_policy, adv)Bonnes pratiques
- Curate préférences cohérentes (consigne/format/sécurité).
- ContrÎler la dérive via KL/similarité à une policy de référence.
- Ăvaluer refus justifiĂ©s, toxicitĂ©, hallucinations guidĂ©es.
Tip : commencer par SFT solide + DPO léger ; réserver PPO complet aux domaines à haut risque/compliance.
Datasets & Curation â web filtrĂ©, code, multilingue, dialogues, docs
Sources typiques
- Web crawl filtré (qualité, langue, PII/NSFW, dé-duplication).
- DépÎts de code (licences permissives), issues/PR.
- Corpus multilingue & documentations techniques.
- Dialogues & QA (humainâhumain/humainâbot) curĂ©s.
Mix & pondérations
| Type | % indicatif | But |
|---|---|---|
| Web | 40â60% | Couverture gĂ©nĂ©rale |
| Code | 10â25% | Raisonnement/formatage |
| Docs | 10â20% | QualitĂ© factuelle |
| Dialogues | 10â20% | Interaction/ton |
Licences & gouvernance
- Inventaire des sources + conditions dâutilisation.
- TraçabilitĂ© (hash, URL, date, licence) â audit.
- RÚgles PII, rétention, purge & localisation des données.
Pipeline de curation (ASCII)
Crawl â DĂ©-dup â Lang/QualitĂ© â PII/NSFW â Tokenisation â Shards â Mix â Train
Anti-patterns
- Ignorer la dĂ©-duplication â sur-apprentissage/local modes.
- MĂ©langer des licences incompatibles â risques juridiques.
- Pas de versioning dataset â non-reproductible.
Tip : conserver des snapshots (manifest JSON) de chaque build dataset + scripts de reproduction.
Ăvaluation & Validation â golden sets, sĂ©curitĂ© & qualitĂ©
Métriques & jeux
- Exact-match, conformité schéma, ROUGE/BLEU (si utile).
- Groundedness (citations RAG), refus justifiés.
- Temps/coûts par 1k tokens, latence p95/p99.
Golden set (exemple)
{"id":"r1","task":"extraction email","prompt":"...","gold":"{\"email\":\"x@y.com\"}"}
{"id":"r2","task":"résumé 3 puces","prompt":"...","gold":"- A\n- B\n- C"}Tests rouges (sécurité)
- PII, jailbreak, prompt injection, contenus Ă risque.
- RÚgles de refus claires + alternatives sûres.
- Modération pré/post + journalisation.
CI (pipeline)
- run: schema tests
- run: golden set (exact-match, groundedness)
- run: red-team suite (seuils min)
- deploy: canary + alerting + rollbackAnti-patterns
- Ne bencher que des scores publics hors-domaine.
- Confondre âstyleâ avec âvĂ©ritĂ©â (hallucinations non pĂ©nalisĂ©es).
- Ignorer p95/p99 (SLAs non tenus en prod).
Tip : séparer strictement évaluation offline (golden set) et monitoring online (télémétrie anonymisée + A/B).
Pipeline & Infra â distribuĂ©, prĂ©cision mixte, checkpoints
Stratégies mémoire
- ZeRO (stage 1â3) : sharding optim/grad/poids.
- Activation checkpoint : recompute fwd â mĂ©moireâ.
- Offload (CPU/NVMe) si VRAM contrainte.
Choix de précision
- bfloat16 recommandé si HW compatible (stabilité).
- fp16 + loss-scaling si bfloat16 indisponible.
- Int8/4-bit pour SFT avec QLoRA (poids gelés + adapters).
Throughput & coûts
# indicatif
tokens/s â (batch_eff Ă seq_len) / latence_step
coĂ»t â tokens_total Ă prix_tok (compute + IO)Snippets (DeepSpeed/Accelerate)
{
"zero_optimization": {"stage": 2},
"bf16": {"enabled": true},
"gradient_accumulation_steps": 16
}Bonnes pratiques
- Reprise de checkpoint idempotente (seed, sampler, mix).
- Profiler GPU : temps en comms vs compute (optimiser buckets).
- Alerting sur OOM tardifs & nan-loss (arrĂȘt propre).
Tip : tracer config complÚte (hp, datasets, seeds, versions libs) dans un manifest joint à chaque checkpoint pour une reproductibilité totale.
