Use a otimização contínua para modelos do Gemini

A otimização contínua permite-lhe continuar a otimizar um modelo já otimizado ou um ponto de verificação do modelo adicionando mais épocas ou exemplos de preparação. A utilização de um modelo ou um ponto de verificação já otimizado como modelo base permite uma experimentação de otimização mais eficiente.

Pode usar a otimização contínua para os seguintes fins:

  • Para fazer o ajuste com mais dados se um modelo ajustado existente estiver a ajustar demasiado os dados.
  • Para melhorar o desempenho ou manter o modelo atualizado com novos dados.
  • Para personalizar ainda mais um modelo otimizado existente.

Os seguintes modelos Gemini suportam a otimização contínua:

Para ver informações detalhadas sobre as versões do modelo Gemini, consulte os artigos Modelos Google e Versões e ciclo de vida dos modelos.

Configure a otimização contínua

Ao criar uma tarefa de ajuste contínuo, tenha em atenção o seguinte:

  • A otimização contínua é suportada no SDK de IA gen da Google. Não é suportado no SDK Vertex AI para Python.
  • Tem de indicar um nome do recurso do modelo:

    • Na Google Cloud consola, o nome do recurso do modelo aparece na página Vertex AI Tuning, no campo Detalhes da otimização > Nome do modelo.
    • O nome do recurso do modelo usa o seguinte formato:
    projects/{project}/locations/{location}/models/{modelId}@{version_id}
    
    • {version_id} é opcional e pode ser o ID da versão gerado ou um alias da versão fornecido pelo utilizador. Se for omitido, é usada a versão predefinida.
  • Se não especificar uma versão do modelo, é usada a versão predefinida.

  • Se estiver a usar um ponto de verificação como modelo base e não especificar um ID do ponto de verificação, é usado o ponto de verificação predefinido. Para mais informações, consulte o artigo Use pontos de verificação na otimização precisa supervisionada para modelos Gemini. Na Google Cloud consola, o ponto de verificação predefinido pode ser encontrado da seguinte forma:

    1. Aceda à página Model Registry.
    2. Clique no Nome do modelo para o modelo.
    3. Clique em Ver todas as versões.
    4. Clique na versão pretendida para ver uma lista de pontos de verificação. O ponto de verificação predefinido é indicado pela palavra default junto ao ID do ponto de verificação.
  • Por predefinição, é criada uma nova versão do modelo no mesmo modelo principal que o modelo pré-ajustado. Se fornecer um novo nome a apresentar do modelo otimizado, é criado um novo modelo.

  • Só os modelos base de ajuste supervisionado ajustados a partir de 11 de julho de 2025 (inclusive) podem ser usados como modelos base para o ajuste contínuo.

  • Se estiver a usar chaves de encriptação geridas pelo cliente (CMEK), a tarefa de ajuste contínuo tem de usar a mesma CMEK que foi usada na tarefa de ajuste para o modelo pré-ajustado.

Consola

Para configurar a otimização contínua de um modelo pré-ajustado através da Google Cloud consola, siga estes passos:

  1. Na secção Vertex AI da Google Cloud consola, aceda à página Vertex AI Studio.

    Aceda ao Vertex AI Studio

  2. Clique em Criar modelo otimizado.

  3. Em Detalhes do modelo, configure o seguinte:

    1. Escolha Ajustar um modelo pré-ajustado.
    2. No campo Modelo pré-ajustado, escolha o nome do seu modelo pré-ajustado.
    3. Se o modelo tiver, pelo menos, um ponto de verificação, é apresentado o campo do menu pendente Ponto de verificação. Escolha o ponto de verificação pretendido.
  4. Clique em Continuar.

REST

Para configurar a otimização contínua, envie um pedido POST através do método tuningJobs.create. Alguns dos parâmetros não são suportados por todos os modelos. Certifique-se de que inclui apenas os parâmetros aplicáveis para o modelo que está a otimizar.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • Parâmetros para o ajuste contínuo:
    • TUNED_MODEL_NAME: nome do modelo ajustado a usar.
    • CHECKPOINT_IDOpcional: ID do ponto de verificação a usar.
  • Os restantes parâmetros são iguais aos da ajuste fino supervisionado ou do ajuste de preferências.

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "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 o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte 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

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte 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

Deve receber uma resposta JSON semelhante à seguinte.

Comando curl de exemplo

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

O exemplo seguinte mostra como configurar a otimização contínua através do SDK de IA gen da 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'