FineTuning - Adapter les LLMs à vos tâches
← GenAI | ↑ .. | → PostTraining
Série progressive sur le fine-tuning des modèles de langue : des bases LoRA à la fusion de modèles, en passant par la quantization, l’instruction-following et l’alignement par préférences humaines. GPU recommandé (T4/V100 suffisent pour la plupart des exercices).
Objectifs d’apprentissage
À l’issue de cette série, vous serez capable de :
- Appliquer LoRA et QLoRA pour fine-tuner des modèles 7B sur un GPU consumer
- Transformer un base model en instruct model via SFT (format ChatML)
- Aligner les modèles sur les préférences humaines avec DPO
- Fusionner plusieurs adaptateurs fine-tunés en un seul modèle unifié (TIES, DARE, MoE)
Structure
FineTuning/
├── FT-00a-LoRA-from-scratch-Python.ipynb # LoRA sans peft : décomposition, gel, fusion
├── FT-00b-LoRA-Hyperparams-from-scratch-Python.ipynb # Ablation rang × alpha, sweet-spots mesurés
├── FT-00c-LoRA-SOTA-Comparison-Python.ipynb # La même adaptation avec peft : la mesure coût/bénéfice
├── FT-00d-LoRA-QLoRA-SOTA-Comparison-Python.ipynb # Bloc B.5 : QLoRA = peft + bitsandbytes 4-bit NF4 ; mesure structurelle de la fraction nn.Linear (le piège que bnb ne mord que sur Linear), cas SmallCNN/BigMLP dégénérés vs DistilBERT favorable
├── FT-01-Introduction-FineTuning-Python.ipynb # LoRA, full vs partial vs PEFT
├── FT-02-QLoRA-Quantization-Python.ipynb # Quantization 4-bit (NF4) + LoRA
├── FT-03-Supervised-FineTuning-SFT-Python.ipynb # SFT : contrat de format, Qwen3.5-0.8B
├── FT-04-RLHF-DPO-Python.ipynb # Alignement préférences, DPO
├── FT-05-ModelMerging-Routing-Python.ipynb # Fusion d'adaptateurs, routage MoE
└── FT-06-Vision-Language-LoRA-Python.ipynb # LoRA vision-langage, tâche image->texte
Numérotation et point d’entrée du parcours. Le préfixe
00désigne ici le socle from-scratch : démonter le mécanisme LoRA à la main (FT-00a), mesurer son réglager × alpha(FT-00b), puis confronter l’implémentation maison à l’outil SOTApeft(FT-00c). Le parcours pédagogique commence à FT-01 (introduction pratique) ; les notebooks00sont des compléments techniques, à faire avant ou en parallèle quand on veut voir « sous le capot ». Ailleurs dans le dépôt, le préfixe00signifie le plus souvent « environnement » (GenAI/00-GenAI-Environment/,Sudoku-00-Environment,SmartContracts/00-Foundations/) — cette série est l’exception locale ; un éventuel renumérotage des fichiers est tracé par l’issue #16231 (nomenclature).
Progression pédagogique
Parcours principal
| Notebook | Sujet | Prérequis | Durée | Niveau |
|---|---|---|---|---|
| FT-00a | LoRA from scratch : LoRALinear/LoRAConv2d en PyTorch pur, initialisation canonique, fusion et sa dérive |
Bases PyTorch | ~30 min | Intermédiaire |
| FT-00b | Ablation r × alpha from scratch : sweet-spots mesurés sur 18 configurations, comparaisons aux baselines |
FT-00a | ~15 min | Intermédiaire |
| FT-01 | Fine-tuning complet, partiel, LoRA | Bases LLMs | ~30 min | Débutant |
| FT-02 | Quantization NF4, QLoRA, bitsandbytes | FT-01 | ~30 min | Intermédiaire |
| FT-03 | SFT sur Qwen3.5-0.8B : enseigner un contrat de format balisé | FT-01 | ~45 min | Intermédiaire |
| FT-04 | Reward Model, RLHF, DPO | FT-01, FT-02, FT-03 | ~30 min | Avancé |
| FT-05 | TIES, DARE, MergeKit, routage MoE | FT-01 à FT-04 | ~45 min | Avancé |
| FT-06 | LoRA vision-langage Qwen3.5-0.8B, conformité image->texte | FT-02, FT-03 | ~45 min | Avancé |
Socle from-scratch (compléments techniques, 00a → 00b → 00c)
| Notebook | Sujet | Prérequis | Durée | Niveau |
|---|---|---|---|---|
| FT-00a | LoRA from scratch : LoRALinear/LoRAConv2d en PyTorch pur, initialisation canonique, fusion et sa dérive |
Bases PyTorch | ~30 min | Intermédiaire |
| FT-00b | Ablation r × alpha from scratch : sweet-spots mesurés sur 18 configurations, comparaisons aux baselines |
FT-00a | ~15 min | Intermédiaire |
| FT-00c | La même adaptation refaite avec peft.LoraConfig : paramètres, exactitude, lignes de code — le coût/bénéfice de l’outil SOTA mesuré |
FT-00a | ~15 min | Intermédiaire |
| FT-00d | QLoRA = peft + bitsandbytes 4-bit NF4 ; la mesure structurelle first-hand qui montre que bnb ne mord que sur nn.Linear (SmallCNN 19.85 %, BigMLP 100 %, DistilBERT 64.37 % — mesures first-hand) — l’arbre de décision avant d’invoquer QLoRA |
FT-00a, FT-00c | ~30 min | Intermédiaire |
Technologies couvertes
Frameworks
- transformers (Hugging Face) - Modèles de base
- peft (Hugging Face) - LoRA, adaptateurs
- bitsandbytes - Quantization 4-bit / 8-bit
- trl (Hugging Face) - SFTTrainer, DPOTrainer
- mergekit - Fusion de modèles (TIES, DARE, SLERP)
Modèles utilisés
- Petits modèles (FT-01) : DistilBERT, TinyLlama
- Modèles 1-3B (FT-02) : Phi-3, Llama-3.2 · Qwen3.5-0.8B (FT-03, aligné sur la série PostTraining)
- Modèles 7B+ (FT-04, FT-05) : Mistral-7B, Llama-2-7B (avec QLoRA)
Prérequis
pip install transformers peft accelerate bitsandbytes trl datasets
pip install mergekit # Pour FT-05 uniquementConfiguration GPU
| Notebook | VRAM minimale | VRAM recommandée |
|---|---|---|
| FT-00a | Aucune (CPU possible) | 8 GB |
| FT-00b | Aucune (CPU possible, ~15 min) | 8 GB |
| FT-00c | Aucune (CPU possible, ~15 min) | 8 GB |
| FT-01 | 4 GB (CPU possible) | 8 GB |
| FT-02 | 6 GB (QLoRA) | 12 GB |
| FT-03 | 8 GB | 16 GB |
| FT-04 | 12 GB (DPO 2 modèles en mémoire) | 24 GB |
| FT-05 | 16 GB (merge) | 24 GB |
| FT-06 | 8 GB (QLoRA 4-bit) | 12 GB |
Concepts clés
LoRA (Low-Rank Adaptation)
Décompose les mises à jour de poids en matrices de bas rang (A, B avec rang r << dim). Réduit les paramètres entraînables de ~99%. Le mécanisme est démonté from-scratch (sans peft) dans FT-00a : initialisation canonique, gel, budget r(d+k), fusion et sa (non-)bit-exactitude. Le réglage r × alpha est mesuré dans FT-00b : 18 configurations sur la même mini-tâche, trois régularités quantifiées. La confrontation à l’outil SOTA est faite dans FT-00c : peft.LoraConfig refait la même adaptation en deux lignes — le notebook mesure ce que l’écosystème apporte et ce qu’il masque.
QLoRA
Combine quantization 4-bit (NF4 + double quantization) avec LoRA. Permet de fine-tuner des modèles 7B sur un GPU consumer (RTX 3090/4090).
SFT (Supervised Fine-Tuning)
Transforme un base model en instruct model via supervision sur des paires (instruction, réponse). Format ChatML recommandé.
DPO (Direct Preference Optimization)
Alternative simplifiée à RLHF : optimise directement sur les paires (preferred, rejected) sans Reward Model explicite.
Model Merging
Combine plusieurs adaptateurs LoRA fine-tunés sur des tâches différentes en un seul modèle unifié. Algorithmes : TIES, DARE, SLERP, weighted average.
Parcours recommandé
Découverte (1h30)
- FT-01 - Comprendre LoRA et le compromis paramètres/qualité — le point d’entrée de la série
- FT-03 - SFT pour instruction-following (sans QLoRA)
- FT-00a - Pour aller plus loin : démonter LoRA à la main — décomposition, initialisation, fusion, sans
peft
Socle from-scratch (optionnel, ~1h)
FT-00a → FT-00b → FT-00c dans l’ordre : le mécanisme écrit à la main, le réglage r × alpha mesuré sur 18 configurations, puis la même adaptation confiée à peft — trois regards sur le même objet.
Standard (2-3h)
- FT-01 à FT-04 dans l’ordre
Avancé (3-4h)
- FT-01 à FT-05 dans l’ordre + expérimenter mergekit recipes
FAQ
OOM pendant FT-04 (DPO) ou FT-05 (Model Merging)
DPO (FT-04) charge deux modèles en mémoire (policy + reference), ce qui double la consommation VRAM. Stratégies :
- Utiliser QLoRA 4-bit (
load_in_4bit=True) pour réduire chaque modèle à ~25% de sa taille FP16. - Réduire
per_device_train_batch_sizeà 1 et compenser avecgradient_accumulation_steps. - Pour FT-05 (merge), les modèles sont chargés séquentiellement, pas en parallèle — 16 GB suffisent si vous mergez un modèle à la fois.
FT-01 à FT-03 sont accessibles sur GPU 8-12 GB (T4, RTX 3060). FT-04 et FT-05 préfèrent 24 GB (RTX 3090/4090).
Quelle différence entre cette série et PostTraining ?
| Aspect | FineTuning (cette série) | PostTraining |
|---|---|---|
| Focus | Boîte à outils pratique | Profondeur méthodologique |
| Approche | “Comment faire” | “Pourquoi ça marche” |
| Modèles | 0.5B à 7B, variés | Qwen2.5-0.5B/1.5B uniquement |
| Techniques | LoRA, QLoRA, SFT, DPO, merging | SFT, DPO, GRPO, RLVR |
| GPU cible | T4/V100 (4-8 GB min) | RTX 3070 (8 GB) |
| Math du loss | Non détaillée | Expliquée avant le code |
Recommandation : faire FineTuning d’abord pour la pratique, puis PostTraining pour comprendre les fondamentaux.
LoRA rank : comment choisir r ?
Le rang r de LoRA contrôle le compromis paramètres/qualité :
- r=4-8 : bon pour des tâches simples (classification, formatage). ~0.1% paramètres entraînables.
- r=16 (défaut) : bon compromis pour instruction-following et DPO. ~0.5% paramètres.
- r=32-64 : tâches complexes (raisonnement, code). Plus de paramètres mais plus de VRAM.
- r=128+ : rarement nécessaire — à ce stade, un full fine-tuning partiel est souvent plus efficace.
Le notebook FT-01 compare r=4 vs r=16 vs r=64 sur DistilBERT pour rendre ce compromis visible.
bitsandbytes ne s’installe pas sur Windows
bitsandbytes (requis pour QLoRA, FT-02 à FT-04) dépend de CUDA. Sur Windows :
# Vérifier CUDA
python -c "import torch; print(torch.version.cuda)"
# Installer bitsandbytes compatible Windows
pip install bitsandbytes>=0.45
# Si erreur DLL non trouvée
# Vérifier que CUDA_HOME est configuré
set CUDA_HOME=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4Alternative : utiliser Google Colab (GPU T4 gratuit) pour les notebooks FT-02 à FT-04 si votre machine n’a pas de GPU.
Peut-on fine-tuner sans GPU ?
Partiellement. FT-01 fonctionne en mode CPU (DistilBERT, petit modèle). Pour les notebooks FT-02 à FT-05 :
- Google Colab (GPU T4 gratuit) : FT-01 à FT-03 exécutables.
- Kaggle Kernels (GPU P100 gratuit, 30h/semaine) : FT-01 à FT-04.
- Unsloth (optimisation mémoire) : réduit la VRAM requise de ~40%, permet QLoRA 7B sur T4.
Les notebooks sont conçus pour tourner avec LOAD_MODEL_AND_TRAIN=False en mode démo (outputs pré-calculés visibles sans GPU).
MergeKit produit un modèle dégradé
Si le modèle merge (FT-05) perd en qualité par rapport aux adaptateurs individuels :
- Vérifier que les adaptateurs ont été fine-tunés sur des tâches suffisamment différentes (merger des adaptateurs trop similaires ne produit pas de gain).
- L’algorithme TIES est plus robuste que SLERP pour les merges multi-tâches.
- DARE (Drop And Rescale) élimine les poids redondants — essayer si TIES ne converge pas.
- Le routage MoE (Mixture of Experts) est une alternative au merge statique : chaque token est routé vers l’adaptateur le plus compétent. FT-05 couvre cette approche.
Ponts avec les autres séries
| Série | Connection | Détails |
|---|---|---|
| GenAI/PostTraining | Profondeur méthodologique | Série sœur : la math du loss derrière SFT/DPO + GRPO/RLVR. FineTuning = recettes, PostTraining = pourquoi ça marche. |
| RL — rl_5 MDP/Q-Learning | Fondations policy/value | Socle Bellman/Q réutilisé par tout post-training. |
| RL — rl_6c PPO from scratch | PPO from scratch | L’optimiseur derrière PPO-RLHF, implémenté pas à pas. |
| RL — rl_9 offline RL | SFT = Behavior Cloning | DPO comme preference learning offline ; contrainte de support = KL. |
| RL — rl_10 reward shaping | Reward model = shaping appris | Reward shaping (Ng 1999) et reward hacking, préfiguration tabulaire du reward model RLHF. |
Références
- Hugging Face PEFT : https://huggingface.co/docs/peft
- QLoRA paper : https://arxiv.org/abs/2305.14314
- DPO paper : https://arxiv.org/abs/2305.18290
- MergeKit : https://github.com/arcee-ai/mergekit