Tutoriel d'optimisation

Ce tutoriel vous aidera à vous familiariser avec le service de réglage de l'API Gemini à l'aide du SDK Python ou de l'API REST avec curl. Les exemples montrent comment régler le modèle de texte derrière le service de génération de texte de l'API Gemini.

Afficher sur ai.google.dev Essayer un notebook Colab Afficher le notebook sur GitHub

Limites

Avant d'ajuster un modèle, vous devez prendre en compte les limites suivantes :

Ensembles de données d'ajustement

Les ensembles de données d'affinage pour Flash Gemini 1.5 présentent les limites suivantes:

  • La taille d'entrée maximale par exemple est de 40 000 caractères.
  • La taille de sortie maximale par exemple est de 5 000 caractères.
  • Seuls les exemples de paires entrée/sortie sont acceptés. Les conversations multitours de type chat ne sont pas acceptées.

Modèles réglés

Les modèles réglés présentent les limites suivantes:

  • La limite d'entrée d'un modèle Flash Gemini 1.5 réglé est de 40 000 caractères.
  • Le mode JSON n'est pas compatible avec les modèles réglés.
  • Seule la saisie de texte est acceptée.

Avant de commencer : configurez votre projet et votre clé API

Avant d'appeler l'API Gemini, vous devez configurer votre projet et votre clé API.

Répertorier les modèles réglés

Vous pouvez vérifier vos modèles réglés existants avec la tunedModels.list.

# Sending a page_size is optional
curl -X GET https://generativelanguage.googleapis.com/v1beta/tunedModels?page_size=5 \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" > tuned_models.json

jq .tunedModels[].name < tuned_models.json

# Send the nextPageToken to get the next page.
page_token=$(jq .nextPageToken < tuned_models.json | tr -d '"')

if [[ "$page_token" != "null"" ]]; then
curl -X GET https://generativelanguage.googleapis.com/v1beta/tunedModels?page_size=5\&page_token=${page_token}?key=$GOOGLE_API_KEY \
    -H "Content-Type: application/json"  > tuned_models2.json
jq .tunedModels[].name < tuned_models.json
fi

Créer un modèle réglé

Pour créer un modèle affiné, vous devez transmettre votre ensemble de données au modèle dans la méthode tunedModels.create.

Dans cet exemple, vous allez optimiser un modèle pour générer le prochain nombre de la séquence. Par exemple, si l'entrée est 1, le modèle doit générer 2. Si le l'entrée est one hundred, la sortie doit être one hundred one.

curl -X POST "https://generativelanguage.googleapis.com/v1beta/tunedModels?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '
      {
        "display_name": "number generator model",
        "base_model": "models/gemini-1.5-flash-001-tuning",
        "tuning_task": {
          "hyperparameters": {
            "batch_size": 2,
            "learning_rate": 0.001,
            "epoch_count":5,
          },
          "training_data": {
            "examples": {
              "examples": [
                {
                    "text_input": "1",
                    "output": "2",
                },{
                    "text_input": "3",
                    "output": "4",
                },{
                    "text_input": "-3",
                    "output": "-2",
                },{
                    "text_input": "twenty two",
                    "output": "twenty three",
                },{
                    "text_input": "two hundred",
                    "output": "two hundred one",
                },{
                    "text_input": "ninety nine",
                    "output": "one hundred",
                },{
                    "text_input": "8",
                    "output": "9",
                },{
                    "text_input": "-98",
                    "output": "-97",
                },{
                    "text_input": "1,000",
                    "output": "1,001",
                },{
                    "text_input": "10,100,000",
                    "output": "10,100,001",
                },{
                    "text_input": "thirteen",
                    "output": "fourteen",
                },{
                    "text_input": "eighty",
                    "output": "eighty one",
                },{
                    "text_input": "one",
                    "output": "two",
                },{
                    "text_input": "three",
                    "output": "four",
                },{
                    "text_input": "seven",
                    "output": "eight",
                }
              ]
            }
          }
        }
      }' | tee tunemodel.json

# Check the operation for status updates during training.
# Note: you can only check the operation on v1/
operation=$(cat tunemodel.json | jq ".name" | tr -d '"')
tuning_done=false

while [[ "$tuning_done" != "true" ]];
do
  sleep 5
  curl -X GET "https://generativelanguage.googleapis.com/v1/${operation}?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
     2> /dev/null > tuning_operation.json

  complete=$(jq .metadata.completedPercent < tuning_operation.json)
  tput cuu1
  tput el
  echo "Tuning...${complete}%"
  tuning_done=$(jq .done < tuning_operation.json)
done

# Or get the TunedModel and check it's state. The model is ready to use if the state is active.
modelname=$(cat tunemodel.json | jq ".metadata.tunedModel" | tr -d '"')
curl -X GET  https://generativelanguage.googleapis.com/v1beta/${modelname}?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' > tuned_model.json

cat tuned_model.json | jq ".state"

Les valeurs optimales pour le nombre d'époques, la taille de lot et le taux d'apprentissage dépendent de votre ensemble de données et des autres contraintes de votre cas d'utilisation. Pour en savoir plus sur ces valeurs, consultez les sections Paramètres de réglage avancés et Hyperparamètres.

Votre modèle réglé est immédiatement ajouté à la liste des modèles réglés, mais son est défini sur "création" pendant que le modèle est réglé.

Essayer le modèle

Vous pouvez utiliser la méthode tunedModels.generateContent et spécifier le nom du modèle affiné pour tester ses performances.

curl -X POST https://generativelanguage.googleapis.com/v1beta/$modelname:generateContent?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json' \
    -d '{
        "contents": [{
        "parts": [{
          "text": "LXIII"
          }]
        }]
        }' 2> /dev/null

Supprimer le modèle

Vous pouvez nettoyer la liste des modèles optimisés en supprimant les modèles dont vous n'avez plus besoin. Utilisez la méthode tunedModels.delete pour supprimer un modèle. Si vous avez annulé des tâches de réglage, vous pouvez les supprimer, car leurs performances peuvent être imprévisibles.

curl -X DELETE https://generativelanguage.googleapis.com/v1beta/${modelname}?key=$GOOGLE_API_KEY \
    -H 'Content-Type: application/json'