Ajusta los modelos de Gemini Pro con el ajuste supervisado

En este documento, se describe cómo ajustar un modelo de Gemini mediante el ajuste supervisado.

Antes de comenzar

Crea un trabajo de ajuste.

Puedes crear un trabajo de ajuste supervisado con la consola de Google Cloud, la API o el SDK de Vertex AI para Python. Para obtener orientación sobre las opciones de configuración del modelo, consulta Parámetro de configuración recomendadas.

REST

Para crear un trabajo de ajuste de modelos, envía una solicitud POST mediante el método tuningJobs.create. Ten en cuenta que 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:

  • PROJECT_ID: El ID del proyecto.
  • TUNING_JOB_REGION: Es la región en la que se ejecuta el trabajo de ajuste. Esta es también la región predeterminada en la que se sube el modelo ajustado.
  • BASE_MODEL: El nombre del modelo de base para ajustar. Valores admitidos: gemini-1.0-pro-002.
  • TRAINING_DATASET_URI: Es el URI de Cloud Storage de tu conjunto de datos de entrenamiento. Tu conjunto de datos debe tener el formato de un archivo JSONL. Para obtener mejores resultados, proporciona al menos entre 100 y 500 ejemplos. Para obtener más información, consulta Acerca de los conjuntos de datos de ajuste supervisado .
  • VALIDATION_DATASET_URIOpcional: Es el URI de Cloud Storage de tu archivo de conjunto de datos de validación.
  • EPOCH_COUNTOpcional: Número de épocas a entrenar. Déjala sin configurar para usar el valor recomendado.
  • LEARNING_RATE_MULTIPLIER: Opcional: Un multiplicador para aplicar a la tasa de aprendizaje recomendada. Déjala sin configurar para usar el valor recomendado.
  • TUNED_MODEL_DISPLAYNAMEOpcional: Un nombre visible para el modelo ajustado. Si no se establece, se genera un nombre aleatorio.

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:

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "training_dataset_uri": "TRAINING_DATASET_URI",
      "validation_dataset_uri": "VALIDATION_DATASET_URI",
      "hyper_parameters": {
          "epoch_count": EPOCH_COUNT,
          "learning_rate_multiplier": LEARNING_RATE_MULTIPLIER
      },
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME,
}

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:

Python


import time

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

sft_tuning_job = sft.train(
    source_model="gemini-1.0-pro-002",
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl",
    epochs=4,
    learning_rate_multiplier=1.0,
    tuned_model_display_name="tuned_gemini_pro",
)

# Polling for job completion
while not sft_tuning_job.has_ended:
    time.sleep(60)
    sft_tuning_job.refresh()

print(sft_tuning_job.tuned_model_name)
print(sft_tuning_job.tuned_model_endpoint_name)
print(sft_tuning_job.experiment)

Console

