1. Introducción
Por qué es importante el ajuste fino
Los modelos de base se entrenan para uso general y, a veces, no realizan las tareas como deseas. Esto puede deberse a que las tareas que deseas que realice el modelo son tareas especializadas que son difíciles de enseñar a un modelo solo con el diseño de prompts. En estos casos, puedes usar el ajuste de modelos para mejorar el rendimiento de un modelo en tareas específicas. El ajuste del modelo también puede ayudar a cumplir con los requisitos de salida específicos cuando las instrucciones no son suficientes. Los modelos de lenguaje grandes (LLM) pueden tener una gran cantidad de información y realizar muchas tareas, pero solo se destacan cuando se les proporciona un entrenamiento especializado. El ajuste puede entrenar un LLM, lo que te permite adaptar un LLM entrenado previamente a tus necesidades específicas.
En este codelab, aprenderás a realizar el ajuste con el enfoque de ajuste supervisado para un modelo de LLM.
El ajuste supervisado mejora el rendimiento de un modelo, ya que le enseña una habilidad nueva. Los datos que contienen cientos de ejemplos etiquetados se usan para enseñarle al modelo a imitar un comportamiento o una tarea deseados. Proporcionaremos un conjunto de datos etiquetados para el texto de entrada (instrucción) y el texto de salida (respuesta) para enseñarle al modelo a personalizar las respuestas para nuestro caso de uso específico.
Puedes encontrar más información sobre la personalización de modelos aquí.
Qué compilarás
Caso de uso: Genera títulos para artículos de noticias
Supongamos que deseas generar automáticamente títulos para artículos de noticias. Con Vertex AI, puedes ajustar un LLM que genere un título resumido adecuado en un estilo específico y personalizar el título según los lineamientos del canal de noticias.
En este codelab, realizarás las siguientes acciones:
- Usa
BBC FULLTEXT DATA(disponible en el conjunto de datos públicos de BigQuerybigquery-public-data.bbc_news.fulltext). - Ajusta un LLM (
text-bison@002) para crear un nuevo modelo ajustado llamado "bbc-news-summary-tuned" y compara el resultado con la respuesta del modelo base. Hay un archivo JSONL de muestra disponible para este codelab en el repositorio. Puedes subir el archivo a tu bucket de Cloud Storage y ejecutar los siguientes pasos de ajuste: - Prepara tus datos: Comienza con un conjunto de datos de artículos de noticias y sus títulos correspondientes, como el conjunto de datos de BBC News que se usa en el código de ejemplo.
- Ajusta un modelo previamente entrenado: Elige un modelo base, como "
text-bison@002", y ajústalo con tus datos de noticias usando el SDK de Vertex AI para Python. - Evalúa los resultados: Compara el rendimiento de tu modelo ajustado con el modelo base para ver la mejora en la calidad de la generación de títulos.
- Implementa y usa tu modelo: Pon tu modelo ajustado a disposición a través de un extremo de API y comienza a generar títulos para artículos nuevos de forma automática.
2. Antes de comenzar
- En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
- Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
- Abre Notebook de Colab y accede a la misma cuenta que tu cuenta activa actual de Google Cloud.
3. Ajusta un modelo de lenguaje grande
En este codelab, se usa el SDK de Vertex AI para Python para ajustar el modelo. También puedes realizar un ajuste con las otras opciones: HTTP, comando CURL, SDK de Java y Console.
Puedes ajustar y evaluar tu modelo para obtener respuestas personalizadas en 5 pasos. Puedes consultar el código completo en el archivo llm_fine_tuning_supervised.ipynb del repositorio.
4. Paso 1: Instala y, luego, importa las dependencias
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
Sigue el resto de los pasos como se muestra en el archivo .ipynb del repo. Asegúrate de reemplazar PROJECT_ID y BUCKET_NAME por tus credenciales.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. Paso 2: Prepara y carga los datos de entrenamiento
Reemplaza YOUR_BUCKET por tu bucket y sube el archivo de datos de entrenamiento de muestra TRAIN.jsonl. Los datos de muestra se aprovisionaron para este caso de uso en el vínculo mencionado anteriormente.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
Este paso debería generar el siguiente resultado:

6. Paso 3: Ajusta un modelo de lenguaje grande
En este punto, puedes ajustar cualquier modelo de lenguaje grande (según la disponibilidad de asistencia) . Sin embargo, en este fragmento, ajustamos el modelo previamente entrenado "text-bison@002" con el DataFrame que tiene los datos de entrenamiento que cargamos en el paso anterior:
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
Este paso tardará algunas horas en completarse. Puedes hacer un seguimiento del progreso del ajuste con el vínculo del trabajo de la canalización en el resultado.
7. Paso 4: Realiza predicciones con el nuevo modelo ajustado
Una vez que se complete el trabajo de ajuste, podrás realizar predicciones con tu nuevo modelo. Para realizar predicciones con tu nuevo modelo ajustado, sigue estos pasos:
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Deberías ver el siguiente resultado:

