Usa el ajuste continuo para los modelos de Gemini

El ajuste continuo te permite seguir ajustando un modelo o un punto de control del 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 presenta un ajuste insuficiente
  • Para mejorar el rendimiento o mantener el modelo actualizado con datos nuevos
  • Para personalizar aún más un modelo ajustado existente

Los siguientes modelos de Gemini admiten el ajuste continuo:

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

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 se admite en el SDK de Vertex AI para Python.
  • Debes proporcionar un nombre de recurso del modelo:

    • En la consola de Google Cloud , el nombre del recurso del modelo aparece en la página Vertex AI 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 usará el punto de control predeterminado. Para obtener más información, consulta Usa puntos de control en el ajuste supervisado para los modelos de Gemini. En la consola de Google Cloud , 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 los 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 principal que el modelo ajustado previamente. Si proporcionas un nuevo nombre visible para el modelo ajustado, se creará un modelo nuevo.

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

  • 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 del modelo previamente ajustado.

Console

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

  1. En la sección Vertex AI de la Google Cloud consola, ve a la página Vertex AI Studio.

    Ir a Vertex AI 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 preajustado, elige el nombre de tu modelo preajustado.
    3. Si el modelo tiene al menos un punto de control, aparecerá el campo desplegable Checkpoint. Elige el punto de control deseado.
  4. Haz clic en Continuar.

REST

Para configurar el ajuste continuo, envía una solicitud POST con el método tuningJobs.create. 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"
}'

Google Gen AI SDK

En el siguiente ejemplo, se muestra cómo configurar el ajuste continuo con el SDK de 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'