Para ajustar un modelo de texto con ajuste supervisado mediante la consola de Google Cloud, sigue estos pasos:

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

    Ir a Vertex AI Studio

  2. Haz clic en la pestaña Ajustar y sintetizar.

  3. Haz clic en Crear modelo ajustado.

  4. En Método de ajuste, selecciona el botón de selección para Ajuste supervisado.

  5. En Detalles del modelo, configura lo siguiente:

    1. En el campo Nombre del modelo ajustado, ingresa un nombre para el modelo ajustado nuevo, de hasta 128 caracteres.
    2. En el campo Modelo base, selecciona gemini-1.0-pro-002.
    3. En el campo desplegable Región, selecciona la región en la que se ejecuta el trabajo de ajuste de canalización y en la que se implementa el modelo ajustado.
  6. De manera opcional, expande la flecha desplegable Opciones avanzadas y configura lo siguiente:

    1. En el campo Cantidad de ciclos de entrenamiento, ingresa la cantidad de pasos que se ejecutarán para el ajuste del modelo.
    2. En el campo Multiplicador de tasa de aprendizaje, ingresa un Ingresa el tamaño del paso en cada iteración. El valor predeterminado es 1.
  7. Haz clic en Continuar.

    Se abrirá la página Conjunto de datos de ajuste.

  8. Para subir un archivo de conjunto de datos, selecciona una de las siguientes opciones:

    1. Si aún no subiste un conjunto de datos, selecciona el botón de selección para Subir archivo a Cloud Storage.
    2. En el campo Seleccionar archivo JSONL, haz clic en Explorar y elige tu archivo de conjunto de datos.
    3. En Ubicación del conjunto de datos, haz clic en Explorar y elige el bucket de Cloud Storage en el que deseas almacenar el archivo del conjunto de datos.
    4. Si tu archivo de conjunto de datos ya se encuentra en un bucket de Cloud Storage, selecciona el botón de selección de Archivo existente en Cloud Storage.
    5. En Ruta del archivo de Cloud Storage, haz clic en Explorar y elige el bucket de Cloud Storage en el que se encuentra el archivo de conjunto de datos.
  9. Para obtener métricas de validación durante el entrenamiento, haz clic en el botón de activación Habilitar validación del modelo (opcional).

    1. En el archivo Conjunto de datos de validación, ingresa la ruta de Cloud Storage de tu conjunto de datos de validación.
  10. Haz clic en Iniciar ajuste.

    Tu modelo nuevo aparece en la sección Modelos ajustados de Gemini Pro en la página Ajustar y sintetizar. Cuando el modelo termina de ajustarse, el Estado dice Completado.

Ejemplo del comando curl

PROJECT_ID=myproject
LOCATION=us-central1

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 \
$'{
    "baseModel": "gemini-1.0-pro-002",
    "supervisedTuningSpec" : {
        "training_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
        "validation_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl"
    },
    "tunedModelDisplayName": "tuned_gemini_pro"
}'

En la siguiente tabla, se muestran los parámetros de configuración recomendados para ajustar un modelo de base por tarea:

Tarea Cantidad de ejemplos en el conjunto de datos Cantidad de épocas
Clasificación 500+ 2-4
Resúmenes 1,000+ 2-4
QA de extracción 500+ 2-4
Chat 1,000+ 2-4

Para la cantidad de ciclos de entrenamiento, sugerimos que pruebes más de un valor a fin de obtener el mejor rendimiento en un conjunto de datos en particular. Aumentar la cantidad de ciclos de entrenamiento puede proporcionar mejores resultados. Sin embargo, debes tener cuidado con el sobreajuste, especialmente cuando el conjunto de datos es pequeño y con el número de ciclo de entrenamiento, si eso sucede.

Para las tareas de clasificación, la complejidad de la tarea aumenta con la cantidad de clases. Para una gran cantidad de clases, es posible que necesites conjuntos de datos más grandes.

Visualiza una lista de trabajos de ajuste

Puedes ver una lista de trabajos de ajuste en tu proyecto actual con la consola de Google Cloud, el SDK de Vertex AI para Python o mediante el envío de una solicitud GET con el método tuningJobs.

REST

Para ver una lista de trabajos de ajuste de modelos, envía una solicitud GET mediante el método tuningJobs.list.

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

  • PROJECT_ID: El ID del proyecto.
  • TUNING_JOB_REGION: Es la región en la que se ejecuta el trabajo de ajuste. Esta es también la región predeterminada en la que se sube el modelo ajustado.

Método HTTP y URL:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el siguiente comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-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:

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)

Console

Para ver tus trabajos de ajuste en la consola de Google Cloud, ve a la página Vertex AI Studio.

Ir a Vertex AI Studio

Tus trabajos de ajuste de Gemini se enumeran en la tabla en la sección Modelos ajustados de Gemini Pro.

Obtén detalles de un trabajo de ajuste

Puedes obtener los detalles de un trabajo de ajuste en tu proyecto actual con la consola de Google Cloud, el SDK de Vertex AI para Python o mediante el envío de una solicitud GET con el método tuningJobs.

REST

