Utilizzare l'ottimizzazione continua per i modelli Gemini

L'ottimizzazione continua ti consente di continuare a ottimizzare un modello o un checkpoint del modello già ottimizzato aggiungendo altre epoche o esempi di addestramento. L'utilizzo di un modello o un checkpoint già ottimizzato come modello di base consente di sperimentare l'ottimizzazione in modo più efficiente.

Puoi utilizzare l'ottimizzazione continua per i seguenti scopi:

  • Ottimizzare con più dati se un modello ottimizzato esistente non è sufficiente.
  • Migliorare le prestazioni o mantenere il modello aggiornato con i nuovi dati.
  • Personalizzare ulteriormente un modello ottimizzato esistente.

I seguenti modelli Gemini supportano l'ottimizzazione continua:

Fai clic per espandere i modelli supportati

Per informazioni dettagliate sulle versioni dei modelli Gemini, consulta Modelli Google e Versioni e ciclo di vita dei modelli.

Configurare l'ottimizzazione continua

Quando crei un job di ottimizzazione continua, tieni presente quanto segue:

  • L'ottimizzazione continua è supportata nell'SDK Google Gen AI. Non è supportata nell'SDK Agent Platform per Python.
  • Devi fornire un nome della risorsa modello:

    • Nella Google Cloud console, il nome della risorsa modello viene visualizzato nella pagina Ottimizzazione di Gemini Enterprise Agent Platform, nel campo Dettagli ottimizzazione > Nome modello.
    • Il nome della risorsa modello utilizza il seguente formato:
    projects/{project}/locations/{location}/models/{modelId}@{version_id}
    
    • {version_id} è facoltativo e può essere l'ID della versione generata o un alias della versione fornito dall'utente. Se viene omesso, viene utilizzata la versione predefinita.
  • Se non specifichi una versione del modello, viene utilizzata la versione predefinita.

  • Se utilizzi un checkpoint come modello di base e non specifichi un ID del checkpoint, viene utilizzato il checkpoint predefinito. Per saperne di più, consulta Utilizzare i checkpoint nel fine-tuning supervisionato per i modelli Gemini. Nella Google Cloud console, il checkpoint predefinito può essere trovato come segue:

    1. Vai alla pagina Model Registry.
    2. Fai clic sul Nome modello del modello.
    3. Fai clic su Visualizza tutte le versioni.
    4. Fai clic sulla versione che preferisci per visualizzare un elenco di checkpoint. Il checkpoint predefinito è indicato dalla parola default accanto all'ID del checkpoint.
  • Per impostazione predefinita, viene creata una nuova versione del modello nello stesso modello principale del modello pre-ottimizzato. Se fornisci un nuovo nome visualizzato del modello ottimizzato, viene creato un nuovo modello.

  • Solo i modelli di base di ottimizzazione supervisionata ottimizzati a partire dall'11 luglio 2025 possono essere utilizzati come modelli di base per l'ottimizzazione continua.

  • Se utilizzi le chiavi di crittografia gestite dal cliente (CMEK), il job di ottimizzazione continua deve utilizzare la stessa CMEK utilizzata nel job di ottimizzazione per il modello pre-ottimizzato.

Console

Per configurare l'ottimizzazione continua per un modello pre-ottimizzato utilizzando la Google Cloud console, segui questi passaggi:

  1. Nella sezione Gemini Enterprise Agent Platform della Google Cloud console, vai alla pagina Agent Platform Studio.

    Vai ad Agent Platform Studio

  2. Fai clic su Crea un modello ottimizzato.

  3. In Dettagli modello, configura quanto segue:

    1. Scegli Ottimizza un modello pre-ottimizzato.
    2. Nel campo Modello pre-ottimizzato, scegli il nome del modello pre-ottimizzato.
    3. Se il modello ha almeno un checkpoint, viene visualizzato il campo a discesa Checkpoint. Scegli il checkpoint che preferisci.
  4. Fai clic su Continua.

REST

Per configurare l'ottimizzazione continua, invia una richiesta POST utilizzando il tuningJobs.create metodo. Alcuni parametri non sono supportati da tutti i modelli. Assicurati di includere solo i parametri applicabili per il modello che stai ottimizzando.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "preTunedModel": {
      "tunedModelName": "TUNED_MODEL_NAME",
      "checkpointId": "CHECKPOINT_ID",
  },
  "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"
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, e quindi esegui il comando seguente:

$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

Dovresti ricevere una risposta JSON simile alla seguente.

Comando curl di esempio

PROJECT_ID=myproject
LOCATION=global
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/tuningJobs" \
-d \
$'{
   "preTunedModel": "gemini-2.5-flash",
   "supervisedTuningSpec" : {
      "trainingDatasetUri": "gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_train_data.jsonl",
      "validationDatasetUri": "gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_validation_data.jsonl"
   },
   "tunedModelDisplayName": "tuned_gemini"
}'

SDK Google Gen AI

L'esempio seguente mostra come configurare l'ottimizzazione continua utilizzando l'SDK Google Gen AI.

import time

from google import genai
from google.genai.types import HttpOptions, TuningDataset, CreateTuningJobConfig

# TODO(developer): Update and un-comment below line
# tuned_model_name = "projects/123456789012/locations/us-central1/models/1234567890@1"
# checkpoint_id = "1"

client = genai.Client(http_options=HttpOptions(api_version="v1beta1"))

training_dataset = TuningDataset(
    gcs_uri="gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_train_data.jsonl",
)
validation_dataset = TuningDataset(
    gcs_uri="gs://cloud-samples-data/ai-platform/generative_ai/gemini/text/sft_validation_data.jsonl",
)

tuning_job = client.tunings.tune(
    base_model=tuned_model_name,  # Note: Using a Tuned Model
    training_dataset=training_dataset,
    config=CreateTuningJobConfig(
        tuned_model_display_name="Example tuning job",
        validation_dataset=validation_dataset,
        pre_tuned_model_checkpoint_id=checkpoint_id,
    ),
)

running_states = set([
    "JOB_STATE_PENDING",
    "JOB_STATE_RUNNING",
])

while tuning_job.state in running_states:
    print(tuning_job.state)
    tuning_job = client.tunings.get(name=tuning_job.name)
    time.sleep(60)

print(tuning_job.tuned_model.model)
print(tuning_job.tuned_model.endpoint)
print(tuning_job.experiment)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@2
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# projects/123456789012/locations/us-central1/metadataStores/default/contexts/tuning-experiment-2025010112345678

if tuning_job.tuned_model.checkpoints:
    for i, checkpoint in enumerate(tuning_job.tuned_model.checkpoints):
        print(f"Checkpoint {i + 1}: ", checkpoint)
    # Example response:
    # Checkpoint 1:  checkpoint_id='1' epoch=1 step=10 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789000000'
    # Checkpoint 2:  checkpoint_id='2' epoch=2 step=20 endpoint='projects/123456789012/locations/us-central1/endpoints/123456789012345'