Régler des modèles Gemini à l'aide du réglage supervisé

Ce document explique comment régler un modèle Gemini à l'aide de l'affinage supervisé.

Avant de commencer

Créer un job de réglage

Vous pouvez créer un job d'affinage supervisé à l'aide de la console Google Cloud, de l'API ou du SDK Vertex AI pour Python. Pour obtenir des conseils sur les configurations de réglage, consultez la page Configurations recommandées.

REST

Pour créer un job de réglage de modèle, envoyez une requête POST à l'aide de la méthode tuningJobs.create. Notez que certains paramètres ne sont pas compatibles avec tous les modèles. Veillez à n'inclure que les paramètres applicables au modèle que vous réglez.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : l'ID de votre projet.
  • TUNING_JOB_REGION : région dans laquelle le job de réglage est exécuté. Il s'agit également de la région par défaut dans laquelle le modèle réglé est importé.
  • BASE_MODEL : nom du modèle de base à régler. Valeurs autorisées : gemini-1.0-pro-002
  • TRAINING_DATASET_URI : URI Cloud Storage de votre ensemble de données d'entraînement. L'ensemble de données doit être mis en forme en tant que fichier JSONL. Pour de meilleurs résultats, fournissez au moins 100 à 500 exemples. Pour en savoir plus, consultez la page À propos du réglage supervisé des ensembles de données.
  • VALIDATION_DATASET_URI (facultatif) : URI Cloud Storage du fichier de votre ensemble de données de validation.
  • EPOCH_COUNT (facultatif) : nombre d'époques à entraîner. Laissez cette valeur non définie pour utiliser la valeur recommandée.
  • ADAPTER_SIZEFacultatif : taille de l'adaptateur à utiliser pour la tâche d'affinage.
  • LEARNING_RATE_MULTIPLIER (facultatif) : un multiplicateur à appliquer au taux d'apprentissage recommandé. Laissez cette valeur non définie pour utiliser la valeur recommandée.
  • TUNED_MODEL_DISPLAYNAME (facultatif) : nom à afficher pour le modèle réglé. Si ce paramètre n'est pas défini, un nom aléatoire est généré.

Méthode HTTP et URL :

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

Corps JSON de la requête :

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "training_dataset_uri": "TRAINING_DATASET_URI",
      "validation_dataset_uri": "VALIDATION_DATASET_URI",
      "hyper_parameters": {
          "epoch_count": EPOCH_COUNT,
          "adapter_size": ADAPTER_SIZE,
          "learning_rate_multiplier": LEARNING_RATE_MULTIPLIER
      },
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME,
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Exemple de commande curl

PROJECT_ID=myproject
LOCATION=us-central1

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/tuningJobs" \
-d \
$'{
   "baseModel": "gemini-1.0-pro-002",
   "supervisedTuningSpec" : {
      "training_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
      "validation_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl"
   },
   "tunedModelDisplayName": "tuned_gemini_pro"
}'

Python


import time

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

sft_tuning_job = sft.train(
    source_model="gemini-1.0-pro-002",
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl",
    epochs=4,
    learning_rate_multiplier=1.0,
    tuned_model_display_name="tuned_gemini_pro",
)

# Polling for job completion
while not sft_tuning_job.has_ended:
    time.sleep(60)
    sft_tuning_job.refresh()

print(sft_tuning_job.tuned_model_name)
print(sft_tuning_job.tuned_model_endpoint_name)
print(sft_tuning_job.experiment)

Console

