Questo tutorial ti aiuterà a iniziare a utilizzare il servizio di ottimizzazione dell'API Gemini con l'SDK Python o l'API REST utilizzando curl. Gli esempi mostrano come ottimizzare il modello di testo alla base del 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
La messa a punto dei set di dati per Gemini 1.5 Flash presenta le seguenti limitazioni:
- La dimensione massima dell'input per esempio è 40.000 caratteri.
- La dimensione massima dell'output per esempio è di 5000 caratteri.
- Sono supportati solo 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 è 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 configurare il progetto e 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
.
Per questo esempio, ottimizzerai un modello per generare il numero successivo nella sequenza. Ad esempio, se l'input è 1
, il modello deve produrre 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 numero di epoche, la dimensione del batch e il tasso di apprendimento dipendono dal set di dati e da altri vincoli del caso d'uso. Per scoprire di più su questi valori, consulta le impostazioni di ottimizzazione avanzata e gli iperparametri.
Il modello ottimizzato viene aggiunto immediatamente all'elenco dei modelli ottimizzati, ma il suo stato viene impostato su "creazione" mentre il modello viene ottimizzato.
Prova il modello
Puoi utilizzare il metodo
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'