Fine-tuning texte et vision

Avertissement

Déprécié

Cette fonctionnalité est dépréciée et n'est plus activement supportée.

Le fine-tuning vous permet d'adapter un modèle de langage pré-entraîné à vos besoins spécifiques en l'entraînant sur votre jeu de données. Ce guide explique comment affiner des modèles texte et vision, de la préparation de vos données à l'entraînement, que vous cherchiez à améliorer la compréhension d'un domaine spécifique ou à vous adapter à un style conversationnel unique.

Vous pouvez effectuer le fine-tuning directement dans AI Studio ou via notre API.

Avant de commencer

Avant de commencer

Jeu de données

Pour affiner un modèle, vous devez fournir un jeu de données contenant les données sur lesquelles vous souhaitez entraîner le modèle. Il est également recommandé de disposer d'un jeu de validation et d'un jeu de test.

Le jeu de données doit être dans un format spécifique, et vous pouvez le télécharger sur Mistral Cloud avant de lancer la tâche de fine-tuning.

Les données doivent être stockées dans des fichiers JSON Lines (.jsonl), qui permettent de stocker plusieurs objets JSON, chacun sur une nouvelle ligne.

Les jeux de données SFT doivent suivre un format de suivi d'instructions représentant une conversation utilisateur-assistant. Chaque échantillon de données JSON doit soit contenir uniquement des messages utilisateur et assistant, soit inclure une logique d'appel de fonction.

Données textuelles conversationnelles uniquement entre l'utilisateur et l'assistant, qui peuvent être à un ou plusieurs tours.

{
  "messages": [
    {
      "role": "user",
      "content": "Interaction utilisateur n°1"
    },
    {
      "role": "assistant",
      "content": "Interaction bot n°1"
    },
    {
      "role": "user",
      "content": "Interaction utilisateur n°2"
    },
    {
      "role": "assistant",
      "content": "Interaction bot n°2"
    }
  ]
}
  • Les données conversationnelles doivent être stockées sous la clé "messages" sous forme de liste.
  • Chaque élément de la liste est un dictionnaire contenant les clés "content" et "role". "role" est une chaîne de caractères : "system", "user", "assistant" ou "tool".
  • Le calcul de la perte est effectué uniquement sur les tokens correspondant aux messages de l'assistant ("role" == "assistant").

Bien que le fine-tuning textuel couvre de nombreux cas d'usage, vous pouvez également affiner les capacités de vision de nos modèles. Cela vous permet de créer des modèles capables de comprendre et de générer des réponses basées à la fois sur des entrées textuelles et visuelles.

Notez que les fichiers doivent être au format JSONL, ce qui signifie que chaque objet JSON doit être aplati sur une seule ligne, et chaque objet JSON se trouve sur une nouvelle ligne.

Exemple de fichier .jsonl brut :

{"messages": [{"role": "user","content": "..."},{"role": "assistant","content": "..."},...]}
{"messages": [{"role": "user","content": "..."},{"role": "assistant","content": "..."},...]}
{"messages": [{"role": "user","content": "..."},{"role": "assistant","content": "..."},...]}
{"messages": [{"role": "user","content": "..."},{"role": "assistant","content": "..."},...]}
...
Gestion des tâches

Gestion des tâches

Créer et gérer les tâches de fine-tuning

Pour créer votre modèle personnalisé, vous devez créer une tâche de fine-tuning. Vous pouvez gérer entièrement les tâches via notre API, de la création au démarrage, en passant par le suivi et l'annulation.

Un travail de fine-tuning correspond à une seule exécution d'entraînement. Vous pouvez créer un travail de fine-tuning avec les paramètres suivants :

Créer un travail de fine-tuning

Créer un travail de fine-tuning

  • model : le modèle spécifique que vous souhaitez affiner. Les choix sont :
    • Texte uniquement :
      • open-mistral-7b
      • mistral-small-latest
      • codestral-latest
      • open-mistral-nemo
      • mistral-large-latest
      • ministral-8b-latest
      • ministral-3b-latest
    • Vision :
      • pixtral-12b-latest
  • training_files : une collection d'identifiants de fichiers d'entraînement, qui peut être constituée d'un seul fichier ou de plusieurs fichiers
  • validation_files : une collection d'identifiants de fichiers de validation, qui peut être constituée d'un seul fichier ou de plusieurs fichiers
  • hyperparameters : deux hyperparamètres ajustables, "training_steps" et "learning_rate", que vous pouvez modifier.
  • auto_start :
    • auto_start=True : Votre travail sera lancé immédiatement après validation.
    • auto_start=False (par défaut) : Vous pouvez démarrer manuellement l'entraînement après validation en envoyant une requête POST à /fine_tuning/jobs/<uuid>/start.
  • integrations : les intégrations externes que nous prenons en charge, comme Weights and Biases pour le suivi des métriques pendant l'entraînement.
# create a fine-tuning job
created_jobs = client.fine_tuning.jobs.create(
    model="open-mistral-7b",
    training_files=[{"file_id": training_data.id, "weight": 1}],
    validation_files=[validation_data.id],
    hyperparameters={
        "training_steps": 10,
        "learning_rate":0.0001
    },
    auto_start=False,
#   integrations=[
#       {
#           "project": "finetuning",
#           "api_key": "WANDB_KEY",
#       }
#   ]
)
Statut du travail

Statut du travail

Après avoir créé un travail de fine-tuning, vous pouvez vérifier le statut du travail avec :

client.fine_tuning.jobs.get(job_id = created_jobs.id)
Démarrer un travail de fine-tuning

Démarrer un travail de fine-tuning

Initialement, le statut du travail sera "QUEUED". Après un court moment, le statut passera à "VALIDATED". À ce stade, vous pouvez démarrer le travail de fine-tuning :

# start a fine-tuning job
client.fine_tuning.jobs.start(job_id = created_jobs.id)

created_jobs
Modèle affiné

Modèle affiné

Utiliser et supprimer les modèles affinés

Une fois votre tâche de fine-tuning terminée, vous pouvez utiliser votre modèle personnalisé affiné dans vos applications.

Utiliser un modèle affiné

Utiliser un modèle affiné

Voici un exemple d'utilisation d'un modèle affiné pour classifier vos données.

# You will be able to see the fine-tuned model name via `retrieved_job.fine_tuned_model`
chat_response = client.chat.complete(
    model=retrieved_job.fine_tuned_model,
    messages = [{"role":'user', "content":'What is the best French cheese?'}]
)
Supprimer un modèle affiné

Supprimer un modèle affiné

Vous pouvez supprimer un modèle affiné si vous n'en avez plus besoin.

client.models.delete(model_id=retrieved_job.fine_tuned_model)
FAQ

FAQ