Para ver una lista de trabajos de ajuste de modelos, envía una solicitud GET con el método tuningJobs.get y especifica TuningJob_ID.

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

  • PROJECT_ID: El ID del proyecto.
  • TUNING_JOB_REGION: Es la región en la que se ejecuta el trabajo de ajuste. Esta es también la región predeterminada en la que se sube el modelo ajustado.
  • TUNING_JOB_ID: Es el ID del trabajo de ajuste.

Método HTTP y URL:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el siguiente comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID"

PowerShell

Ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID" | Select-Object -Expand Content

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

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
# tuning_job_id = "TUNING_JOB_ID"

vertexai.init(project=project_id, location="us-central1")

response = sft.SupervisedTuningJob(
    f"projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}"
)

print(response)

Console

  1. Para ver los detalles de un modelo ajustado en la consola de Google Cloud, ve a la página Generative AI Studio.

    Ir a Vertex AI Studio

  2. En la tabla Modelos ajustados de Gemini Pro, busca tu modelo y haz clic en Detalles.

    Se muestran los detalles de tu modelo.

Cancela un trabajo de ajuste

Puedes cancelar un trabajo de ajuste en tu proyecto actual con la consola de Google Cloud, el SDK de Vertex AI para Python o mediante el envío de una solicitud POST con el método tuningJobs.

REST

Para ver una lista de trabajos de ajuste de modelos, envía una solicitud GET con el método tuningJobs.cancel y especifica TuningJob_ID.

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

  • PROJECT_ID: El ID del proyecto.
  • TUNING_JOB_REGION: Es la región en la que se ejecuta el trabajo de ajuste. Esta es también la región predeterminada en la que se sube el modelo ajustado.
  • TUNING_JOB_ID: Es el ID del trabajo de ajuste.

Método HTTP y URL:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel"

PowerShell

Ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel" | Select-Object -Expand Content

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

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
# tuning_job_id = "TUNING_JOB_ID"

vertexai.init(project=project_id, location="us-central1")

job = sft.SupervisedTuningJob(
    f"projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}"
)
job.cancel()

Console

  1. Para cancelar un trabajo de ajuste en la consola de Google Cloud, ve a la página Vertex AI Studio.

    Ir a Vertex AI Studio

  2. En la tabla Modelos ajustados de Gemini Pro, haz clic en Administrar ejecución.

  3. Haz clic en Cancelar.

Realiza una predicción con el modelo ajustado

REST

Para obtener una predicción con el modelo ajustado de un trabajo de ajuste, envía una solicitud POST y especifica el TUNED_ENDPOINT_ID.

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

  • PROJECT_ID: El ID del proyecto.
  • TUNING_JOB_REGION: Es la región en la que se ejecuta el trabajo de ajuste. Esta es también la región predeterminada en la que se sube el modelo ajustado.
  • ENDPOINT_ID: El ID de extremo del modelo ajustado de la API de GET.
  • TEMPERATURE: La temperatura se usa para las muestras durante la generación de respuesta, que se genera cuando se aplican topP y topK. La temperatura controla el grado de aleatoriedad en la selección de tokens. Las temperaturas más bajas son buenas para los mensajes que requieren una respuesta menos abierta o de creativa, mientras que las temperaturas más altas pueden generar resultados más diversos o creativos. Una temperatura de 0 significa que siempre se seleccionan los tokens de probabilidad más alta. En este caso, las respuestas para un mensaje determinado son, en su mayoría, deterministas, pero es posible que haya una pequeña cantidad de variación.

    Si el modelo muestra una respuesta demasiado genérica, demasiado corta o el modelo proporciona una respuesta de resguardo, intenta aumentar la temperatura.

  • TOP_P: Top-P cambia la manera en la que el modelo selecciona los tokens para el resultado. Los tokens se seleccionan desde el más alto (consulta K superior) hasta el menos probable, hasta que la suma de sus probabilidades sea igual al valor de P superior. Por ejemplo, si los tokens A, B y C tienen una probabilidad de 0.3, 0.2 y 0.1, y el valor P superior es 0.5, el modelo elegirá A o B como el siguiente token mediante la temperatura y excluirá a C como candidato.

    Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias.

  • TOP_K: El parámetro Top-K cambia la manera en la que el modelo selecciona los tokens para el resultado. K superior a 1 significa que el siguiente token seleccionado es el más probable entre todos los tokens en el vocabulario del modelo (también llamado decodificación voraz), mientras que el K superior a 3 significa que el siguiente token se selecciona de los tres tokens más probables mediante la temperatura.

    Para cada paso de selección de tokens, se muestran los tokens de K superior con las probabilidades más altas. Luego, los tokens se filtran según el superior con el token final seleccionado mediante el muestreo de temperatura.

    Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias.

  • MAX_OUTPUT_TOKENS: Cantidad máxima de tokens que se pueden generar en la respuesta. Un token tiene casi cuatro caracteres. 100 tokens corresponden a casi 60 u 80 palabras.

    Especifica un valor más bajo para las respuestas más cortas y un valor más alto para las respuestas potencialmente más largas.

