Tutorial: Cómo hacer fine-tuning a GPT-3.5 de OpenAI
Bienvenidos a este tutorial completo sobre cómo hacer fine-tuning al modelo GPT-3.5 de OpenAI. Hoy vamos a abordar los beneficios del fine-tuning, los pasos recomendados por OpenAI y un ejemplo práctico para que puedas hacerlo tú mismo. ¡Vamos al grano!
Si prefieres ver este tutorial en formato vídeo, puedes revisarlo aquí:
¿Por qué hacer fine-tuning?
Beneficios del fine-tuning
OpenAI ha dado la posibilidad de que GPT-3.5 pueda ser fine-tuneado, permitiendo a los desarrolladores utilizar sus propias bases de datos para personalizar el modelo según sus necesidades.
- Mejor Manejo del Modelo: El fine-tuning permite que el modelo siga instrucciones de manera más precisa, como entregar respuestas más concisas o responder de una manera específica según el lenguaje dado.
- Aumento de la Confianza en el Formato de los Outputs: Con el fine-tuning, el modelo puede formatear respuestas de manera más consistente, lo cual es crucial en aplicaciones donde se necesitan formatos específicos como JSON.
- Personalización del Tono de los Outputs: Esta es una excelente manera de adaptar el modelo a la voz y tono de una marca o empresa
- Ahorro de tokens. Al usar indicaciones más cortas, ahorras tokens, lo cual es una ventaja no menor.
Consideraciones Adicionales
El fine-tuning es aún más poderoso cuando se combina con otros métodos como Information Retrieval o Function Calling. OpenAI ofrece guías adicionales para implementar estas características.
Es importante considerar cuándo es más apropiado usar fine-tuning en lugar de otras estrategias. Recomendamos primero intentar obtener buenos resultados con ingeniería de indicaciones (prompt engineering) antes de aventurarse en el fine-tuning.
Cómo Hacer Fine-Tuning: Pasos a seguir
OpenAI recomienda seguir cuatro pasos básicos para realizar el fine-tuning.
Instalación y configuración
Primero, instala las librerías necesarias y configura tu API Key de OpenAI.
%pip install openai tiktoken langchain
import config
import os
os.environ['OPENAI_API_KEY'] = config.OPENAI_API_KEY
Paso 1: Preparar los Datos
Antes de subir tus datos, asegúrate de que cumplan con los formatos específicos requeridos por OpenAI. En general, este paso es el que más tiempo de dedicación necesitará.
Formato Requerido
OpenAI entrega un ejemplo de cómo deberían verse las conversaciones de entrenamiento:
{
"messages": [
{ "role": "system", "content": "You are an assistant that occasionally misspells words" },
{ "role": "user", "content": "Tell me a story." },
{ "role": "assistant", "content": "One day a student went to schoool." }
]
}
Para el fine-tuning, se requiere un mínimo de 10 ejemplos. Sin embargo, generalmente vemos mejoras claras con 50 a 100 ejemplos.
Adicionalmente, OpenAI nos entrega scripts que podemos utilizar para estimar el costo del fine-tuning y validar si el formato de nuestra base de datos cumple los requerimientos.
- Training: $0.008 / 1K Tokens
- Usage input: $0.012 / 1K Tokens
- Usage output: $0.016 / 1K Tokens
Paso 2: Subir los Datos a los Servidores de OpenAI
Una vez que tus datos estén listos y en el formato correcto, el siguiente paso es subirlos a los servidores de OpenAI. Puedes usar File
de la librería openai
. A continuación te mostramos un ejemplo donde hacemos el ejercicio de subir un llamado dataset_ejemplos.jsonl.
response_file = openai.File.create(
file=open('dataset_ejemplos.jsonl','rb'),
purpose='fine-tune'
)
En el ejemplo response_file
tiene toda la información de la solicitud creada a los servidores de OpenAI. Entre ellos, te sugerimos guardar el atributo id
, pues lo necesitarás.
Paso 3: Crear el Trabajo de Fine-Tuning
En este paso se crea el trabajo de fine-tuning utilizando los datos subidos. Es aquí donde se decide qué modelo se va a fine-tunear y con qué parámetros. Además entregamos el id
del archivo que usaremos en el fine-tuning. Esto lo hacemos con FineTuningJob
de la librería openai
. A continuación un ejemplo usando el id
que recibimos como respuesta en el caso anterior.
response = openai.FineTuningJob.create(training_file=response_file.id,
model="gpt-3.5-turbo",
suffix='nombre-modelo',
hyperparameters={'n_epochs':4})
El argumento suffix
nos permite agregar un sufijo al id
del modelo fine-tuneado. Recomendamos usarlo para gestionar mejor tus trabajos de fine-tuning.
Paso 4: Utilizar el Modelo Fine-Tuneado
Una vez que OpenAI confirma que el fine-tuning ha terminado por medio de un correo (ver Figura 1), podrás empezar a utilizar tu nuevo modelo. Para esto usas el id
que OpenAI le asigna al modelo fine-tuneado. Por ejemplo, con langchain
y asumiendo que el id
entregado es ft:gpt-3.5-turbo-0613:evo-academy:burro-shrek
, hacemos un llamado de la siguiente manera:
chat = ChatOpenAI(model='ft:gpt-3.5-turbo-0613:evo-academy:burro-shrek',
temperature=0.0)
print(chat('Hola burro! Cómo estás?')
Ejemplo Práctico
Para hacer todo esto más fácil de entender, hemos preparado un Notebook con un ejemplo práctico. Puedes encontrar el Notebook aquí, el cual contiene un ejemplo donde le enseñamos a ChatGPT a hablar como el Burro de Shrek. Si aún te quedan dudas, puedes revisar el tutorial en formato vídeo al principio de este post.
Conclusión
Esperamos que este tutorial te haya sido de ayuda para entender cómo realizar un fine-tuning exitoso con GPT-3.5 de OpenAI.
Preguntas Frecuentes (FAQ)
¿Cómo sé si mi modelo afinado es mejor que el modelo base?
Recomendamos generar muestras tanto del modelo base como del modelo afinado en un conjunto de prueba de conversaciones de chat, y comparar las muestras lado a lado.
¿Puedo seguir afinando un modelo que ya ha sido afinado?
No, actualmente no se permite continuar el proceso de fine-tuning una vez que un trabajo ha terminado.