Pour régler un modèle de texte avec affinage supervisé à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Cliquez sur Créer un modèle réglé.

  3. Sous Méthode de réglage, sélectionnez la case d'option Réglage supervisé.

  4. Sous Informations sur le modèle, configurez les éléments suivants :

    1. Dans le champ Nom du modèle réglé, saisissez un nom pour votre nouveau modèle réglé, d'une longueur maximale de 128 caractères.
    2. Dans le champ Modèle de base, sélectionnez gemini-1.0-pro-002.
    3. Dans le menu déroulant Région, sélectionnez la région où le job de réglage de pipeline s'exécute et où le modèle réglé est déployé.
  5. Facultatif : développez la flèche du menu déroulant Options avancées et configurez les éléments suivants :

    1. Dans le champ Nombre d'époques, saisissez le nombre d'étapes à exécuter pour le réglage du modèle.
    2. Dans le champ Taille de l'adaptateur, saisissez la taille de l'adaptateur à utiliser pour le réglage du modèle.
    3. Dans le champ Multiplicateur de taux d'apprentissage, saisissez la taille de pas à chaque itération. La valeur par défaut est de 1.
  6. Cliquez sur Continuer.

    La page Régler l'ensemble de données s'affiche.

  7. Pour importer un fichier d'ensemble de données, sélectionnez l'une des options suivantes :

    1. Si vous n'avez pas encore importé d'ensemble de données, sélectionnez la case d'option Importer un fichier dans Cloud Storage.
    2. Dans le champ Sélectionner un fichier JSONL, cliquez sur Parcourir et sélectionnez votre fichier d'ensemble de données.
    3. Dans le champ Emplacement de l'ensemble de données, cliquez sur Parcourir et sélectionnez le bucket Cloud Storage dans lequel vous souhaitez stocker le fichier de votre ensemble de données.
    4. Si le fichier de votre ensemble de données se trouve déjà dans un bucket Cloud Storage, cochez la case d'option Fichier existant dans Cloud Storage.
    5. Dans le champ Chemin d'accès du fichier Cloud Storage, cliquez sur Parcourir et sélectionnez le bucket Cloud Storage où se trouve le fichier de votre ensemble de données.
  8. (Facultatif) Pour obtenir des métriques de validation pendant l'entraînement, cliquez sur le bouton Activer la validation du modèle.

    1. Dans le fichier Ensemble de données de validation, saisissez le chemin d'accès Cloud Storage de votre ensemble de données de validation.
  9. Cliquez sur Commencer le réglage.

    Votre nouveau modèle s'affiche sous la section Modèles réglés Gemini Pro sur la Page "Régler et distiller". Une fois le réglage du modèle terminé, l'état indique Réussite.

Le tableau suivant présente les configurations recommandées pour le réglage d'un modèle de base par tâche :

Tâche Nombre d'exemples dans l'ensemble de données Nombre d'époques
Classification 500+ 2-4
Synthèse + de 1 000 2-4
Questions-réponses extractives 500+ 2-4
Chat + de 1 000 2-4

Pour le nombre d'époques, nous vous suggérons d'essayer plusieurs valeurs pour obtenir les meilleures performances sur un ensemble de données particulier. L'augmentation du nombre d'époques peut fournir de meilleurs résultats. Toutefois, vous devez éviter le surapprentissage, en particulier lorsque votre ensemble de données est petit, et réduire le nombre d'époques, le cas échéant.

Pour les tâches de classification, la complexité de la tâche augmente avec le nombre de classes. Pour un grand nombre de classes, vous aurez peut-être besoin d'ensembles de données plus volumineux.

Afficher la liste des jobs de réglage

Vous pouvez afficher la liste des jobs de réglage dans votre projet actuel à l'aide de la console Google Cloud ou du SDK Vertex AI pour Python, ou en envoyant une requête GET à l'aide de la méthode tuningJobs.

REST

Pour afficher la liste des jobs de réglage de modèle, envoyez une requête GET à l'aide de la méthode tuningJobs.list.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : l'ID de votre projet.
  • TUNING_JOB_REGION : région dans laquelle le job de réglage est exécuté. Il s'agit également de la région par défaut dans laquelle le modèle réglé est importé.

Méthode HTTP et URL :

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)

Console

Pour afficher vos jobs de réglage dans la console Google Cloud, accédez à la page Vertex AI Studio.

Accéder à Vertex AI Studio

Vos jobs de réglage Gemini sont répertoriées dans le tableau de la section Modèles réglés Gemini Pro.

