C'est quoi le fine-tuning ?

Découvrez ce qu'est le fine-tuning.

Publié le par Gabriel Trouvé (mis à jour le )

15 minutes

À force d'utiliser un LLM pour une tâche précise, votre prompt ressemble à un cahier des charges, avec des consignes pour le ton, la réponse type, des interdits, etc. Sauf que si vous oubliez de remettre vos consignes dans un prompt, le modèle reprend ses habitudes dès qu'il en a l'occasion.
Au lieu de répéter les mêmes consignes à chaque appel, le mieux serait de les intégrer directement au modèle.

C'est quoi le fine-tuning ?

En français, on pourrait dire "réglage fin". L'idée est de reprendre un modèle déjà entraîné, et de poursuivre son entraînement sur un petit jeu de données ciblées afin de modifier son comportement.

Imaginez un imitateur qui prépare un personnage. Il n'apprend rien sur le monde : il écoute des enregistrements du personnage pour s'imprégner de sa façon de parler (tournures, rythme, tics, etc.). Une fois terminé, il peut parler comme cette personne, peu importe le sujet. Il n'a pas gagné en connaissances, mais s'exprime différemment.

Avec le fine-tuning, le modèle conserve tout ce qu'il a appris pendant son entraînement initial, et on ajuste les paramètres internes pour qu'il adapte un ton, un format de sortie, ou un jargon métier.

À noter

Le fine-tuning modifie la façon de répondre du modèle, pas ses connaissances du moment. Pour brancher un modèle sur des informations récentes ou privées qui évoluent, la bonne approche reste le RAG, dont nous avons parlé dans notre article C'est quoi le RAG ?.

Le RAG donne des connaissances, le fine-tuning donne des réflexes.

Vous utilisez un modèle fine-tuné tous les jours

Un modèle de langage sorti de son entraînement initial ne sait faire qu'une chose : deviner la suite d'un texte. Il complète simplement du texte.

Le modèle est ensuite entraîné sur des milliers d'exemples de conversations rédigées par des humains. C'est ce qu'a fait OpenAI en 2022 pour transformer GPT-3 en assistant : les testeurs préféraient les réponses d'une version fine-tunée à celles du GPT-3 original. C'est comme ça que ChatGPT est né 🤗.

Vous pouvez le constater par vous-même : Mistral publie ses modèles ouverts en plusieurs versions sur Hugging Face. Prenez la famille Ministral 3, vous retrouverez Ministral-3-14B-Base-2512 (la machine à compléter), et Ministral-3-14B-Instruct-2512 qui est la version fine-tunée pour dialoguer.

La prochaine fois que Le Chat vous répond poliment, dites-vous que cette politesse est le fruit d'un fine-tuning.

Prompt, RAG ou fine-tuning : comment choisir ?

Plusieurs leviers permettent d'adapter un LLM à nos besoins, mais leurs rôles sont différents.

Le prompt

Ici, nous sommes vraiment au moment de la requête. Une simple modification sur une phrase et le comportement change. Un prompt bien écrit règle beaucoup de choses...

Le RAG

Quand le problème n'est pas le comportement mais ses connaissances (documents internes, données récentes, etc.), le RAG permet au LLM de disposer des informations à jour. J'en parlais plus haut, mais n'hésitez pas à aller lire notre article sur le sujet.

Le fine-tuning

Il entre en jeu quand un comportement spécifique doit devenir permanent :

  • Un ton et un format constants

  • Un jargon métier

  • Une tâche répétitive, par exemple, reformuler dans un style précis

À noter

Le fine-tuning est lourd : il faut construire un dataset, entraîner puis maintenir le modèle obtenu. Si votre problème se règle avec un prompt ou un RAG, tant mieux pour vous 😁. Et rien n'empêche de combiner les trois : un bon prompt pour cadrer la tâche, un modèle fine-tuné à votre ton (ou votre format de sortie), branché sur un RAG pour des connaissances à jour.

Le dataset : la matière première du fine-tuning

Pour le jeu de données, le format standard est le JSONL, c'est-à-dire un objet JSON par ligne, chacun contenant une conversation modèle.

