Ajuste personalizado supervisado y de destilación para modelos abiertos

En esta página, se describe cómo realizar el ajuste supervisado y por destilación en modelos abiertos, como Llama 3.1. A menos que se indique lo contrario, las instrucciones de esta página se aplican tanto al ajuste supervisado como al ajuste por destilación. La destilación te permite ajustar un modelo estudiante más pequeño con los resultados de un modelo profesor más grande.

Modos de ajuste admitidos

  • Ajuste supervisado:
    • Ajuste completo
    • Adaptación de bajo rango (LoRA): LoRA es un modo de ajuste eficiente de parámetros que solo ajusta un subconjunto de parámetros. Es más rentable y requiere menos datos de entrenamiento que el ajuste completo. Por otro lado, el ajuste completo tiene un mayor potencial de calidad, ya que ajusta todos los parámetros.
  • Ajuste con datos de destilación: El ajuste con datos de destilación usa el SDK de GenAI, en el que especificas un modelo profesor para generar respuestas que luego se usan para ajustar un modelo estudiante más pequeño.

Casos de uso recomendados para el ajuste de la destilación

El ajuste de la síntesis es más eficaz cuando el modelo profesor es considerablemente más capaz que el estudiante en la tarea objetivo. Se recomienda para transferir capacidades de razonamiento complejas de varios pasos de un profesor más grande a un estudiante más pequeño, lo que incluye lo siguiente:

  • Razonamiento matemático y cuantitativo
  • Búsqueda de respuestas a preguntas científicas, médicas y de otros dominios específicos que requieren un razonamiento paso a paso
  • Otras tareas en las que un modelo profesor sólido con comportamiento de "pensamiento" o de cadena de pensamiento produce de forma constante respuestas de mayor calidad que el estudiante.

La destilación proporciona ganancias más pequeñas en tareas en las que el modelo estudiante ya se desempeña cerca del profesor o en tareas de recuperación de formato corto en las que el registro de razonamiento del profesor no agrega valor.

Modelos compatibles

Modelos compatibles con el ajuste supervisado

  • Gemma 3, 1B IT (google/gemma3@gemma-3-1b-it)
  • Gemma 3 4B IT (google/gemma3@gemma-3-4b-it)
  • Gemma 3, 12B IT (google/gemma3@gemma-3-12b-it)
  • Gemma 3 27B IT (google/gemma3@gemma-3-27b-it)
  • Medgemma 1.5 4B IT (google/medgemma@medgemma-4b-it)
  • Llama 3.1 8B (meta/llama3_1@llama-3.1-8b)
  • Llama 3.1 8B Instruct (meta/llama3_1@llama-3.1-8b-instruct)
  • Llama 3.2 1B Instruct (meta/llama3-2@llama-3.2-1b-instruct)
  • Llama 3.2 3B Instruct (meta/llama3-2@llama-3.2-3b-instruct)
  • Llama 3.3 70B Instruct (meta/llama3-3@llama-3.3-70b-instruct)
  • Qwen 3 4B (qwen/qwen3@qwen3-4b)
  • Qwen 3 8B (qwen/qwen3@qwen3-8b)
  • Qwen 3 14B (qwen/qwen3@qwen3-14b)
  • Qwen 3 32B (qwen/qwen3@qwen3-32b)
  • Llama 4 Scout 17B 16E Instruct (meta/llama4@llama-4-scout-17b-16e-instruct)

Modelos compatibles con el ajuste de la destilación

Modelos de profesores compatibles:

  • DeepSeek R1 0528 MaaS (deepseek-ai/deepseek-r1-0528-maas)
  • DeepSeek V3.2 MaaS (deepseek-ai/deepseek-v3.2-maas)
  • Qwen 3 Next 80B A3B Thinking MaaS (qwen/qwen3-next-80b-a3b-thinking-maas)

Modelos de estudiantes compatibles:

  • Qwen 3 4B (qwen/qwen3@qwen3-4b)
  • Qwen 3 8B (qwen/qwen3@qwen3-8b)
  • Qwen 3 14B (qwen/qwen3@qwen3-14b)
  • Qwen 3 32B (qwen/qwen3@qwen3-32b)
  • Gemma 3, 1B IT (google/gemma3@gemma-3-1b-it)
  • Gemma 3 4B IT (google/gemma3@gemma-3-4b-it)
  • Gemma 3, 12B IT (google/gemma3@gemma-3-12b-it)
  • Gemma 3 27B IT (google/gemma3@gemma-3-27b-it)