Obtenir les détails d'un job de réglage

Vous pouvez obtenir les détails d'un job de réglage dans votre projet actuel en utilisant la console Google Cloud ou le SDK Vertex AI pour Python, ou en envoyant une requête GET à l'aide de la méthode tuningJobs.

REST

Pour afficher la liste des jobs de réglage de modèle, envoyez une requête GET à l'aide de la méthode tuningJobs.get et spécifiez TuningJob_ID.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : l'ID de votre projet.
  • TUNING_JOB_REGION : région dans laquelle le job de réglage est exécuté. Il s'agit également de la région par défaut dans laquelle le modèle réglé est importé.
  • TUNING_JOB_ID : ID du job de réglage.

Méthode HTTP et URL :

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID"

PowerShell

Exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
# tuning_job_id = "TUNING_JOB_ID"

vertexai.init(project=project_id, location="us-central1")

response = sft.SupervisedTuningJob(
    f"projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}"
)

print(response)

Console

  1. Pour afficher les détails d'un modèle réglé dans la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Dans le tableau Modèles réglés Gemini Pro, recherchez votre modèle et cliquez sur Détails.

    Les détails de votre modèle s'affichent.

Annuler un job de réglage

Vous pouvez annuler un job de réglage dans votre projet actuel à l'aide de la console Google Cloud ou du SDK Vertex AI pour Python, ou en envoyant une requête POST à l'aide de la méthode tuningJobs.

REST

Pour afficher la liste des jobs de réglage de modèle, envoyez une requête GET à l'aide de la méthode tuningJobs.cancel et spécifiez TuningJob_ID.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : l'ID de votre projet.
  • TUNING_JOB_REGION : région dans laquelle le job de réglage est exécuté. Il s'agit également de la région par défaut dans laquelle le modèle réglé est importé.
  • TUNING_JOB_ID : ID du job de réglage.

Méthode HTTP et URL :

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel"

PowerShell

Exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
# tuning_job_id = "TUNING_JOB_ID"

vertexai.init(project=project_id, location="us-central1")

job = sft.SupervisedTuningJob(
    f"projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}"
)
job.cancel()

Console

  1. Pour annuler un job de réglage dans la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Dans le tableau Modèles réglés Gemini Pro, cliquez sur Gérer l'exécution.

  3. Cliquez sur Annuler.

Tester le modèle réglé à l'aide d'une requête

REST

Pour tester un modèle réglé avec une requête, envoyez une requête POST et spécifiez le paramètre TUNED_ENDPOINT_ID.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : l'ID de votre projet.
  • TUNING_JOB_REGION : région dans laquelle le job de réglage est exécuté. Il s'agit également de la région par défaut dans laquelle le modèle réglé est importé.
  • ENDPOINT_ID : ID du point de terminaison du modèle réglé provenant de l'API GET.
  • TEMPERATURE : La température est utilisée pour l'échantillonnage pendant la génération des réponses, qui se produit lorsque topP et topK sont appliqués. La température permet de contrôler le degré de hasard dans la sélection des jetons. Les températures inférieures sont idéales pour les requêtes qui nécessitent une réponse moins ouverte ou créative, tandis que des températures plus élevées peuvent conduire à des résultats plus diversifiés ou créatifs. Une température de 0 signifie que les jetons de probabilité les plus élevés sont toujours sélectionnés. Dans ce cas, les réponses pour une requête donnée sont principalement déterministes, mais une petite quantité de variation est toujours possible.

    Si le modèle renvoie une réponse trop générique ou trop courte, ou s'il renvoie une réponse de remplacement, essayez d'augmenter la température.

  • TOP_P : top P modifie la façon dont le modèle sélectionne les jetons pour la sortie. Les jetons sont sélectionnés de la valeur la plus élevée (voir top-K) à la moins probable jusqu'à ce que la somme de leurs probabilités soit égale à la valeur top-P. Par exemple, si les jetons A, B et C ont une probabilité de 0,3, 0,2 et 0,1 et que la valeur de top-P est supérieure à 0.5, le modèle sélectionne A ou B comme jeton suivant en utilisant la température et exclut C comme candidat.

    Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires.

  • TOP_K : top K modifie la façon dont le modèle sélectionne les jetons pour la sortie. Un top-K de 1 signifie que le prochain jeton sélectionné est le plus probable parmi tous les jetons du vocabulaire du modèle (également appelé décodage gourmand), tandis que le top-K de 3 signifie que le jeton suivant est sélectionné parmi les trois jetons les plus probables en utilisant la température.

    Pour chaque étape de sélection du jeton, les jetons top-K avec les probabilités les plus élevées sont échantillonnés. Les jetons sont ensuite filtrés en fonction du top-P avec le jeton final sélectionné à l'aide de l'échantillonnage de température.

    Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires.

  • MAX_OUTPUT_TOKENS : nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

    Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

