Esta publicación forma parte del Calendario de Adviento AI 2023, una iniciativa liderada por Héctor Pérez, Alex Rostan, Pablo Piovano y Luis Beltrán. Consulta este enlace para obtener más artículos interesantes sobre IA creados por la comunidad.
En preparación para mi próxima participación en la Global AI Conference 2023 con el tema Fine-tuning de un modelo de Azure Open AI: Lecciones aprendidas, veamos cómo personalizar un modelo con tus propios datos usando Azure Open AI.
Antes que nada, una definición.
Me gusta la definición presentada aquí. Fine-tuning es:
el proceso que toma un modelo que ya ha sido entrenado para una tarea determinada y luego ajusta o modifica el modelo para que realice una segunda tarea similar.
Es una forma de aplicar transferencia de aprendizaje, una técnica que utiliza el conocimiento adquirido al resolver un problema y lo aplica a un problema nuevo pero relacionado.
Azure Open AI y fine-tuning
Azure Open AI es una plataforma basada en la nube que permite crear e implementar modelos de IA generativa de forma rápida y sencilla. Una de las capacidades de este servicio es el fine-tuning de modelos previamente entrenados con tus propios datasets. Algunas ventajas incluyen:
- Lograr mejores resultados que prompt-engineering.
- Requiere menos texto (por lo tanto, se procesan menos tokens en cada llamada API)
- Ahorro de costos, disminuyendo la latencia de las solicitudes.
¿Qué necesitas?
- Una suscripción de Azure con acceso a los servicios de Azure Open AI.
- Un recurso de Azure Open AI creado en una de las regiones admitidas para realizar fine-tuning, con un modelo compatible.
- El rol de Cognitive Services OpenAI Contributor.
- El elemento más importante a considerar: ¿Realmente necesitas afinar un modelo? Lo discutiré durante mi charla la próxima semana, por el momento puedes leer sobre ello aquí.
Hagamos fine-tuning de un modelo con Azure OpenAI Studio.
Pasos
- Crea un recurso de Azure Open AI.
- Prepara tus datos.
- Utiliza el asistente Crear modelo personalizado de Azure OpenAI Studio.
- Espera hasta que se entrene el modelo.
- Implementa tu modelo personalizado para su uso.
- Úsalo.
¡Vamos a hacerlo!
Paso 1. Crear un recurso de Azure Open AI
Utiliza el asistente para crear un recurso de Azure Open AI. Sólo hay que tener cuidado con la región. Actualmente, solo North Central US y Sweden Central admiten la capacidad de fine-tuning, así que elige cualquiera de ellos.
Una vez creado el recurso, accede a Azure OpenAI Studio.
Paso 2. Prepara tus datos.
Debes preparar dos conjuntos de datos: uno para entrenamiento y otro para validación. Cada uno de ellos contiene muestras de entradas y su salida esperada en formato JSONL (JSON Lines). Sin embargo, según el modelo base que implementaste, necesitarás propiedades específicas para cada elemento:
- Si estás haciendo fine-tuning de modelos recientes, como GPT 3.5 Turbo, aquí tienes un ejemplo del formato de archivo.
{"messages": [{"role": "system", "content": "You are a helpful recipe assistant. You are to extract the generic ingredients from each of the recipes provided."}, {"role": "user", "content": "Title: No-Bake Nut Cookies\n\nIngredients: [\"1 c. firmly packed brown sugar\", \"1/2 c. evaporated milk\", \"1/2 tsp. vanilla\", \"1/2 c. broken nuts (pecans)\", \"2 Tbsp. butter or margarine\", \"3 1/2 c. bite size shredded rice biscuits\"]\n\nGeneric ingredients: "}, {"role": "assistant", "content": "[\"brown sugar\", \"milk\", \"vanilla\", \"nuts\", \"butter\", \"bite size shredded rice biscuits\"]"}]}
{"messages": [{"role": "system", "content": "You are a helpful recipe assistant. You are to extract the generic ingredients from each of the recipes provided."}, {"role": "user", "content": "Title: Jewell Ball'S Chicken\n\nIngredients: [\"1 small jar chipped beef, cut up\", \"4 boned chicken breasts\", \"1 can cream of mushroom soup\", \"1 carton sour cream\"]\n\nGeneric ingredients: "}, {"role": "assistant", "content": "[\"beef\", \"chicken breasts\", \"cream of mushroom soup\", \"sour cream\"]"}]}
Considera que para cada elemento (línea) se proporciona un elemento messages
que contiene un arreglo de pares rol-content
para system
(el comportamiento), user
(la entrada) y assistant
(la salida).
- Por otro lado, si estás haciendo fine-tuning de modelos antiguos (como Babbage o Davinci), aquí tienes un formato de archivo de ejemplo que funciona con ambos:
{"prompt": "You guys are some of the best fans in the NHL", "completion": "hockey"}
{"prompt": "The Red Sox and the Yankees play tonight!", "completion": "baseball"}
{"prompt": "Pelé was one of the greatest", "completion": "soccer"}
Observa que cada elemento contiene un par prompt-completion
que representa la entrada y la salida deseada que nos gustaría que genere el modelo personalizado.
Puedes encontrar más información sobre JSON Lines aquí.
Para generar un archivo JSONL, existen varios métodos:
De forma manual: escribe una aplicación que crea un archivo de texto (con extensión
.jsonl
), luego itera tu dataset y serializa cada elemento en una cadena JSON (no olvides que necesitas propiedades específicas). Escribe cada cadena JSON en una nueva línea del archivo creado recientemente.Mediante librerías: dependiendo del lenguaje de programación que estés utilizando, es muy probable que existan algunas bibliotecas que puedan exportar tus datos en formato JSONL. Por ejemplo,
jsonlines
para Python.Mediante un sitio web: existen algunos sitios web que pueden convertir tus datos
Excel
,SQL
,CSV
(y otros) al formato JSONL, por ejemplo Table Convert o Code Beautify.
Por cierto, aquí tienes algunas características de JSONL:
- Cada línea es un elemento JSON válido
- Cada línea está separada por un carácter \n
- El archivo está codificado usando UTF-8
Además, para el uso de Azure Open AI, el archivo debe incluir una marca de orden de bytes (BOM).
Paso 3. Utiliza el asistente para crear un modelo personalizado de Azure OpenAI Studio.
Sólo algunos modelos se pueden personalizar. A fecha de hoy, los modelos babbage-002, davinci-002 y gpt-35-turbo admiten esta función.
En Azure Open AI Studio, haz clic en Modelos y luego en Crear un modelo personalizado.
Aparece un asistente. En primer lugar, debes seleccionar uno de los modelos admitidos para realizar fine-tuning, que se utilizará como base para la personalización.
Para este ejemplo, he seleccionado gpt-35-turbo
. El sufijo es opcional, aunque facilita la identificación del modelo generado por lo que se recomienda proporcionarlo. Haz clic en Siguiente.
Ahora, debes proporcionar un archivo JSONL
, que sirve como conjunto de datos de entrenamiento. Puedes seleccionar un archivo local o ingresar la dirección URL de un recurso público en línea (como un blob de Azure o una ubicación web).
Para este ejemplo, he elegido un archivo JSONL
local que contiene ejemplos de un útil asistente virtual que extrae ingredientes genéricos de una receta proporcionada. Haz clic en Cargar archivo y una vez completada la tarea, haz clic en Siguiente.
Ahora, debes proporcionar el archivo/recurso JSONL
para el conjunto de datos de validación. Para este ejemplo, he elegido otro archivo JSONL
local con ejemplos de un útil asistente virtual que extrae ingredientes genéricos de una receta proporcionada. Haz clic en Cargar archivo y luego en Siguiente una vez que finalice el proceso.
Luego, puedes configurar opciones avanzadas, como el número de épocas para entrenar el modelo. Mantengamos el valor Predeterminado para este ejemplo y hagamos clic en Siguiente.
Finalmente, se presenta un resumen con las opciones seleccionadas en los pasos anteriores. Haz clic en Iniciar trabajo de entrenamiento.
Paso 4. Espera hasta que el proceso finalice.
Puedes comprobar el estado del trabajo de entrenamiento del modelo en la pestaña Modelos personalizados del menú Modelos.
Haz clic en el botón Actualizar para ver el progreso actual de la tarea.
Entrenar el modelo llevará algún tiempo dependiendo de la cantidad de datos proporcionados, la cantidad de épocas, el modelo base y otros parámetros seleccionados para la tarea. Además, dado que tu trabajo entra en una cola, es posible que el servidor esté manejando tareas de entrenamiento de otros usuarios, lo que provoca que el proceso se retrase.
Una vez que veas que el estado es Success
, significa que se ha creado tu modelo personalizado y ajustado. ¡Bien hecho!
Sin embargo, se necesita un paso adicional antes de poder intentar usarlo.
Paso 5. Implementa tu modelo personalizado para su uso.
Selecciona el modelo creado recientemente y luego haz clic en el botón Implementar.
Luego, agrega un nombre de implementación. También puedes cambiar la versión del modelo en caso de que el modelo haya sido personalizado varias veces. Haz clic en Crear.
Puedes monitorear el progreso de la implementación en el menú Implementaciones:
Cuando finalice el trabajo (Estado = Success), estarás listo para utilizar este modelo.
Paso 6. Úsalo.
Puedes utilizar el modelo implementado para realizar inferencias en cualquier lugar: en una aplicación que desarrolles, en Playground, como parte de una solicitud de API, etc. Por ejemplo:
Como puedes ver, el proceso para hacer fine-tuning de un modelo de Open AI utilizando Azure es bastante sencillo y ofrece varios beneficios. Sin embargo, también debes considerar si esta es la mejor solución para tus necesidades. Asiste a mi sesión en la Global AI Conference el 12 de diciembre para obtener más información al respecto.
Bueno, esta fue una publicación larga pero espero que también te haya sido útil. Recuerda seguir el resto de publicaciones interesantes del Calendario de Adviento AI 2023. También puedes seguir la conversación en Twitter con el hashtag #AdvientoAI.
Gracias por leer. ¡Hasta la proxima vez!
Luis