Spécialiser un modèle open-weight (Mistral, Llama, Qwen) sur votre vocabulaire, vos processus, votre style. Notre boîte à outils : Unsloth (2× plus rapide, 60 % moins de mémoire), TRL et Axolotl, les méthodes état de l'art (LoRA, QLoRA, DPO, KTO, ORPO, GRPO) et l'évaluation rigoureuse avant promotion en production.
90 % des projets IA en 2026 n'ont pas besoin de fine-tuning. Le prompt engineering plus le RAG résolvent l'essentiel. Mais sur les 10 % restants, le fine-tuning est irremplaçable.
Few-shot, chain-of-thought, structured output, prompt chaining. Coût négligeable, itération en minutes. Toujours la première option.
Connaissance externe ou changeante, citations, vérifiabilité, mise à jour rapide. Quasi-toujours la bonne réponse pour « le modèle ne connaît pas X ».
Quand le modèle connaît X mais ne sait pas le formater ou le styliser comme vous voulez. Vocabulaire métier, ton, structure de sortie.
Quand vous voulez aligner le modèle sur des préférences — choisir A plutôt que B sur 5000 exemples. Pour l'agentique fiable et le suivi d'instructions complexes.
Ne jamais commencer un projet par « on va fine-tuner ». Commencer par un prompt + RAG. Mesurer (RAGAS, llm-as-judge). Si la qualité plafonne sur des points spécifiques (format, ton, vocabulaire, comportement), alors fine-tuner — sur ces points précis, pas en général.
Le paysage s'est complexifié depuis 2024. Voici les 7 méthodes que nous mobilisons en production, par cas d'usage.
Entraînement sur paires (input, output_attendu). Le pain quotidien. À combiner avec LoRA pour la majorité des cas.
On gèle le modèle et on entraîne des matrices de rank faible (r=16 à 64). 0.1-1 % des paramètres. QLoRA quantifie en 4-bit la base. Permet d'entraîner Mistral Large 3 sur 1× H100.
À partir de paires (chosen, rejected), apprend les préférences sans reward model. Alternative légère à PPO/RLHF. Stable et reproductible.
Comme DPO mais avec des exemples « bon / mauvais » non-appariés. Données plus faciles à collecter. Performance comparable.
Combine SFT + alignement en une passe. Plus efficace en données et en compute. Notre choix par défaut depuis 2025.
Méthode DeepSeek R1. Pour entraîner le raisonnement avec reward vérifiable (math, code, structured output). Démocratise le RLHF.
Trois frameworks dominent le fine-tuning open-weight en 2026. Notre choix par défaut : Unsloth pour la vitesse, TRL pour les méthodes avancées, Axolotl pour les pipelines déclaratifs et reproductibles.
| Framework | Vitesse | Mémoire | Méthodes | Modèles | Notre usage |
|---|---|---|---|---|---|
| Unsloth | 2× | −60% | SFT, LoRA, QLoRA, DPO, KTO, ORPO, GRPO | Llama, Mistral, Gemma, Phi, Qwen, DeepSeek | Pivot |
| TRL (HF) | baseline | baseline | Toutes (référence) | Tous HF | Méthodes exotiques |
| Axolotl | moyen | moyen | SFT, DPO, KTO, ORPO | Llama, Mistral, Qwen | YAML déclaratif, MLOps |
| LLaMA-Factory | moyen | moyen | Toutes + GUI | Tous HF | Démos, exploration |
| PEFT (HF) | — | — | LoRA, QLoRA, IA3 (lib seule) | Tous HF | Lib de base utilisée par TRL |
| Mistral Forge | managé | managé | SFT, DPO managé | Mistral uniquement | Si stack 100% Mistral |
Quatre fois moins de code que TRL pur. Tient en mémoire sur une seule H100 80GB pour un Mistral Large 3 quantifié en 4-bit.
from unsloth import FastLanguageModel from trl import SFTTrainer from datasets import load_dataset import mlflow # Modèle quantifié 4-bit, prêt pour LoRA model, tokenizer = FastLanguageModel.from_pretrained( model_name="unsloth/Mistral-Large-3-Instruct-bnb-4bit", max_seq_length=8192, load_in_4bit=True, ) # Adapter LoRA — 0.5 % des paramètres model = FastLanguageModel.get_peft_model( model, r=32, lora_alpha=64, lora_dropout=0, target_modules=["q_proj","k_proj","v_proj","o_proj", "gate_proj","up_proj","down_proj"], use_gradient_checkpointing="unsloth", ) dataset = load_dataset("json", data_files="corpus_acpr.jsonl", split="train") with mlflow.start_run(experiment_id="finetune-acpr"): mlflow.log_params({"r": 32, "lora_alpha": 64, "epochs": 3}) trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=dataset, max_seq_length=8192, args=dict(per_device_train_batch_size=4, gradient_accumulation_steps=4, warmup_steps=10, num_train_epochs=3, learning_rate=2e-4, output_dir="out/", report_to="mlflow"), ) trainer.train() # Sauvegarde adapter LoRA seul (~50MB) model.save_pretrained("acpr-adapter-v1") # Enregistrement dans MLflow Model Registry mlflow.transformers.log_model(model, "model", registered_model_name="acpr-mistral-lora")
Le fine-tuning ne réussit qu'autant que le dataset est bon. Trois leviers pour produire des datasets de qualité : collecte humaine ciblée, distillation depuis un modèle supérieur, génération synthétique vérifiée.
500 à 5000 exemples annotés par vos experts métier. Qualité maximale. Coûteux. Indispensable pour les cas critiques (juridique, médical, réglementaire).
Un modèle supérieur (Claude Opus, GPT-5, DeepSeek R1) génère 10k-100k exemples. Le student les apprend. Permet d'avoir on-premise une fraction de la qualité d'un flagship.
Génération par le modèle lui-même + filtrage par llm-as-judge. Évolutif. Risque de mode collapse — toujours mélanger avec de la donnée réelle (10-30 %).
Déduplication (MinHash), filtrage qualité (perplexity, classifier), équilibrage des classes, removal de PII (Presidio). 80 % du temps de dataset = curation.
Pour 5000 paires de préférences : 2000 annotées humain (qualité), 2000 distillées Claude Opus (couverture), 1000 self-instruct + llm-as-judge (diversité). Toujours validation set séparé annoté à 100 % humain.
Le modèle fine-tuné en BF16 fait 240 GB pour Mistral Large 3. Pour le déployer, quantization indispensable. Plusieurs formats coexistent, chacun avec son usage.
| Format | Précision | Taille | Inférence | Cas d'usage |
|---|---|---|---|---|
| BF16 / FP16 | 16-bit | 100 % | vLLM, SGLang | Référence qualité, GPU H100/H200 |
| FP8 (H100) | 8-bit | 50 % | vLLM + TensorRT-LLM | Production scale, perte qualité minime |
| AWQ | 4-bit weight | 25 % | vLLM, SGLang | Default 4-bit pour vLLM, qualité > GPTQ |
| GPTQ | 4-bit weight | 25 % | vLLM, TGI | Alternative AWQ, écosystème mature |
| GGUF (Q4_K_M) | 4-bit mixed | 25-30 % | llama.cpp, Ollama | Edge, CPU, Mac, dev local |
| EXL2 | 2 à 8-bit | variable | ExLlamaV2 | Mix précision optimisé qualité/taille |
| MXFP4 (Blackwell) | 4-bit float | 25 % | TensorRT-LLM B100/B200 | 2026+, GPU nouvelle gen |
Production sur H100/H200 : AWQ 4-bit. Production B100/B200 : FP8 ou MXFP4. Edge / dev local : GGUF Q4_K_M. Mac avec puce M : MLX. Toujours benchmarker la perte qualité sur jeu d'éval avant promotion.
Un modèle fine-tuné n'a aucune valeur tant qu'il n'a pas passé une suite d'évaluation rigoureuse. Notre process en 5 étapes :
300-1000 questions/tasks annotées par les experts métier. Jamais touché pendant l'entraînement. Mesure la qualité absolue.
MMLU pour la généralité, GSM8K/MATH pour math, HumanEval pour code, MT-Bench pour chat. S'assure qu'on n'a pas dégradé les capacités générales.
Claude Opus juge les sorties du modèle fine-tuné vs baseline. Win rate par catégorie. Détection des régressions invisibles.
Routing 10 % du trafic réel vers le nouveau modèle. Monitoring qualité (RAGAS, llm-as-judge), latence, coût. 2 semaines minimum.
Si métriques OK : promotion Staging → Production dans MLflow Model Registry. Sinon, retour à l'étape 1.
Trace MLflow complète. Toggle de retour en arrière en 30 secondes. Pas de fine-tuning sans plan de rollback.
Cadrage du besoin (prompt vs RAG vs fine-tuning), construction du dataset, fine-tuning Unsloth, évaluation, déploiement quantifié, versioning MLflow. Première analyse de faisabilité offerte.