Méthode HTTP et URL :

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent

Corps JSON de la requête :

{
    "contents": [
        {
            "role": "USER",
            "parts": {
                "text" : "Why is sky blue?"
            }
        }
    ],
    "generation_config": {
        "temperature":TEMPERATURE,
        "top_p": TOP_P,
        "top_k": TOP_K,
        "max_output_tokens": MAX_OUTPUT_TOKENS
    }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Python

from vertexai.preview.generative_models import GenerativeModel
from vertexai.preview import tuning
from vertexai.preview.tuning import sft

sft_tuning_job = sft.SupervisedTuningJob("projects/<PROJECT_ID>/locations/<TUNING_JOB_REGION>/tuningJobs/<TUNING_JOB_ID>")
tuned_model = GenerativeModel(sft_tuning_job.tuned_model_endpoint_name)
print(tuned_model.generate_content(content))

Console

  1. Pour afficher les détails d'un modèle réglé dans la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Dans le tableau Modèles réglés Gemini Pro, sélectionnez Test.

    Cela ouvre une page sur laquelle vous pouvez créer une conversation avec le modèle réglé.

Métriques de réglage et de validation

Vous pouvez configurer un job de réglage de modèle pour collecter et signaler les métriques de réglage de modèle et d'évaluation du modèle, qui peuvent ensuite être visualisées dans Vertex AI Studio.

  1. Pour afficher les détails d'un modèle réglé dans la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Dans le tableau Régler et distiller, cliquez sur le nom du modèle réglé dont vous souhaitez afficher les métriques.

    Les métriques de réglage s'affichent dans l'onglet Surveiller.

Métriques de réglage du modèle

Le job de réglage de modèle collecte automatiquement les métriques de réglage suivantes pour gemini-1.0-pro-002.

  • /train_total_loss : perte de l'ensemble de données de réglage à une étape d'entraînement.
  • /train_fraction_of_correct_next_step_preds : justesse du jeton à un pas d'entraînement. Une prédiction unique consiste en une séquence de jetons. Cette métrique mesure la précision des jetons prévus par rapport à la vérité terrain dans l'ensemble de données de réglage.
  • /train_num_predictions: Nombre de jetons prévus à une étape d'évaluation.

Métriques de validation de modèle :

Vous pouvez configurer un job de réglage de modèle pour collecter les métriques de validation suivantes pour gemini-1.0-pro-002.

  • /eval_total_loss : pertes de l'ensemble de données de validation à une étape de validation.
  • /eval_fraction_of_correct_next_step_preds : justesse du jeton à une étape de validation. Une prédiction unique consiste en une séquence de jetons. Cette métrique mesure la précision des jetons prévus par rapport à la vérité terrain dans l'ensemble de données de validation.
  • /eval_num_predictions : Nombre de jetons prévus à une étape d'évaluation.

Les visualisations des métriques sont disponibles une fois le job de réglage du modèle terminé. Si vous ne spécifiez pas d'ensemble de données de validation lorsque vous créez le job de réglage, seules les visualisations des métriques de réglage sont disponibles.

Étapes suivantes