Usa el ajuste continuo para los modelos de Gemini

El ajuste continuo te permite seguir ajustando un modelo o un punto de control de modelo ya ajustado agregando más épocas o ejemplos de entrenamiento. Usar un modelo o un punto de control ya ajustado como modelo base permite una experimentación de ajuste más eficiente.

Puedes usar el ajuste continuo para los siguientes fines:

  • Ajustar con más datos si un modelo ajustado existente tiene subajuste.
  • Mejorar el rendimiento o mantener el modelo actualizado con datos nuevos
  • Personalizar aún más un modelo ajustado existente

Los siguientes modelos de Gemini admiten el ajuste continuo:

Haz clic para expandir los modelos compatibles

Para obtener información detallada sobre las versiones de los modelos de Gemini, consulta Modelos de Google y Versiones y ciclos de vida de modelos.

Configura el ajuste continuo

Cuando crees un trabajo de ajuste continuo, ten en cuenta lo siguiente:

  • El ajuste continuo es compatible con el SDK de IA generativa de Google. No es compatible con el SDK de Agent Platform para Python.
  • Debes proporcionar un nombre de recurso del modelo:

    • En la Google Cloud consola, el nombre del recurso del modelo aparece en la página Gemini Enterprise Agent Platform Tuning, en el campo Tuning details > Model Name.
    • El nombre del recurso del modelo usa el siguiente formato:
    projects/{project}/locations/{location}/models/{modelId}@{version_id}
    
    • {version_id} es opcional y puede ser el ID de versión generado o un alias de versión proporcionado por el usuario. Si se omite, se usa la versión predeterminada.
  • Si no especificas una versión del modelo, se usa la versión predeterminada.

  • Si usas un punto de control como modelo base y no especificas un ID de punto de control, se usa el punto de control predeterminado. Para obtener más información, consulta Usa puntos de control en el ajuste supervisado para modelos de Gemini. En la Google Cloud consola, el punto de control predeterminado se puede encontrar de la siguiente manera:

    1. Ve a la página Model Registry.
    2. Haz clic en el nombre del modelo.
    3. Haz clic en Ver todas las versiones.
    4. Haz clic en la versión deseada para ver una lista de puntos de control. El punto de control predeterminado se indica con la palabra default junto al ID del punto de control.
  • De forma predeterminada, se crea una nueva versión del modelo en el mismo modelo superior que el modelo previamente ajustado. Si proporcionas un nuevo nombre visible del modelo ajustado, se crea un modelo nuevo.

  • Solo los modelos de base de ajuste supervisado que se ajusten a partir del 11 de julio de 2025 se pueden usar como modelos base para el ajuste continuo.

  • Si usas claves de encriptación administradas por el cliente (CMEK), tu trabajo de ajuste continuo debe usar la misma CMEK que se usó en el trabajo de ajuste para el modelo previamente ajustado.

Console

Para configurar el ajuste continuo para un modelo previamente ajustado con la Google Cloud consola, sigue estos pasos:

  1. En la sección Gemini Enterprise Agent Platform de la Google Cloud consola, ve a la página Agent Platform Studio.

    Ir a Agent Platform Studio

  2. Haz clic en Crear modelo ajustado.

  3. En Detalles del modelo, configura lo siguiente:

    1. Elige Ajustar un modelo previamente ajustado.
    2. En el campo Modelo previamente ajustado, elige el nombre de tu modelo previamente ajustado.
    3. Si el modelo tiene al menos un punto de control, aparecerá el campo desplegable Punto de control. Elige el punto de control deseado.
  4. Haz clic en Continuar.

REST

Para configurar el ajuste continuo, envía una solicitud POST con el tuningJobs.create método. Algunos de los parámetros no son compatibles con todos los modelos. Asegúrate de incluir solo los parámetros aplicables del modelo que estás ajustando.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • Parámetros para el ajuste continuo:
    • TUNED_MODEL_NAME: Nombre del modelo ajustado que se usará.
    • CHECKPOINT_IDOpcional: ID del punto de control que se usará.
  • Los parámetros restantes son los mismos que para el ajuste supervisado o el ajuste de preferencias.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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"
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Ejemplo del comando curl

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 de IA generativa de Google

En el siguiente ejemplo, se muestra cómo configurar el ajuste continuo con el SDK de IA generativa de Google.

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'