Ajusta los modelos de LLM de traducción con el ajuste supervisado

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

Antes de comenzar

Antes de comenzar, debes preparar un conjunto de datos de ajuste fino supervisado. Según tu caso de uso, existen diferentes requisitos.

Modelos compatibles

  • translation-llm-002 (en versión preliminar, solo admite el ajuste de texto)

Crea un trabajo de ajuste.

Puedes crear un trabajo de ajuste supervisado con la API de REST o el SDK de Vertex AI para Python.

REST

Para crear un trabajo de ajuste de modelos, envía una solicitud POST mediante 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:

  • 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. Región admitida: us-central1.
  • BASE_MODEL: Es el nombre del modelo de traducción que se ajustará. Valores admitidos: translation-llm-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 del conjunto de datos de ajuste supervisado .
  • VALIDATION_DATASET_URIOpcional: Es el URI de Cloud Storage de tu archivo de conjunto de datos de validación.
  • 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" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
  },
  "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:

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": "translation-llm-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_translation_llm"
}'

Python

from vertexai.generative_models import GenerativeModel

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))

import time

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line.
# PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"]
vertexai.init(project=PROJECT_ID, location="us-central1")

sft_tuning_job = sft.train(
  source_model="translation-llm-002",
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_validation_data.jsonl",
    tuned_model_display_name="tuned_translation_llm_002",
)

# 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)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# <google.cloud.aiplatform.metadata.experiment_resources.Experiment object at 0x7b5b4ae07af0>

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.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7c85287b2680>
# resource name: projects/12345678/locations/us-central1/tuningJobs/123456789012345

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 LLM de traducción se enumeran en la tabla en la sección Modelos ajustados de LLM de traducción.

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.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
response = sft.SupervisedTuningJob(
    f"projects/{PROJECT_ID}/locations/{LOCATION}/tuningJobs/{tuning_job_id}"
)

print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7cc4bb20baf0>
# resource name: projects/1234567890/locations/us-central1/tuningJobs/4982013113894174720

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 LLM de traducción, 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.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
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 Translation, haz clic en Administrar ejecución.

  3. Haz clic en Cancelar.

Prueba el modelo ajustado con un mensaje

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

En el siguiente ejemplo, se le presenta al modelo la pregunta "¿Por qué el cielo es azul?".

REST

Para probar un modelo ajustado con un mensaje, 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.

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" : "English: Hello. Spanish:"
            }
        }
    ],
}

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.generative_models import GenerativeModel

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))

Ajustes y métricas de validación

Puedes configurar un trabajo de ajuste de modelos para recopilar e informar los ajustes y métricas de evaluación del modelo, que luego se pueden visualizar Vertex AI Studio.

  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 Ajustar y sintetizar, haz clic en el nombre del modelo ajustado del que deseas ver las métricas.

    Las métricas de ajuste aparecen en la pestaña Supervisar.

Métricas de ajuste de modelos

El trabajo de ajuste de modelos recopila de forma automática las siguientes métricas de ajuste para translation-llm-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 translation-llm-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 inicia el trabajo de ajuste. Se actualizará en tiempo real a medida que avance el ajuste. 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?