Module 4 — Affinage économe en paramètres
Cent gigaoctets pour un modèle de 7 milliards, c'était le verdict du module 3. La question qui a occupé la recherche entre 2019 et 2022 tenait en une phrase : peut-on obtenir 95 % du gain d'un affinage complet en ne touchant qu'à 1 % des poids ? La réponse est oui, elle porte un nom — PEFT pour Parameter-Efficient Fine-Tuning — et elle regroupe une famille de méthodes dont LoRA est aujourd'hui la plus utilisée. Ce module dresse le paysage avant d'entrer dans LoRA en détail au module 5.
L'idée commune à toute la famille PEFT
Le pré-entraînement d'un grand modèle a déjà appris l'essentiel du langage, du raisonnement et du monde. L'affinage n'a pas à réapprendre ces capacités, il doit seulement les spécialiser. Or spécialiser un modèle massif en modifiant tous ses poids revient à réécrire une bibliothèque entière pour ajouter un chapitre. Toutes les méthodes PEFT partent du même constat : il vaut mieux geler la bibliothèque et ne modifier qu'un petit sous-ensemble de poids soigneusement choisi.
Trois conséquences directes de ce choix guident la comparaison des méthodes. La mémoire nécessaire s'effondre, car les gradients et les états d'optimiseur ne sont calculés que pour le petit sous-ensemble modifiable — quelques millions de paramètres au lieu de plusieurs milliards. L'oubli catastrophique disparaît par construction, puisque les poids d'origine ne bougent pas. Et un même modèle de base peut porter plusieurs adaptateurs différents, chacun spécialisé pour une tâche, échangés à la volée à l'inférence.
Les trois familles à connaître
Trois familles se distinguent selon où elles insèrent leur petit ensemble de paramètres entraînables.
Adaptateurs — le berceau, publié en 2019 par Houlsby et coll. On insère entre les couches existantes des petits modules à goulot d'étranglement : une descente de dimension, une non-linéarité, une remontée. Les poids du modèle sont gelés, seuls les adaptateurs s'entraînent. C'est la méthode historique, encore utilisée dans certaines architectures spécialisées.
Ajustement de préfixe et ajustement de consigne (prefix tuning, prompt tuning) — au lieu d'ajouter des couches, on ajoute des jetons virtuels entraînables au début de la séquence d'entrée. Le modèle traite ces jetons comme n'importe quel autre, et leur valeur apprise oriente l'ensemble du calcul vers la tâche. Séduisant théoriquement, cette famille peine à égaler LoRA en pratique sur les modèles au-delà de quelques milliards de paramètres.
Adaptateurs de rang faible (LoRA, publié en 2021 par Hu et coll.) — la méthode aujourd'hui dominante. Elle observe que la mise à jour induite par l'affinage sur une matrice de poids est de faible rang effectif, et la remplace par un produit de deux petites matrices. Le module 5 lui est entièrement consacré. Sa variante quantifiée QLoRA (module 6) fait tenir un affinage d'un modèle de 7 milliards sur un GPU de 24 Go.
Comparaison rapide
| Méthode | Paramètres entraînés | Modification du modèle | Coût mémoire relatif |
|---|---|---|---|
| Affinage complet | 100 % | tous les poids | 1× (référence) |
| Adaptateurs | 0,5 à 4 % | couches insérées | 0,3× environ |
| Ajustement de consigne | moins de 0,1 % | jetons virtuels ajoutés | 0,2× environ |
| LoRA | 0,1 à 1 % | mise à jour de rang faible sur certaines matrices | 0,25× environ |
| QLoRA | 0,1 à 1 % | LoRA sur modèle en 4 bits | 0,10× environ |
Les gains de mémoire ne se retrouvent pas identiquement dans les gains de qualité : sur nos comptes rendus de réunion, LoRA et un affinage complet donnent une qualité perceptivement indiscernable dans la plupart des cas, tandis que l'ajustement de consigne reste en retrait.
La bibliothèque PEFT en pratique
La bibliothèque de référence s'appelle simplement peft, maintenue par Hugging Face aux côtés de transformers. Son geste central tient en trois lignes : on charge le mod èle de base, on définit une configuration LoRA, on enveloppe le modèle.
from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model
modele = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-Instruct-v0.3",
torch_dtype="bfloat16",
device_map="auto",
)
config = LoraConfig(
r=16, # rang de la decomposition, module 5
lora_alpha=32, # facteur d'echelle, module 5
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)
modele_peft = get_peft_model(modele, config)
modele_peft.print_trainable_parameters()
# trainable params: 6,815,744 || all params: 7,254,867,968 || trainable%: 0.09
La dernière ligne concentre l'essentiel : sur ce modèle de 7,25 milliards, on entraîne 6,8 millions de valeurs, soit moins d'un dixième de pour cent. C'est exactement ce que dit la théorie PEFT : quasiment tout le savoir reste figé, seul un mince ajustement bouge.
Le reste de la boucle d'entraînement est celui de Trainer ou de SFTTrainer de la bibliothèque TRL, présenté au module 7. Une différence importante à retenir dès maintenant : la sauvegarde ne conserve que le poids de l'adaptateur — quelques mégaoctets — pas le modèle complet. C'est ce qui rend la publication et l'échange d'adaptateurs si légers.
Ce qui est gelé, ce qui ne l'est pas
Une confusion fréquente concerne le tokeniseur et l'ajout de jetons spéciaux. Rien dans PEFT ne modifie le tokeniseur du modèle : si votre jeu contient un jeton spécial neuf — un délimiteur métier, par exemple — vous devez l'ajouter avant PEFT et entraîner ses plongements. Cela se fait en marquant modules_to_save=["embed_tokens", "lm_head"] dans la configuration LoRA. Sans cette précaution, le modèle recevra pendant l'inférence un jeton dont il ignore la représentation, et son comportement sera imprévisible.
Le principal atout opérationnel de PEFT tient en une phrase : plusieurs adaptateurs peuvent partager le même modèle de base. Vous pouvez déployer un seul modèle Mistral 7B sur votre serveur et y attacher à la demande l'adaptateur comptes-rendus, l'adaptateur resumes-executifs, l'adaptateur redaction-mails-clients. Le module 9 revient sur ce mode de déploiement et sur le passage d'un adaptateur à l'autre au moment de l'inférence.
En résumé
- Toutes les méthodes PEFT gèlent le modèle de base et n'entraînent qu'un mince ensemble de poids ; la mémoire s'effondre et l'oubli catastrophique disparaît.
- Trois familles : adaptateurs insérés entre couches, ajustement de consigne avec jetons virtuels, LoRA avec mise à jour de rang faible.
- LoRA est aujourd'hui le choix par défaut ; sa variante quantifiée QLoRA rend l'affinage praticable sur GPU grand public.
- La bibliothèque
pefts'intègre àtransformersen trois lignes, ne sauvegarde que les poids de l'adaptateur, et permet de servir plusieurs adaptateurs avec un seul modèle de base.
Module suivant : LoRA en détail — la décomposition en deux matrices, le rôle de et de , les modules à cibler.