1. Introducción
Por qué es importante el ajuste
Los modelos de base se entrenan para un uso general y, a veces, no realizan las tareas como quisieras. Esto podría deberse a que las tareas que quieres que realice el modelo son tareas especializadas que son difíciles de enseñar a un modelo usando solo el diseño de instrucciones. En estos casos, puedes usar el ajuste del modelo para mejorar su rendimiento en tareas específicas. El ajuste del modelo también puede ayudar a cumplir con requisitos específicos de salida cuando las instrucciones no son suficientes. Los modelos grandes de lenguaje (LLM) pueden tener una gran cantidad de información y realizar muchas tareas, pero se destacan solo cuando se les proporciona una capacitación especializada. Con el ajuste, se puede entrenar un LLM, lo que te permite adaptar uno previamente entrenado según tus necesidades específicas.
En este codelab, aprenderás a realizar ajustes con el enfoque de ajuste supervisado para un modelo de LLM.
El ajuste supervisado mejora el rendimiento de un modelo, ya que enseña una nueva habilidad. 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 etiquetado 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.
Aquí encontrarás más información sobre la personalización de modelos.
Qué compilarás
Caso de uso: Genera titulares para artículos de noticias
Supongamos que deseas generar automáticamente titulares de artículos de noticias. Con Vertex AI, puedes ajustar un LLM que genere un título resumido adecuado con un estilo específico y personalice el título según los lineamientos del canal de noticias.
En este codelab, realizarás lo siguiente:
- Usa
BBC FULLTEXT DATA
(facilitado por el conjunto de datos públicos de BigQuerybigquery-public-data.bbc_news.fulltext
). - Ajusta un LLM (
text-bison@002
) para un nuevo modelo ajustado llamado “bbc-news-summary-tuned
” y compararás 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 titulares correspondientes, como el conjunto de datos de la BBC News que se usa en el código de ejemplo.
- Optimiza un modelo previamente entrenado: Elige un modelo base, como “
text-bison@002
”. y ajustarlo con tus datos de noticias con 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: Haz que tu modelo ajustado esté disponible a través de un extremo de API y comienza a generar títulos para artículos nuevos automáticamente.
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 el Notebook de Colab y accede a la misma cuenta que tienes en tu cuenta de Google Cloud activa actual.
3. Ajusta un modelo de lenguaje extenso
En este codelab, se usa el SDK de Vertex AI para Python para ajustar el modelo. También puedes realizar ajustes con otras opciones: HTTP, comando CURL, SDK de Java, 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 en el repositorio. 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 con tu bucket y sube allí el archivo de datos de entrenamiento TRAIN.jsonl de muestra. 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)
Con este paso, se debería generar lo siguiente:
6. Paso 3: Ajusta un modelo de lenguaje extenso
En este momento, puedes ajustar cualquier modelo grande de lenguaje (según la disponibilidad de la compatibilidad) . Sin embargo, en este fragmento ajustamos el modelo previamente entrenado “text-bison@002” con el marco de datos 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á unas horas en completarse. Puedes hacer un seguimiento del progreso del ajuste mediante el vínculo del trabajo de canalización en el resultado.
7. Paso 4: Realiza predicciones con el nuevo modelo ajustado
Cuando se complete el trabajo de ajuste, podrás realizar predicciones con tu modelo nuevo. Sigue estos pasos para realizar predicciones con tu nuevo modelo ajustado:
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:
Si quieres predecir con el modelo base (text-bison@002
) para la comparación, 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:
Aunque ambos títulos generados parecen apropiados, el primero (generado con el modelo ajustado) está más en sintonía con el estilo de los títulos usados en el conjunto de datos en cuestión.
Carga el modelo ajustado
Tal vez sea más fácil cargar un modelo que acabas de ajustar. Pero recuerda que, en el paso 3, se invoca en el alcance del código en sí, por lo que aún conserva el modelo ajustado en la variableadjust_model. Pero ¿qué sucede si deseas 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 ENDPOINT completa del modelo ajustado que se implementó desde Vertex AI Model Registry. Tenga en cuenta que, en este caso, debe ingresar el PROJECT_NUMBER y el MODEL_NUMBER en lugar de sus respectivos ID.
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 evaluar 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 en cuanto a calidad y utilidad. Obtén más información al respecto en la documentación. Por ahora, veremos cómo podemos obtener algunas métricas de evaluación en el modelo ajustado y compararlas con el modelo base.
- Carga el conjunto de datos EVALUATION:
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 mediante el vínculo del trabajo de canalización en el resultado. Una vez finalizada, 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. Para calcularlo, se divide la subsecuencia común (LCS) más larga entre los dos resúmenes por la longitud del resumen de referencia.
La puntuación rougeLSum
en la expresión proporcionada es 0.36600753600753694, lo que significa que el resumen se superpone en un 36.6% con el resumen de la 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 nombre del archivo es 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 el modelo: Siempre revisa la documentación del modelo para obtener la compatibilidad más reciente.
- Desarrollo rápido: El campo de los LLM avanza con rapidez. Un modelo más nuevo y más potente podría tener un mejor rendimiento que un modelo más refinado creado sobre una base anterior. La buena noticia es que puedes aplicar estas técnicas de ajuste a los modelos más nuevos cuando la capacidad esté disponible.
- LoRA: Es una técnica para ajustar eficientemente los LLM. Para ello, introduce matrices de descomposición de rango bajo entrenables en las capas existentes del modelo previamente entrenado. 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 peso del modelo original. Esto reduce significativamente la cantidad de parámetros adicionales que se ingresan 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 que se implementó.
11. Felicitaciones
¡Felicitaciones! Usaste Vertex AI de forma correcta para ajustar un modelo de LLM. El ajuste 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 manera eficiente y eficaz.
Explora los repositorios de GitHub y experimenta con el código de muestra para experimentar la evaluación y la evaluación directamente. 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. Usa el paquete integral de herramientas y servicios que ofrece Vertex AI para compilar, entrenar, evaluar y, luego, implementar tus modelos ajustados con facilidad.