Método HTTP y URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent

Cuerpo JSON de la solicitud:

{
    "contents": [
        {
            "role": "USER",
            "parts": {
                "text" : "Why is sky blue?"
            }
        }
    ],
    "generation_config": {
        "temperature":TEMPERATURE,
        "top_p": TOP_P,
        "top_k": TOP_K,
        "max_output_tokens": MAX_OUTPUT_TOKENS
    }
}

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/endpoints/ENDPOINT_ID:generateContent"

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/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

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

Python

from vertexai.preview.generative_models import GenerativeModel
from vertexai.preview import tuning
from vertexai.preview.tuning import sft

sft_tuning_job = sft.SupervisedTuningJob("projects/<PROJECT_ID>/locations/<TUNING_JOB_REGION>/tuningJobs/<TUNING_JOB_ID>")
tuned_model = GenerativeModel(sft_tuning_job.tuned_model_endpoint_name)
print(tuned_model.generate_content(content))

Console

  1. Para ver los detalles de un modelo ajustado en la consola de Google Cloud, ve a la página Generative AI Studio.

    Ir a Vertex AI Studio

  2. En la tabla Modelos ajustados de Gemini Pro, selecciona Probar.

    Se abrirá una página en la que puedes crear una conversación con tu modelo ajustado.

Ajustes y métricas de validación

Puedes configurar un trabajo de ajuste de modelos para recopilar y, luego, informar el ajuste de modelos y las métricas de evaluación de modelos, que luego se pueden visualizar en la página de Vertex AI Studio.

Métricas de ajuste de modelos

El trabajo de ajuste de modelos recopila de forma automática las siguientes métricas de ajuste para gemini-1.0-pro-002.

  • /train_total_loss: Pérdida del conjunto de datos de ajuste en un paso de entrenamiento
  • /train_fraction_of_correct_next_step_preds: La precisión del token en un paso de entrenamiento. Una predicción individual consiste en una secuencia de tokens. Esta métrica mide la exactitud de los tokens previstos en comparación con la verdad fundamental del conjunto de datos de ajuste.
  • /train_num_predictions: Cantidad de tokens previstos en un paso de entrenamiento

Métricas de validación de modelos:

Puedes configurar un trabajo de ajuste de modelos a fin de recopilar las siguientes métricas de validación para gemini-1.0-pro-002.

  • /eval_total_loss: La pérdida del conjunto de datos de validación en un paso de validación.
  • /eval_fraction_of_correct_next_step_preds: La precisión del token en un paso de evaluación. Una predicción individual consiste en una secuencia de tokens. Esta métrica mide la exactitud de los tokens previstos en comparación con la verdad fundamental del conjunto de datos de evaluación.
  • /eval_num_predictions Cantidad de tokens previstos en un paso de validación.

Las visualizaciones de métricas están disponibles después de que se completa el trabajo de ajuste del modelo. Si no especificas un conjunto de datos de validación cuando creas el trabajo de ajuste, solo las visualizaciones para las métricas de ajuste están disponibles.

¿Qué sigue?