Quand fine-tuner un modèle ?
Le fine-tuning consiste à spécialiser un modèle pré-entraîné sur vos propres données. Avant de fine-tuner, vérifiez que le prompt engineering seul ne suffit pas. Le fine-tuning est pertinent quand :
- Vous avez besoin d'un style ou ton très spécifique
- Le prompt engineering atteint ses limites (trop d'exemples nécessaires)
- Vous voulez réduire la taille du prompt (et donc les coûts)
- Vous avez des centaines d'exemples de qualité
Modèles disponibles pour le fine-tuning
- gpt-4o-mini : Le plus économique, excellent rapport qualité/prix
- gpt-4o : Pour les tâches nécessitant les meilleures performances
Préparer les données d'entraînement
Format JSONL
Chaque ligne est un exemple de conversation complet :
{"messages": [{"role": "system", "content": "Tu es un assistant de support technique."}, {"role": "user", "content": "Mon imprimante ne fonctionne pas"}, {"role": "assistant", "content": "Je vais vous aider. Commençons par vérifier que l'imprimante est bien allumée et connectée..."}]}
{"messages": [{"role": "system", "content": "Tu es un assistant de support technique."}, {"role": "user", "content": "Je n'arrive pas à installer le driver"}, {"role": "assistant", "content": "Voici la procédure d'installation étape par étape..."}]}Nombre d'exemples recommandé
- Minimum : 10 exemples
- Recommandé : 50-100 pour de bons résultats
- Optimal : 200+ pour une spécialisation poussée
Qualité des données
- Chaque exemple doit être un échange idéal
- Diversifiez les cas d'usage couverts
- Assurez la cohérence du format et du ton
- Vérifiez qu'il n'y a pas de contradictions
Lancer un fine-tuning
import OpenAI from "openai";
import fs from "fs";
const client = new OpenAI();
// 1. Uploader le fichier d'entraînement
const file = await client.files.create({
file: fs.createReadStream("training_data.jsonl"),
purpose: "fine-tune"
});
// 2. Créer le job de fine-tuning
const job = await client.fineTuning.jobs.create({
training_file: file.id,
model: "gpt-4o-mini-2024-07-18",
hyperparameters: {
n_epochs: 3
}
});
// 3. Suivre l'avancement
const status = await client.fineTuning.jobs.retrieve(job.id);
console.log(status.status); // running, succeeded, failedUtiliser le modèle fine-tuné
const response = await client.chat.completions.create({
model: "ft:gpt-4o-mini-2024-07-18:my-org::abc123",
messages: [
{ role: "user", content: "Mon écran reste noir" }
]
});Hyperparamètres
- n_epochs : Nombre de passes sur les données (1-10, défaut auto)
- batch_size : Taille des lots (défaut auto)
- learning_rate_multiplier : Ajustement du taux d'apprentissage (défaut auto)
Dans la plupart des cas, les valeurs par défaut (auto) fonctionnent bien.
Évaluation et itération
- Fournissez un fichier de validation pour suivre les métriques pendant l'entraînement
- Comparez avec le modèle de base sur un jeu de test
- Itérez sur les données plutôt que sur les hyperparamètres
- Ajoutez des exemples pour les cas d'usage mal gérés
Coûts
Le fine-tuning a un coût d'entraînement (par token dans les données) plus un coût d'inférence légèrement supérieur au modèle de base. Consultez la page de tarification pour les prix à jour.