Feinabstimmungs-API

Die Modellabstimmung ist ein wichtiger Prozess bei der Anpassung von Gemini, um bestimmte Aufgaben mit höherer Präzision und Genauigkeit auszuführen. Bei der Modellabstimmung wird einem Modell ein Trainings-Dataset bereitgestellt, das eine Reihe von Beispielen für bestimmte nachgelagerte Aufgaben enthält.

Sie können die Gemini Tuning API für die folgenden Anwendungsfälle verwenden:

Unterstützte Modelle:

Sie können die überwachte Feinabstimmung für die folgenden Gemini-Modelle verwenden:

Translation LLM V2 (translation-llm-002) wird ebenfalls unterstützt.

Beispielsyntax

Syntax zum Optimieren eines Modells.

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs \
-d '{
  "baseModel": "...",
  "supervisedTuningSpec" : {
    ...
      "hyper_parameters": {
        ...
      },
  },
  "tunedModelDisplayName": "",
}'

Parameterliste

Einzelheiten zur Implementierung finden Sie in den Beispielen.

Anfragetext

Der Anfragetext enthält Daten mit den folgenden Parametern:

Parameter

source_model

Optional: string

Name des Basismodells, das abgestimmt wird.

tunedModelDisplayName

string

Der Anzeigename von TunedModel. Der Name kann bis zu 128 Zeichen lang sein und aus beliebigen UTF-8-Zeichen bestehen.

supervisedTuningSpec

Parameter

training_dataset

string

Cloud Storage-URI Ihres Trainingsdatasets. Das Dataset muss als JSONL-Datei formatiert sein. Die besten Ergebnisse erzielen Sie, wenn Sie mindestens 100 bis 500 Beispiele angeben. Weitere Informationen finden Sie unter Überwachte Abstimmungs-Datasets.

validation_dataset

Optional: string

Cloud Storage-URI Ihres Validierungs-Datasets. Ihr Dataset muss als JSONL-Datei formatiert sein. Ein Dataset kann bis zu 256 Beispiele enthalten. Wenn Sie diese Datei bereitstellen, werden die Daten verwendet, um während der Abstimmung regelmäßig Validierungsmesswerte zu generieren. Weitere Informationen finden Sie unter Überwachte Abstimmungs-Datasets .

epoch_count

Optional: int

Die Anzahl der vollständigen Durchläufe des gesamten Trainings-Datasets durch das Modell während des Trainings. Vertex AI passt den Standardwert automatisch an die Größe Ihres Trainings-Datasets an. Dieser Wert basiert auf Benchmarking-Ergebnissen, mit denen die Qualität der Modellausgabe optimiert werden soll.

learning_rate_multiplier

Optional: float

Multiplikator zum Anpassen der standardmäßigen Lernrate.

adapter_size

Optional: AdapterSize

Adaptergröße für die Optimierung.

tuned_model_display_name

Optional: string

Anzeigename der TunedModel. Der Name kann bis zu 128 Zeichen lang sein und aus beliebigen UTF-8-Zeichen bestehen.

AdapterSize

Adaptergröße für den Optimierungsjob.

Parameter

ADAPTER_SIZE_UNSPECIFIED

Nicht angegebene Adaptergröße.

ADAPTER_SIZE_ONE

Adaptergröße 1.

ADAPTER_SIZE_FOUR

Adaptergröße 4.

ADAPTER_SIZE_EIGHT

Adaptergröße 8.

ADAPTER_SIZE_SIXTEEN

Adaptergröße 16.

Beispiele

Überwachten Abstimmungsjob erstellen

Sie können einen überwachten Textmodell-Abstimmungsjob mit dem Vertex AI SDK für Python oder durch Senden einer POST-Anfrage erstellen.

Grundlegender Anwendungsfall

Im einfachen Anwendungsfall werden nur Werte für baseModel und training_dataset_uri festgelegt. Für alle anderen Parameter werden die Standardwerte verwendet.

REST

Senden Sie zum Erstellen eines Modellabstimmungsjobs eine POST-Anfrage mit der Methode tuningJobs.create. Beachten Sie, dass einige Parameter nicht von allen Modellen unterstützt werden. Achten Sie darauf, dass Sie nur die für das abzustimmende Modell relevanten Parameter einfügen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • BASE_MODEL: Name des zu optimierenden Foundation Models.
  • TRAINING_DATASET_URI: Cloud Storage-URI Ihres Trainingsdatensatzes. Das Dataset muss als JSONL-Datei formatiert sein. Die besten Ergebnisse erzielen Sie, wenn Sie mindestens 100 bis 500 Beispiele angeben. Weitere Informationen finden Sie unter Überwachte Abstimmungs-Datasets.

HTTP-Methode und URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

JSON-Text der Anfrage:

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "training_dataset_uri": "TRAINING_DATASET_URI"
  },
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

Python


import time

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

sft_tuning_job = sft.train(
    source_model="gemini-2.0-flash-001",
    # 1.5 and 2.0 models use the same JSONL format
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_train_data.jsonl",
)

# Polling for job completion
while not sft_tuning_job.has_ended:
    time.sleep(60)
    sft_tuning_job.refresh()