Regiones admitidas

  • Iowa (us-central1)
  • Países Bajos (europe-west4)
  • Oregón (us-west1)
  • Columbus (us-east5)
  • Singapur (asia-southeast1)

Limitaciones

Modelo Especificación Valor
Gemma 3 1B IT Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Gemma 3, 4B IT Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Gemma 3 12B IT Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Gemma 3 27B IT Modos de ajuste Ajuste eficiente de parámetros
Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Medgemma 1.5 4B IT Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Llama 3.1 8B Modos de ajuste Ajuste eficiente de parámetros
Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Llama 3.1 8B Instruct Modos de ajuste Ajuste eficiente de parámetros
Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Llama 3.2 1B Instruct Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Llama 3.2 3B Instruct Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Llama 3.3 70B Instruct Modos de ajuste Ajuste eficiente de parámetros
Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Llama 4 Scout 17B 16E Instruct Modos de ajuste Ajuste eficiente de parámetros
Longitud máxima de la secuencia 2,048
Modalidades Texto
Imágenes*

*No se admiten conjuntos de datos mixtos de ejemplos de solo texto y de imágenes. Si hay al menos un ejemplo de imagen en el conjunto de datos, se filtrarán todos los ejemplos que solo contengan texto.
Qwen 3 4B Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Qwen 3 8B Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Qwen 3 14B Modos de ajuste Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto
Qwen 3 32B Modos de ajuste Ajuste eficiente de parámetros
Ajuste completo
Longitud máxima de la secuencia 8192
Modalidades Texto

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Gemini Enterprise Agent Platform and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Gemini Enterprise Agent Platform and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Instala el SDK y, luego, importa las bibliotecas para tu método de ajuste.

Ajuste supervisado

Instala e inicializa el SDK de Vertex AI para Python y, luego, importa las siguientes bibliotecas:

import os
import time
import uuid
import vertexai

vertexai.init(project=PROJECT_ID, location=REGION)

from google.cloud import aiplatform
from vertexai.tuning import sft, SourceModel

Ajuste de la destilación

Instala el siguiente SDK:

pip install google-genai

Luego, importa las siguientes bibliotecas:

import os
import time
import uuid

from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project=PROJECT_ID, location=REGION)

Prepara el conjunto de datos para el ajuste

Se requiere un conjunto de datos de entrenamiento para el ajuste. Te recomendamos que prepares un conjunto de datos de validación opcional si deseas evaluar el rendimiento de tu modelo ajustado.

Tu conjunto de datos debe estar en uno de los siguientes formatos JSON Lines (JSONL) admitidos, en el que cada línea contiene un solo ejemplo de ajuste.

Sube tus archivos JSONL a Cloud Storage.

Conjuntos de datos de solo texto

Completar la instrucción

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

Formato de chat por turnos

{"messages": [
  {"content": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles.",
    "role": "system"},
  {"content": "Summarize the paper in one paragraph.",
    "role": "user"},
  {"content": " Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ...",
    "role": "assistant"}
]}

GenerateContent

{
"systemInstruction": {
  "parts": [{ "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles." }]},
"contents": [
  {"role": "user",
    "parts": [{ "text": "Summarize the paper in one paragraph." }]},
  {"role": "assistant",
    "parts": [{ "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..." }]}
]}

Conjuntos de datos multimodales

Formato de chat por turnos

{"messages": [
  {"role": "user", "content": [
    {"type": "text", "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles."},
    {"type": "image_url", "image_url": {
      "url": "gs://your-gcs-bucket/your-image.jpeg",
      "detail": "low"}}]
  },
  {"role": "assistant", "content": [
    {"type": "text", "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..."}]
  },
  {"role": "user", "content": [
    {"type": "text", "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles."},
    {"type": "image_url", "image_url": {
      "url": "data:image/jpeg;base64,<base64 image>",
      "detail": "low"}}]
  },
  {"role": "assistant", "content": [
    {"type": "text", "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..."}]
  },
]}

GenerateContent

{
"systemInstruction": {
  "parts": [{ "text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles." }]},
"contents": [
  {"role": "user",
    "parts": [
      {"text": "You are a chatbot that helps with scientific literature and generates state-of-the-art abstracts from articles." },
      {"file_data": {
        "mime_type": "image/jpeg", "file_uri": "gs://your-gcs-bucket/your-image.jpeg"}}]
  },
  {"role": "assistant",
    "parts": [{ "text": "Here is a one paragraph summary of the paper:\n\nThe paper describes PaLM, ..." }]}
]}

