Utilizzare l'ottimizzazione continua per i modelli Gemini

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

Puoi utilizzare la sintonizzazione continua per i seguenti scopi:

  • Per eseguire l'ottimizzazione con più dati se un modello ottimizzato esistente è sottoposto a underfitting.
  • Per migliorare il rendimento o mantenere il modello aggiornato con nuovi dati.
  • Per personalizzare ulteriormente un modello ottimizzato esistente.

I seguenti modelli Gemini supportano l'ottimizzazione continua:

Per informazioni dettagliate sulle versioni del modello 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:

  • Il perfezionamento continuo è supportato in Google Gen AI SDK. Non è supportato nell'SDK Vertex AI per Python.
  • Devi specificare un nome della risorsa del modello:

    • Nella console Google Cloud , il nome della risorsa del modello viene visualizzato nella pagina Ottimizzazione di Vertex AI, nel campo Dettagli 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 omesso, viene utilizzata la versione predefinita.
  • Se non specifichi una versione del modello, viene utilizzata quella 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 Utilizzare i checkpoint nel fine-tuning supervisionato per i modelli Gemini. Nella console Google Cloud , il checkpoint predefinito si trova come segue:

    1. Vai alla pagina del registro dei modelli.
    2. Fai clic sul nome 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 checkpoint.
  • Per impostazione predefinita, una nuova versione del modello viene creata 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 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 Vertex AI della console Google Cloud , vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. Fai clic su Crea modello ottimizzato.

  3. Nella sezione 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 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 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, 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 Google Gen AI SDK.

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'