Prenons le cas de Patrick, jeune comptable dynamique qui croule sous les questions de ses collègues. On aimerait un assistant qui répond comme Patrick : direct, avec la procédure exacte.

import json


exemples = [
    {
        "question": "Comment je me fais rembourser mes frais de restaurant ?",
        "reponse": "Dépose ton justificatif dans l'outil notes de frais avant le 25 du mois, sinon le remboursement glisse au mois suivant. Et coche bien la case TVA récupérable.",
    },
    {
        "question": "Le client n'a toujours pas payé, je fais quoi ?",
        "reponse": "Premier rappel automatique à J+15 via l'outil de facturation. S'il dépasse J+30, transfère-moi le dossier, c'est moi qui prends le relais.",
    },
    {
        "question": "Je peux payer ce fournisseur avec la carte de l'entreprise ?",
        "reponse": "Non. Tout passe par un bon de commande validé, sans exception. Envoie-moi le devis et je te génère le bon dans la journée.",
    },
]

with open("train.jsonl", "w", encoding="utf-8") as f:
    for exemple in exemples:
        ligne = {
            "messages": [
                {"role": "user", "content": exemple["question"]},
                {"role": "assistant", "content": exemple["reponse"]},
            ]
        }
        f.write(json.dumps(ligne, ensure_ascii=False) + "\n")

print("Dataset écrit dans train.jsonl")
PYTHON

Chaque ligne du fichier train.jsonl est une conversation complète au format messages, avec un user et un assistant.

{"messages": [{"role": "user", "content": "Comment je me fais rembourser mes frais de restaurant ?"}, {"role": "assistant", "content": "Dépose ton justificatif dans l'outil notes de frais avant le 25 du mois, sinon le remboursement glisse au mois suivant. Et coche bien la case TVA récupérable."}]}
{"messages": [{"role": "user", "content": "Le client n'a toujours pas payé, je fais quoi ?"}, {"role": "assistant", "content": "Premier rappel automatique à J+15 via l'outil de facturation. S'il dépasse J+30, transfère-moi le dossier, c'est moi qui prends le relais."}]}
{"messages": [{"role": "user", "content": "Je peux payer ce fournisseur avec la carte de l'entreprise ?"}, {"role": "assistant", "content": "Non. Tout passe par un bon de commande validé, sans exception. Envoie-moi le devis et je te génère le bon dans la journée."}]}
JSON

À noter

Trois exemples ne suffiront évidemment pas. Mais pas besoin de millions de lignes non plus. On parlera de 50 à 100 exemples pour un premier effet, et de 200 à 500 pour la plupart des tâches.

LoRA et QLoRA : le fine-tuning pour tous

L'approche historique, le full fine-tuning, ajuste tous les poids du modèle, ce qui est extrêmement coûteux. Je vous invite d'ailleurs à aller lire le papier LoRA sur le sujet pour vous rendre compte de ce que le full fine-tuning implique.

C'est là qu'intervient le Low-Rank Adaptation (LoRA) : on gèle les poids du modèle d'origine, et on greffe des petites matrices entraînables. Pendant l'entraînement, il n'y a que ces dernières qui vont bouger.

En 2023, le papier QLoRA ajoute une astuce supplémentaire : compresser le modèle avant d'y greffer les matrices. On appelle ça la quantization : les milliards de nombres qui composent le modèle sont compressés avec moins de précision, avec une perte à peine perceptible.

Fine-tuner en 2026

Le fine-tuning déménage des API propriétaires pour se faire du côté des modèles open-weight. En effet, le 7 mai 2026, OpenAI a annoncé la fermeture progressive de sa plateforme de fine-tuning. Côté Mistral, la documentation classe le fine-tuning parmi les fonctionnalités dépréciées.

La tendance est de télécharger un modèle ouvert et de l'entraîner vous-même. L'écosystème est d'ailleurs présent : TRL et PEFT de Hugging Face, unsloth, et du côté de chez Apple on retrouve MLX.

Dans un prochain article, on va essayer de fine-tuner un modèle en local, sur un MacBook Pro M1 avec 8 Go de RAM. Est-ce que ça va passer ? Réponse très vite 🫡.

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.