print(sft_tuning_job.tuned_model_name)
print(sft_tuning_job.tuned_model_endpoint_name)
print(sft_tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# <google.cloud.aiplatform.metadata.experiment_resources.Experiment object at 0x7b5b4ae07af0>

Erweiterter Anwendungsfall

Der erweiterte Anwendungsfall baut auf dem grundlegenden Anwendungsfall auf, legt aber auch Werte für optionale hyper_parameters fest, z. B. epoch_count, learning_rate_multiplier und adapter_size.

REST

Senden Sie zum Erstellen eines Modellabstimmungsjobs eine POST-Anfrage mit der Methode tuningJobs.create. Beachten Sie, dass einige Parameter nicht von allen Modellen unterstützt werden. Achten Sie darauf, dass Sie nur die für das abzustimmende Modell relevanten Parameter einfügen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • BASE_MODEL: Name des zu optimierenden Foundation Models.
  • TRAINING_DATASET_URI: Cloud Storage-URI Ihres Trainingsdatensatzes. Das Dataset muss als JSONL-Datei formatiert sein. Die besten Ergebnisse erzielen Sie, wenn Sie mindestens 100 bis 500 Beispiele angeben. Weitere Informationen finden Sie unter Überwachte Abstimmungs-Datasets.
  • VALIDATION_DATASET_URIOptional: Der Cloud Storage-URI der Validierungs-Dataset-Datei.
  • EPOCH_COUNTOptional: Die Anzahl der vollständigen Durchläufe des gesamten Trainings-Datasets durch das Modell während des Trainings. Lassen Sie das Feld leer, um den voreingestellten empfohlenen Wert zu verwenden.
  • ADAPTER_SIZEOptional: Die Adaptergröße, die für den Optimierungsjob verwendet werden soll. Die Adaptergröße wirkt sich auf die Anzahl der trainierbaren Parameter für den Optimierungsjob aus. Eine größere Adaptergröße bedeutet, dass das Modell komplexere Aufgaben lernen kann. Es erfordert jedoch einen größeren Trainingsdatensatz und längere Trainingszeiten.
  • LEARNING_RATE_MULTIPLIER: Optional: Ein Multiplikator, der auf die empfohlene Lernrate anzuwenden ist. Legen Sie das Feld nicht fest, um den empfohlenen Wert verwenden zu lassen.
  • EXPORT_LAST_CHECKPOINT_ONLYOptional: Auf true setzen, um nur den letzten Prüfpunkt zu verwenden.
  • METRIC_SPECOptional: Eine oder mehrere Messwertspezifikationen, die Sie verwenden, um eine Bewertung mit dem Gen AI Evaluation Service auszuführen. Sie können die folgenden Messwertspezifikationen verwenden: "pointwise_metric_spec", "pairwise_metric_spec", "exact_match_spec", "bleu_spec" und "rouge_spec".
  • METRIC_SPEC_FIELD_NAMEOptional: Die erforderlichen Felder für die von Ihnen ausgewählte Messwertspezifikation, z. B. "metric_prompt_template"
  • METRIC_SPEC_FIELD_NAME_CONTENTOptional: Der Feldinhalt für die ausgewählte Messwertspezifikation. Für eine punktweise Auswertung können Sie beispielsweise den folgenden Feldinhalt verwenden: "Evaluate the fluency of this sentence: {response}. Give score from 0 to 1. 0 - not fluent at all. 1 - very fluent."
  • CLOUD_STORAGE_BUCKETOptional: Der Cloud Storage-Bucket, in dem die Ergebnisse eines Bewertungsdurchlaufs durch den Gen AI Evaluation Service gespeichert werden.
  • TUNED_MODEL_DISPLAYNAMEOptional: Ein Anzeigename für das abgestimmte Modell. Wenn nicht festgelegt, wird ein zufälliger Name generiert.
  • KMS_KEY_NAME Optional: Die Cloud KMS-Ressourcen-ID des vom Kunden verwalteten Verschlüsselungsschlüssels, der zum Schutz einer Ressource verwendet wird. Der Schlüssel hat das Format projects/my-project/locations/my-region/keyRings/my-kr/cryptoKeys/my-key. Der Schlüssel muss sich in derselben Region befinden, in der die Compute-Ressource erstellt wird. Weitere Informationen finden Sie unter Vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK).
  • SERVICE_ACCOUNTOptional: Das Dienstkonto, unter dem die TuningJob-Arbeitslast ausgeführt wird. Wenn nicht angegeben, wird der Vertex AI Secure Fine-Tuning-Dienst-Agent im Projekt verwendet. Weitere Informationen finden Sie unter Abstimmungsdienst-Agent. Wenn Sie ein vom Kunden verwaltetes Dienstkonto verwenden möchten, müssen Sie dem Dienstkonto die Rolle roles/aiplatform.tuningServiceAgent zuweisen. Weisen Sie dem vom Kunden verwalteten Dienstkonto auch die Rolle Tuning Service Agent roles/iam.serviceAccountTokenCreator zu.

HTTP-Methode und URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

