Este instructivo te ayudará a comenzar a usar el servicio de ajuste de la API de Gemini con el SDK de Python o la API de REST mediante curl Los ejemplos muestran cómo ajustar el modelo de texto detrás el servicio de generación de texto de la API de Gemini.
Ver en ai.google.dev | Prueba un notebook de Colab | Ver notebook en GitHub |
Limitaciones
Antes de ajustar un modelo, debes tener en cuenta las siguientes limitaciones:
Conjuntos de datos de ajuste
El ajuste de los conjuntos de datos para Gemini 1.5 Flash tiene las siguientes limitaciones:
- El tamaño máximo de entrada por ejemplo es de 40,000 caracteres.
- El tamaño máximo de salida por ejemplo es de 5,000 caracteres.
- Solo se admiten ejemplos de pares de entrada-salida. Múltiples turnos similares al chat no se admiten las conversaciones.
Modelos ajustados
Los modelos ajustados tienen las siguientes limitaciones:
- El límite de entrada de un modelo Gemini 1.5 Flash ajustado es de 40,000 caracteres.
- El modo JSON no es compatible con los modelos ajustados.
- Solo se admite la entrada de texto.
Antes de comenzar: Configura tu proyecto y clave de API
Antes de llamar a la API de Gemini, debes configurar tu proyecto tu clave de API.
Enumerar modelos ajustados
Puedes verificar tus modelos ajustados existentes con el
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 modelo ajustado
Para crear un modelo ajustado, debes pasar tu dataset a
el modelo en el archivo tunedModels.create
.
En este ejemplo, ajustarás un modelo para generar el siguiente número en la
secuencia. Por ejemplo, si la entrada es 1
, el modelo debería generar 2
. Si la entrada es one hundred
, el resultado debería ser 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"
Los valores óptimos para el recuento de épocas, el tamaño del lote y la tasa de aprendizaje dependen de tu conjunto de datos y de otras restricciones de tu caso de uso. Para obtener más información sobre estos valores, consulta Configuración de ajuste avanzada y Hiperparámetros.
Tu modelo ajustado se agrega de inmediato a la lista de modelos ajustados, pero su estado se establece en "creando" mientras se ajusta.
Prueba el modelo
Puedes usar la
tunedModels.generateContent
y especifica el nombre del modelo ajustado para probar su rendimiento.
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
Borra el modelo
Para limpiar la lista de modelos ajustados, borra los modelos que ya no necesitas.
Usa el método tunedModels.delete
para
borrar un modelo. Si cancelaste algún trabajo de ajuste, es posible que quieras borrarlo como
su rendimiento puede ser impredecible.
curl -X DELETE https://generativelanguage.googleapis.com/v1beta/${modelname}?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json'