Los formatos compatibles incluyen imágenes JPEG, PNG, WEBP y codificadas en Base64.

Ten en cuenta que, si tus imágenes se almacenan en un bucket de Cloud Storage diferente de tus archivos JSONL, asegúrate de haber otorgado el rol de Usuario de objetos de almacenamiento (roles/storage.objectUser) de IAM en ambos buckets para estas dos cuentas de servicio:

  • service-PROJECT_NUMBER@gcp-sa-vertex-moss-ft.iam.gserviceaccount.com
  • service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

Crear trabajo de ajuste

Puedes ajustar la sintonización de los siguientes elementos:

  • Un modelo base compatible, como Llama 3.1
  • Un modelo que tiene la misma arquitectura que uno de los modelos básicos admitidos. Puede ser un punto de control de un modelo personalizado de un repositorio como Hugging Face o un modelo ajustado previamente a partir de un trabajo de ajuste de Gemini Enterprise Agent Platform. Esto te permite seguir ajustando un modelo que ya se ajustó.

Consola de Cloud (supervisada)

  1. Puedes iniciar el ajuste fino de las siguientes maneras:

    • Ve a la ficha del modelo, haz clic en Ajustar y elige Ajuste administrado.

    Ir a la tarjeta de modelo de Llama 3.1

    o

    • Ve a la página Ajuste y haz clic en Crear modelo ajustado.

    Ir a Tuning

  2. Completa los parámetros y haz clic en Start tuning.

Esto inicia un trabajo de ajuste, que puedes ver en la página Ajuste en la pestaña Ajuste administrado.

Una vez que finalice el trabajo de ajuste, podrás ver la información sobre el modelo ajustado en la pestaña Detalles.

SDK de Agent Platform (supervisado)

Reemplaza los valores de los parámetros por los tuyos y, luego, ejecuta el siguiente código para crear un trabajo de ajuste:

sft_tuning_job = sft.train(
    source_model=SourceModel(
      base_model="meta/llama3_1@llama-3.1-8b",
      # Optional, folder that is either a custom model checkpoint or previously tuned model
      custom_base_model="gs://{STORAGE-URI}",
    ),
    tuning_mode="FULL", # FULL or PEFT_ADAPTER
    epochs=3,
    train_dataset="gs://{STORAGE-URI}", # JSONL file
    validation_dataset="gs://{STORAGE-URI}", # JSONL file
    output_uri="gs://{STORAGE-URI}",
)

SDK de IA generativa (destilación)

Reemplaza los valores de los parámetros por los tuyos y, luego, ejecuta el siguiente código para crear un trabajo de ajuste de destilación:

tuning_job = client.tunings.tune(
    base_model="qwen/qwen3@qwen3-4b",
    training_dataset=types.TuningDataset(
        gcs_uri="gs://{STORAGE-URI}"
    ),
    config=types.CreateTuningJobConfig(
        method="DISTILLATION",
        base_teacher_model="qwen/qwen3-next-80b-a3b-thinking-maas",
        epoch_count=3,
        validation_dataset=types.TuningValidationDataset(
            gcs_uri="gs://{STORAGE-URI}"
        ),
        output_uri="gs://{STORAGE-URI}",
    ),
)

Artefactos del modelo ajustado

Cuando finaliza el trabajo de ajuste, los artefactos del modelo ajustado se almacenan en tu directorio de salida de Cloud Storage.

gs://<output_dir>/
    # (Distillation tuning only) The labeled dataset from teacher model's inference
    -> distillation_labelled_dataset.jsonl

gs://<output_dir>/postprocess/node-0/checkpoints/
    # Final checkpoint
    -> final/
        -> model-00001-of-000xx.safetensors
        -> model-000yy-of-000xx.safetensors

    # Intermediate checkpoints
    -> checkpoint-M/
        -> model-00001-of-000xx.safetensors
        -> model-000yy-of-000xx.safetensors
        -> checkpoint-N/
        -> model-00001-of-000xx.safetensors
        -> model-000yy-of-000xx.safetensors
  • Se almacenan un máximo de 10 puntos de control.
  • Si la cantidad de épocas (E) es inferior a 10, se almacenan exactamente E puntos de control (uno para cada época).
  • Los puntos de control intermedios del rango M a N están ordenados. Ten en cuenta que los puntos de control intermedios no siempre se numeran de forma consecutiva. Por ejemplo, los puntos de control podrían numerarse como 1, 3, 5 y 10 en lugar de 1, 2, 3 y 4.