JSON-Text der Anfrage:

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
      "hyperParameters": {
          "epochCount": "EPOCH_COUNT",
          "adapterSize": "ADAPTER_SIZE",
          "learningRateMultiplier": "LEARNING_RATE_MULTIPLIER"
      },
      "exportLastCheckpointOnly": EXPORT_LAST_CHECKPOINT_ONLY,
      "evaluationConfig": {
          "metrics": [
              {
                  "aggregation_metrics": ["AVERAGE", "STANDARD_DEVIATION"],
                  "METRIC_SPEC": {
                      "METRIC_SPEC_FIELD_NAME":
                          METRIC_SPEC_FIELD_CONTENT
                  }
              },
          ],
          "outputConfig": {
              "gcs_destination": {
                  "output_uri_prefix": "CLOUD_STORAGE_BUCKET"
              }
          },
      },
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME",
  "encryptionSpec": {
    "kmsKeyName": "KMS_KEY_NAME"
  },
  "serviceAccount": "SERVICE_ACCOUNT"
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

Python


import time

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

# Initialize Vertex AI with your service account for BYOSA (Bring Your Own Service Account).
# Uncomment the following and replace "your-service-account"
# vertexai.init(service_account="your-service-account")

# Initialize Vertex AI with your CMEK (Customer-Managed Encryption Key).
# Un-comment the following line and replace "your-kms-key"
# vertexai.init(encryption_spec_key_name="your-kms-key")

sft_tuning_job = sft.train(
    source_model="gemini-2.0-flash-001",
    # 1.5 and 2.0 models use the same JSONL format
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_validation_data.jsonl",
    tuned_model_display_name="tuned_gemini_2_0_flash",
    # Advanced use only below. It is recommended to use auto-selection and leave them unset
    # epochs=4,
    # adapter_size=4,
    # learning_rate_multiplier=1.0,
)

# Polling for job completion
while not sft_tuning_job.has_ended:
    time.sleep(60)
    sft_tuning_job.refresh()

print(sft_tuning_job.tuned_model_name)
print(sft_tuning_job.tuned_model_endpoint_name)
print(sft_tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# <google.cloud.aiplatform.metadata.experiment_resources.Experiment object at 0x7b5b4ae07af0>

Abstimmungsjobs auflisten

Sie können eine Liste der Feinabstimmungsjobs in Ihrem aktuellen Projekt mit dem Vertex AI SDK für Python oder durch Senden einer GET-Anfrage aufrufen.

REST

Senden Sie zum Erstellen eines Modellabstimmungsjobs eine POST-Anfrage mit der Methode tuningJobs.create. Beachten Sie, dass einige Parameter nicht von allen Modellen unterstützt werden. Achten Sie darauf, dass Sie nur die für das abzustimmende Modell relevanten Parameter einfügen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: .
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.

HTTP-Methode und URL:

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

Senden Sie die Anfrage mithilfe einer der folgenden Optionen:

curl

Führen Sie folgenden Befehl aus:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Führen Sie diesen Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

Python

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7c85287b2680>
# resource name: projects/12345678/locations/us-central1/tuningJobs/123456789012345

Details eines Abstimmungsjobs abrufen

Sie können die Details eines Feinabstimmungsjobs mit dem Vertex AI SDK für Python oder durch Senden einer GET-Anfrage abrufen.

REST

Wenn Sie eine Liste der Modellabstimmungsjobs aufrufen möchten, senden Sie eine GET-Anfrage mit der Methode tuningJobs.get und geben Sie TuningJob_ID an.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: .
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • TUNING_JOB_ID: die ID des Abstimmungsjobs.

HTTP-Methode und URL:

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID

Senden Sie die Anfrage mithilfe einer der folgenden Optionen:

curl

Führen Sie folgenden Befehl aus:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID"

PowerShell

Führen Sie diesen Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

Python

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
response = sft.SupervisedTuningJob(
    f"projects/{PROJECT_ID}/locations/{LOCATION}/tuningJobs/{tuning_job_id}"
)

print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7cc4bb20baf0>
# resource name: projects/1234567890/locations/us-central1/tuningJobs/4982013113894174720

Abstimmungsjob abbrechen

Sie können einen Feinabstimmungsjob mit dem Vertex AI SDK für Python oder durch Senden einer POST-Anfrage abbrechen.

REST

Wenn Sie eine Liste der Modellabstimmungsjobs aufrufen möchten, senden Sie eine GET-Anfrage mit der Methode tuningJobs.cancel und geben Sie TuningJob_ID an.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: .
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • TUNING_JOB_ID: die ID des Abstimmungsjobs.

HTTP-Methode und URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel

Senden Sie die Anfrage mithilfe einer der folgenden Optionen:

curl

Führen Sie folgenden Befehl aus:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel"

PowerShell

Führen Sie diesen Befehl aus:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel" | Select-Object -Expand Content

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

Python

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
job = sft.SupervisedTuningJob(
    f"projects/{PROJECT_ID}/locations/{LOCATION}/tuningJobs/{tuning_job_id}"
)
job.cancel()

Nächste Schritte

Eine ausführliche Dokumentation finden Sie hier: