In dieser Anleitung erfahren Sie, wie Sie mit dem Gemini API-Abstimmungsdienst beginnen, entweder mit dem Python SDK oder der REST API mit curl. In den Beispielen wird gezeigt, wie Sie das Textmodell hinter dem Textgenerierungsservice der Gemini API optimieren.
Auf ai.google.dev ansehen | Colab-Notebook testen | Notebook auf GitHub ansehen |
Beschränkungen
Bevor Sie ein Modell optimieren, sollten Sie sich mit den folgenden Einschränkungen vertraut machen:
Datasets optimieren
Für die Feinabstimmung von Datasets für Gemini 1.5 Flash gelten die folgenden Einschränkungen:
- Die maximale Eingabegröße pro Beispiel beträgt 40.000 Zeichen.
- Die maximale Ausgabegröße pro Beispiel beträgt 5.000 Zeichen.
- Es werden nur Beispiele für Eingabe/Ausgabe-Paare unterstützt. Mehrere Unterhaltungen im Chatstil werden nicht unterstützt.
Abgestimmte Modelle
Für optimierte Modelle gelten die folgenden Einschränkungen:
- Das Eingabelimit eines optimierten Gemini 1.5-Flash-Modells beträgt 40.000 Zeichen.
- Der JSON-Modus wird für optimierte Modelle nicht unterstützt.
- Es wird nur die Texteingabe unterstützt.
Bevor Sie beginnen: Projekt und API-Schlüssel einrichten
Bevor Sie die Gemini API aufrufen können, müssen Sie Ihr Projekt einrichten und Ihren API-Schlüssel konfigurieren.
Abgestimmte Modelle auflisten
Sie können Ihre vorhandenen optimierten Modelle mit der Methode tunedModels.list
prüfen.
# 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
Abgestimmtes Modell erstellen
Wenn Sie ein optimiertes Modell erstellen möchten, müssen Sie den Datensatz in der Methode tunedModels.create
an das Modell übergeben.
In diesem Beispiel optimieren Sie ein Modell, um die nächste Zahl in der Sequenz zu generieren. Wenn die Eingabe beispielsweise 1
ist, sollte das Modell 2
ausgeben. Wenn die Eingabe one hundred
ist, sollte die Ausgabe one hundred one
lauten.
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"
Die optimalen Werte für die Anzahl der Epochen, die Batchgröße und die Lernrate hängen von Ihrem Datensatz und anderen Einschränkungen Ihres Anwendungsfalls ab. Weitere Informationen zu diesen Werten finden Sie unter Erweiterte Abstimmungseinstellungen und Hyperparameter.
Das abgestimmte Modell wird sofort der Liste der abgestimmten Modelle hinzugefügt. Während der Abstimmung ist sein Status jedoch auf „Erstellen“ festgelegt.
Modell testen
Sie können die Methode tunedModels.generateContent
verwenden und den Namen des optimierten Modells angeben, um seine Leistung zu testen.
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
Modell löschen
Sie können die Liste der optimierten Modelle bereinigen, indem Sie Modelle löschen, die Sie nicht mehr benötigen.
Verwenden Sie die Methode tunedModels.delete
, um ein Modell zu löschen. Wenn Sie Optimierungsjobs abgebrochen haben, sollten Sie diese löschen, da ihre Leistung möglicherweise unvorhersehbar ist.
curl -X DELETE https://generativelanguage.googleapis.com/v1beta/${modelname}?key=$GOOGLE_API_KEY \
-H 'Content-Type: application/json'