Implementa el modelo ajustado

Puedes implementar el modelo ajustado en un extremo de Gemini Enterprise Agent Platform. También puedes exportar el modelo ajustado de Cloud Storage y, luego, implementarlo en otro lugar.

Para implementar el modelo ajustado en un endpoint de Gemini Enterprise Agent Platform, haz lo siguiente:

Consola de Cloud

  1. Ve a la página de Model Garden y haz clic en Implementar modelo con pesos personalizados.

    Ir a Model Garden

  2. Completa los parámetros y haz clic en Implementar.

SDK de Agent Platform para Python

Implementa un G2 machine con un contenedor compilado previamente:

from vertexai.preview import model_garden

MODEL_ARTIFACTS_STORAGE_URI = "gs://{STORAGE-URI}/postprocess/node-0/checkpoints/final"

model = model_garden.CustomModel(
    gcs_uri=MODEL_ARTIFACTS_STORAGE_URI,
)

# deploy the model to an endpoint using GPUs. Cost will incur for the deployment
endpoint = model.deploy(
  machine_type="g2-standard-12",
  accelerator_type="NVIDIA_L4",
  accelerator_count=1,
)

Obtén una inferencia

Una vez que la implementación se realice correctamente, podrás enviar solicitudes al extremo con instrucciones de texto. Ten en cuenta que las primeras instrucciones tardarán más en ejecutarse.

# Loads the deployed endpoint
endpoint = aiplatform.Endpoint("projects/{PROJECT_ID}/locations/{REGION}/endpoints/{endpoint_name}")

prompt = "Summarize the following article. Article: Preparing a perfect risotto requires patience and attention to detail. Begin by heating butter in a large, heavy-bottomed pot over medium heat. Add finely chopped onions and minced garlic to the pot, and cook until they're soft and translucent, about 5 minutes. Next, add Arborio rice to the pot and cook, stirring constantly, until the grains are coated with the butter and begin to toast slightly. Pour in a splash of white wine and cook until it's absorbed. From there, gradually add hot chicken or vegetable broth to the rice, stirring frequently, until the risotto is creamy and the rice is tender with a slight bite.. Summary:"

# Define input to the prediction call
instances = [
    {
        "prompt": "What is a car?",
        "max_tokens": 200,
        "temperature": 1.0,
        "top_p": 1.0,
        "top_k": 1,
        "raw_response": True,
    },
]

# Request the prediction
response = endpoint.predict(
    instances=instances
)

for prediction in response.predictions:
    print(prediction)

Para obtener más detalles sobre cómo obtener inferencias de un modelo implementado, consulta Cómo obtener una inferencia en línea.

Ten en cuenta que los modelos abiertos administrados usan el método chat.completions en lugar del método predict que usan los modelos implementados. Para obtener más información sobre cómo obtener inferencias de modelos administrados, consulta Cómo llamar a un modelo de Llama.

Límites y cuotas

La cuota se aplica a la cantidad de trabajos de ajuste simultáneos. Cada proyecto viene con una cuota predeterminada para ejecutar al menos un trabajo de ajuste. Esta es una cuota global, que se comparte en todas las regiones y modelos compatibles disponibles. Si necesitas ejecutar más trabajos de forma simultánea, debes solicitar una cuota adicional para Global concurrent managed OSS model fine-tuning jobs per project.

Además de la cuota del trabajo de ajuste, el ajuste fino de la destilación usa el modelo de profesor, y tu proyecto debe tener cuota suficiente para el modelo de profesor especificado. Los modelos abiertos que se proporcionan como servicio (MaaS) usan la cuota compartida dinámica. Cuando un trabajo de ajuste llama a un modelo de profesor, consume la cuota compartida del proyecto para ese modelo. Para obtener más información sobre las cuotas de los modelos abiertos administrados, consulta Modelos administrados de Gemini Enterprise Agent Platform para MaaS.

Precios

Se te factura el ajuste según los precios del ajuste de modelos. La cantidad de tokens de entrenamiento se calcula multiplicando la cantidad de tokens en tu conjunto de datos de entrenamiento por la cantidad de épocas. En el caso del ajuste por destilación, también se te facturarán las llamadas a la API realizadas al modelo profesor para generar respuestas, según los precios de los modelos administrados.

También se te facturan los servicios relacionados, como Cloud Storage y Gemini Enterprise Agent Platform Prediction.

Obtén información sobre los precios de Gemini Enterprise Agent Platform y los precios de Cloud Storage. Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

¿Qué sigue?