Fine-tuning LoRA d'un LLM : guide pratique pour l'entreprise
Customiser un LLM open-source sans réentraîner les 70 milliards de paramètres, c'est le pari de LoRA — Low-Rank Adaptation. Pourquoi cette technique est devenue le standard industriel, comment choisir le bon rank, et ce qu'il faut savoir avant de lancer un premier training.
Le contexte : pourquoi fine-tuner plutôt que prompter ?
Un LLM généraliste (Llama 3, Mistral, Qwen) fait très bien 95 % des tâches en zero-shot. Les 5 % restants — ton de marque spécifique, vocabulaire métier pointu, génération de formats structurés exotiques, compliance réglementaire — sont soit très coûteux en prompt engineering, soit impossibles à garantir en production. Le fine-tuning crée un modèle qui répond par défaut avec le bon style, sans avoir à saturer le contexte en instructions.
Mais fine-tuner un modèle de 8B paramètres en "full fine-tuning" demande plusieurs GPU A100, des dizaines d'heures, et un pipeline MLOps mature. C'est là que LoRA change la donne.
LoRA : qu'est-ce que ça change techniquement ?
LoRA (Low-Rank Adaptation, Hu et al., 2021) repose sur une hypothèse simple : les mises à jour de poids pendant un fine-tuning ont une structure de rang faible. Au lieu d'apprendre une matrice dense ΔW de taille d×d (des millions de paramètres), on apprend deux matrices A (d×r) et B (r×d) avec r ≪ d, telles que ΔW ≈ A·B.
Pour un modèle Llama 3 8B avec r=16 :
- Paramètres entraînables : ~21 millions (au lieu de 8 milliards).
- VRAM nécessaire : 16 Go au lieu de 80 Go.
- Temps d'entraînement : ×5 à ×10 plus rapide.
- Stockage du "delta" : un checkpoint de 40 Mo au lieu de 16 Go.
Et surtout : on peut entraîner plusieurs adaptateurs LoRA spécialisés et les hot-swapper à l'inférence selon la tâche. Un seul modèle de base, N spécialisations.
Les hyperparamètres qui comptent vraiment
Rank (r)
Le rank contrôle la capacité de l'adaptateur. Règle de pouce :
- r=4 à 8 : tâches simples (classification, extraction, reformulation).
- r=16 à 32 : tâches plus riches (style transfer, domaine métier, RAG-augmenté).
- r=64+ : rare, utile pour des langues peu représentées ou des changements profonds de comportement.
Au-delà, c'est souvent du surcoût sans gain mesurable.
Alpha (α)
Alpha est un facteur d'échelle appliqué à A·B avant injection dans le modèle. La convention usuelle : α = 2r (donc α=32 pour r=16). Plus α est élevé, plus l'adaptateur "pèse" dans la sortie — à manipuler avec prudence, sous peine de dégrader les capacités générales du modèle.
Target modules
Quels modules du transformer injecter avec LoRA ? La recherche suggère de cibler au minimum q_proj et v_proj dans les couches d'attention. Pour des gains marginaux supplémentaires, ajouter k_proj, o_proj, et les projections MLP. Attention au coût en VRAM et temps.
Learning rate
Avec LoRA, un LR plus élevé est possible (1e-4 à 3e-4) car seuls les adaptateurs apprennent, sans risque de "casser" le modèle de base. En full fine-tuning, on resterait à 1e-5 ou 2e-5.
Configuration exemple (Llama 3 8B + PEFT)
# config.yaml
base_model: "meta-llama/Meta-Llama-3-8B-Instruct"
adapter: LoRA
rank: 16
alpha: 32
dropout: 0.05
target_modules:
- q_proj
- k_proj
- v_proj
- o_proj
learning_rate: 2.0e-4
batch_size: 4
gradient_accumulation_steps: 4
num_epochs: 3
warmup_ratio: 0.03
lr_scheduler: cosine
training_examples: 2,000 – 10,000
Dataset : le vrai goulot d'étranglement
Une erreur récurrente : sous-estimer la qualité du dataset de fine-tuning. 500 exemples parfaits battent 50 000 exemples bruités. Nos règles pour la curation :
- Diversité de format — varier longueurs, structures, niveaux de détail attendus.
- Cohérence stylistique — si c'est pour un ton spécifique, tous les exemples doivent le refléter.
- Déduplication sémantique (via embedding similarity, pas juste hash exact).
- Validation humaine d'au moins 10 % des exemples avant training.
- Hold-out set de 200 exemples jamais vus par le modèle pour l'évaluation finale.
Évaluation : ne pas se contenter de la loss
La training loss descend toujours. Elle ne dit rien de l'utilité du modèle. Nous évaluons systématiquement :
- Benchmarks publics (MMLU, HellaSwag) avant/après — pour vérifier qu'on n'a pas dégradé les capacités générales.
- Eval métier custom (50–200 exemples notés par des humains) — le seul indicateur qui compte pour le business.
- LLM-as-a-judge (GPT-4 ou Claude note la sortie du modèle fine-tuné) — utile pour scaler l'évaluation, mais avec prudence (biais systématique).
- A/B test en production sur un segment de trafic — la vérité terrain.
Trois pièges fréquents
1. Catastrophic forgetting
Le modèle oublie ses capacités générales pendant le fine-tuning. Solution : mélanger le dataset de fine-tuning avec un replay buffer de données génériques (10 à 20 %), ou limiter le nombre d'époques.
2. Sur-apprentissage sur des patterns du dataset
Si tous vos exemples commencent par "Cher client," le modèle va le reproduire partout, même quand ce n'est pas pertinent. Diversifier les formats d'ouverture et de clôture.
3. Quantization + LoRA : attention à l'ordre
QLoRA (LoRA avec base model quantizé en 4-bit) est très efficace en VRAM mais nécessite des adaptateurs entraînés sur la version quantizée. Déployer un adaptateur entraîné en fp16 sur un modèle 4-bit est le meilleur moyen de dégrader silencieusement la qualité.
LoRA a démocratisé le fine-tuning. Mais la technique n'est rien sans un dataset curé, une évaluation sérieuse et un pipeline d'inférence qui tient la charge.
Ce qu'il faut retenir
- LoRA est le standard industriel pour fine-tuner un LLM en entreprise, à la fois pour le coût et la flexibilité.
- r=16, α=32, dropout=0.05 est un point de départ solide pour 80 % des cas.
- La qualité du dataset domine tous les autres facteurs.
- L'évaluation métier compte plus que les benchmarks publics — construisez votre hold-out.
- Plusieurs adaptateurs spécialisés + un modèle de base = pattern de déploiement le plus flexible.
Un projet de fine-tuning à cadrer ?
De la curation du dataset au déploiement, on couvre toute la chaîne.