LoRA est souvent la première technique à essayer quand vous voulez adapter un LLM localement. L’idée est simple : vous n’entraînez pas tout le modèle. Vous ajoutez un petit nombre de paramètres entraînables qui modifient son comportement.
Pour un développeur moyen, c’est l’approche la plus réaliste pour commencer un fine-tuning sur Mac.
Pourquoi LoRA est utile
LoRA permet de :
- réduire la mémoire nécessaire
- raccourcir le temps d’entraînement
- garder le modèle de base intact
- partager seulement les adaptateurs si besoin
Concrètement, vous conservez le modèle d’origine et vous ajoutez des adaptateurs que vous pouvez charger ou fusionner plus tard.
Étape 1 : préparer l’environnement
python -m venv .venv
source .venv/bin/activate
pip install -U mlx-lm pandas huggingface_hub "huggingface_hub[cli]"
Étape 2 : préparer le dataset
Créez au minimum :
data/
├── train.jsonl
└── valid.jsonl
Si vous partez de zéro, lisez d’abord Préparer vos données.
Étape 3 : lancer un premier entraînement
mlx_lm.lora \
--model mlx-community/Phi-3.5-mini-instruct-4bit \
--train \
--data ./data \
--adapter-path ./adapters \
--iters 200 \
--batch-size 1 \
--lora-layers 8
Ce premier run sert à valider le pipeline, pas à chercher la configuration parfaite.
Commencez avec un modèle compact et un petit nombre d’itérations. Vous apprendrez plus vite qu’en lançant tout de suite un entraînement long sur un gros modèle.
Les paramètres qui comptent vraiment au début
| Paramètre | À retenir |
|---|
--model | Choisissez un modèle que votre machine peut charger facilement |
--data | Dossier contenant train.jsonl et idéalement valid.jsonl |
--iters | Commencez bas, puis augmentez si les résultats le justifient |
--batch-size | Réduisez-le si la mémoire pose problème |
--lora-layers | Plus il est élevé, plus le coût monte |
--adapter-path | Dossier où seront écrits les adaptateurs |
Étape 4 : tester les adaptateurs
Une fois l’entraînement terminé, testez le modèle avec les adaptateurs :
mlx_lm.generate \
--model mlx-community/Phi-3.5-mini-instruct-4bit \
--adapter-path ./adapters \
--prompt "Explique LoRA à un développeur Swift."
Comparez ensuite avec le modèle de base. La bonne question n’est pas “est-ce que la sortie est impressionnante ?”, mais plutôt “est-ce que le comportement s’est rapproché de mon besoin ?”
Étape 5 : fusionner si nécessaire
Si vous voulez obtenir un artefact unique plutôt qu’un modèle + des adaptateurs séparés :
mlx_lm.fuse \
--model mlx-community/Phi-3.5-mini-instruct-4bit \
--adapter-path ./adapters \
--save-path ./my-finetuned-model
Vous pouvez ensuite utiliser ce dossier comme un modèle local classique.
Surveillez surtout :
- la
train loss
- la
val loss
- la stabilité générale de l’entraînement
Si la perte d’entraînement baisse mais que la validation se dégrade, vous êtes probablement en train de suradapter le modèle à vos données.
Bonnes pratiques simples
- commencez avec un modèle petit ou moyen
- testez votre dataset avant tout entraînement long
- gardez une validation séparée
- comparez toujours le modèle de base et le modèle adapté
- ne changez pas dix paramètres à la fois
Quand passer à QLoRA
Passez à QLoRA si :
- la mémoire devient votre contrainte principale
- vous voulez fine-tuner directement un modèle quantifié
- vous devez rester sur une machine plus limitée