Para realizar predicciones con el modelo base (text-bison@002) y compararlas, ejecuta los siguientes comandos:
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Deberías ver el siguiente resultado:

Si bien ambos títulos generados parecen adecuados, el primero (generado con el modelo ajustado) se adapta mejor al estilo de los títulos que se usan en el conjunto de datos en cuestión.
Carga el modelo ajustado
Puede ser más fácil cargar un modelo que acabas de ajustar. Sin embargo, recuerda que, en el paso 3, se invoca en el alcance del código en sí, por lo que aún contiene el modelo ajustado en la variable tuned_model. Pero, ¿qué sucede si quieres invocar un modelo que se ajustó en el pasado?
Para ello, puedes invocar el método get_tuned_model() en el LLM con la URL completa del ENDPOINT del modelo ajustado implementado desde Vertex AI Model Registry. Ten en cuenta que, en este caso, ingresarás PROJECT_NUMBER y MODEL_NUMBER en lugar de sus respectivos IDs.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. Paso 5: Evalúa el nuevo modelo ajustado
La evaluación es un aspecto fundamental para determinar la calidad y la relevancia de la respuesta generada. Implica examinar el resultado de un modelo de lenguaje generativo para determinar su coherencia, exactitud y alineación con la instrucción proporcionada. La evaluación del modelo ayuda a identificar áreas de mejora, optimizar el rendimiento del modelo y garantizar que el texto generado cumpla con los estándares deseados de calidad y utilidad. Obtén más información en la documentación. Por ahora, veremos cómo podemos obtener algunas métricas de evaluación sobre el modelo ajustado y compararlas con el modelo base.
- Carga el conjunto de datos de EVALUACIÓN:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- Define la especificación de evaluación para una tarea de resumen de texto en el modelo ajustado.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
Este paso tardará unos minutos en completarse. Puedes hacer un seguimiento del progreso con el vínculo del trabajo de la canalización en el resultado. Cuando se complete, deberías ver el siguiente resultado de la evaluación:

La métrica rougeLSum en el resultado de la evaluación especifica la puntuación ROUGE-L para el resumen. ROUGE-L es una métrica basada en la recuperación que mide la superposición entre un resumen y un resumen de referencia. Se calcula tomando la subsecuencia común más larga (LCS) entre los dos resúmenes y dividiéndola por la longitud del resumen de referencia.
La puntuación de rougeLSum en la expresión proporcionada es 0.36600753600753694, lo que significa que el resumen tiene un 36.6% de superposición con el resumen de referencia.
Si ejecutas el paso de evaluación en el modelo de referencia, observarás que la puntuación del resumen es relativamente más alta para el modelo ajustado.
Puedes encontrar los resultados de la evaluación en el directorio de salida de Cloud Storage que especificaste cuando creaste el trabajo de evaluación. El archivo se llama evaluation_metrics.json. Para los modelos ajustados, también puedes ver los resultados de la evaluación en la consola de Google Cloud en la página Model Registry de Vertex AI.
9. Consideraciones importantes
- Compatibilidad con modelos: Siempre consulta la documentación del modelo para conocer la compatibilidad más reciente.
- Desarrollo rápido: El campo de los LLM avanza rápidamente. Un modelo más nuevo y potente podría superar a un modelo ajustado creado sobre una base más antigua. La buena noticia es que puedes aplicar estas técnicas de ajuste a modelos más nuevos cuando la capacidad esté disponible.
- LoRA: LoRA es una técnica para ajustar LLMs de manera eficiente. Para ello, introduce matrices de descomposición de rango bajo entrenables en las capas del modelo preentrenado existente. Obtén más información aquí. En lugar de actualizar todos los parámetros de un LLM masivo, LoRA aprende matrices más pequeñas que se agregan o multiplican con las matrices de pesos del modelo original. Esto reduce significativamente la cantidad de parámetros adicionales que se introducen durante el ajuste.
10. Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este codelab:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
- Como alternativa, puedes ir a Model Registry, navegar a la pestaña de implementación y prueba del modelo, anular la implementación del extremo y borrar el modelo ajustado implementado.
11. Felicitaciones
¡Felicitaciones! Usaste Vertex AI correctamente para ajustar un modelo de LLM. El ajuste fino es una técnica potente que te permite personalizar los LLM para tu dominio y tus tareas. Con Vertex AI, tienes las herramientas y los recursos que necesitas para ajustar tus modelos de forma eficiente y eficaz.
Explora los repositorios de GitHub y experimenta con el código de muestra para conocer de primera mano el ajuste fino y la evaluación. Considera cómo los LLM ajustados pueden abordar tus necesidades específicas, desde generar textos de marketing segmentados hasta resumir documentos complejos o traducir idiomas con matices culturales. Utiliza el conjunto integral de herramientas y servicios que ofrece Vertex AI para compilar, entrenar, evaluar e implementar tus modelos ajustados con facilidad.