Tutorial sul perfezionamento

Questo tutorial ti aiuterà a iniziare a utilizzare il servizio di ottimizzazione dell'API Gemini utilizzando l'SDK Python o l'API REST curl. Gli esempi mostrano come ottimizzare il modello di testo alla base il servizio di generazione di testo dell'API Gemini.

Visualizza su ai.google.dev Provare un notebook di Colab Visualizzare il blocco note su GitHub

Limitazioni

Prima di ottimizzare un modello, tieni presente le seguenti limitazioni:

Set di dati di ottimizzazione fine

I set di dati di ottimizzazione per Gemini 1.5 Flash presentano le seguenti limitazioni:

  • La dimensione massima di input per esempio è di 40.000 caratteri.
  • La dimensione massima dell'output per esempio è di 5000 caratteri.
  • Sono supportati solo gli esempi di coppie input-output. Le conversazioni con più turni in stile chat non sono supportate.

Modelli ottimizzati

I modelli ottimizzati presentano le seguenti limitazioni:

  • Il limite di input di un modello Gemini 1.5 Flash ottimizzato è di 40.000 caratteri.
  • La modalità JSON non è supportata con i modelli ottimizzati.
  • È supportato solo l'inserimento di testo.

Prima di iniziare: configura il progetto e la chiave API

Prima di chiamare l'API Gemini, devi impostare il tuo progetto la chiave API.

Elenco dei modelli ottimizzati

Puoi controllare i modelli ottimizzati esistenti con il metodo 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

Crea un modello ottimizzato

Per creare un modello ottimizzato, devi passare il set di dati al modello nel metodo tunedModels.create.

In questo esempio, ottimizzerai un modello per generare il numero successivo nella sequenza. Ad esempio, se l'input è 1, il modello dovrebbe restituire 2. Se l'input è one hundred, l'output dovrebbe essere 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"

I valori ottimali per il conteggio delle epoche, la dimensione del batch e il tasso di apprendimento dipendono del set di dati e di altri vincoli del tuo caso d'uso. Per scoprire di più su questi valori, vedi Impostazioni di ottimizzazione avanzate e Iperparametri.

Il modello ottimizzato viene aggiunto immediatamente all'elenco dei modelli ottimizzati, ma stato impostato su "creazione in corso" mentre il modello è ottimizzato.

Prova il modello

Puoi utilizzare lo tunedModels.generateContent e specificare il nome del modello ottimizzato per testarne le prestazioni.

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

Elimina il modello

Puoi ripulire l'elenco dei modelli ottimizzati eliminando quelli che non ti servono più. Utilizza il metodo tunedModels.delete per eliminare un modello. Se hai annullato dei job di ottimizzazione, ti consigliamo di eliminarli perché il loro rendimento potrebbe essere imprevedibile.

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