Lancer un fine-tuning via l'API
Vue d’ensemble du processus
Lancer un fine-tuning via l’API OpenAI se fait en trois étapes : uploader votre fichier de données, créer un job de fine-tuning, puis attendre que l’entraînement se termine. Tout passe par le SDK Python officiel.
Étape 1 : Installer et configurer le SDK
# Installation
# pip install openai
from openai import OpenAI
# Le client utilise automatiquement la variable OPENAI_API_KEY
client = OpenAI()
Assurez-vous que votre variable d’environnement OPENAI_API_KEY est définie. En production, ne codez jamais votre clé en dur dans le code.
Étape 2 : Uploader le fichier d’entraînement
# Upload du fichier d'entraînement
training_file = client.files.create(
file=open("training_data.jsonl", "rb"),
purpose="fine-tune"
)
print(f"ID du fichier : {training_file.id}")
print(f"Statut : {training_file.status}")
# Optionnel : upload du fichier de validation
validation_file = client.files.create(
file=open("validation_data.jsonl", "rb"),
purpose="fine-tune"
)
print(f"ID validation : {validation_file.id}")
Le fichier passe par une phase de traitement côté OpenAI. Attendez que le statut soit processed avant de lancer le job.
Étape 3 : Créer le job de fine-tuning
job = client.fine_tuning.jobs.create(
training_file=training_file.id,
validation_file=validation_file.id, # optionnel mais recommandé
model="gpt-5.3-mini", # ou "gpt-5.4-mini"
suffix="mon-assistant-v1" # suffixe pour identifier votre modèle
)
print(f"Job ID : {job.id}")
print(f"Statut : {job.status}")
print(f"Modèle de base : {job.model}")
Le paramètre suffix est ajouté au nom de votre modèle fine-tuné. Par exemple, si vous utilisez "mon-assistant-v1", le modèle résultant sera nommé ft:gpt-5.3-mini:votre-org::mon-assistant-v1:xxxxxxxx.
Suivre l’avancement du job
Vérifier le statut
# Récupérer le statut du job
job = client.fine_tuning.jobs.retrieve(job.id)
print(f"Statut : {job.status}")
# Statuts possibles : validating_files, queued, running, succeeded, failed, cancelled
Lister les événements
# Voir les événements du job
events = client.fine_tuning.jobs.list_events(
fine_tuning_job_id=job.id,
limit=20
)
for event in events.data:
print(f"[{event.created_at}] {event.message}")
Script de suivi complet
import time
def suivre_job(client: OpenAI, job_id: str, intervalle: int = 30):
"""Suit un job de fine-tuning jusqu'à sa complétion."""
while True:
job = client.fine_tuning.jobs.retrieve(job_id)
print(f"Statut : {job.status}")
if job.status == "succeeded":
print(f"Modèle fine-tuné : {job.fine_tuned_model}")
return job
if job.status == "failed":
print(f"Échec : {job.error}")
return job
if job.status == "cancelled":
print("Job annulé.")
return job
time.sleep(intervalle)
# Utilisation
job_final = suivre_job(client, job.id)
Utiliser le modèle fine-tuné
Une fois le job terminé avec succès, vous pouvez utiliser votre modèle exactement comme un modèle standard :
response = client.responses.create(
model=job_final.fine_tuned_model, # ex: "ft:gpt-5.3-mini:org::suffix:xxxxxxxx"
input="Bonjour, j'ai un problème avec ma commande."
)
print(response.output_text)
Gérer les jobs
# Lister tous vos jobs de fine-tuning
jobs = client.fine_tuning.jobs.list(limit=10)
for j in jobs.data:
print(f"{j.id} | {j.status} | {j.model} | {j.fine_tuned_model}")
# Annuler un job en cours
client.fine_tuning.jobs.cancel(job.id)
Coûts et durée
L’entraînement est facturé au nombre de tokens traités. La durée dépend de la taille de vos données et du nombre d’epochs :
- 50 exemples : quelques minutes
- 500 exemples : 15 à 30 minutes
- 5 000 exemples : 1 à 2 heures
Les prix exacts varient selon le modèle choisi. Consultez la page de tarification OpenAI pour les tarifs actuels.
Points clés à retenir
- Le workflow est : upload fichier, créer job, attendre, utiliser le modèle
- Ajoutez un
suffixdescriptif pour identifier facilement vos modèles - Utilisez toujours un fichier de validation pour évaluer la qualité
- Le modèle fine-tuné s’utilise exactement comme le modèle de base via l’API
- Gardez les IDs de vos jobs et modèles — vous en aurez besoin pour le versioning