Utilizzare l'ottimizzazione continua per i modelli Gemini

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

Puoi utilizzare l'ottimizzazione continua per i seguenti scopi:

  • Per ottimizzare con più dati se un modello ottimizzato esistente è in underfitting.
  • Per migliorare le prestazioni o mantenere il modello aggiornato con nuovi dati.
  • Per 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 del modello Gemini, consulta Modelli Google e Versioni e ciclo di vita dei modelli.

Configura l'ottimizzazione continua

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

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

    • Nella console Google Cloud , il nome della risorsa del modello viene visualizzato nella pagina Ottimizzazione di Gemini Enterprise Agent Platform, nel campo Dettagli di ottimizzazione > Nome modello.
    • Il nome della risorsa del modello utilizza il seguente formato:
    projects/{project}/locations/{location}/models/{modelId}@{version_id}
    
    • {version_id} è facoltativo e può essere l'ID versione generato o un alias della versione fornito dall'utente. Se viene omessa, 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 checkpoint, viene utilizzato il checkpoint predefinito. Per saperne di più, consulta Utilizza i checkpoint nel fine-tuning supervisionato per i modelli Gemini. Nella console Google Cloud , il checkpoint predefinito è disponibile come segue:

    1. Vai alla pagina Model Registry.
    2. Fai clic sul nome del modello.
    3. Fai clic su Visualizza tutte le versioni.
    4. Fai clic sulla versione che ti interessa 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 per il modello ottimizzato, viene creato un nuovo modello.

  • Solo i modelli di base per l'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 consoleGoogle Cloud , segui questi passaggi:

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

    Vai ad Ottimizzazione

  2. Fai clic su Crea 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 metodo tuningJobs.create. Alcuni parametri non sono supportati da tutti i modelli. Assicurati di includere solo i parametri applicabili al 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, 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-3.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'