Antes de lanzar un fine-tuning en OpenAI, necesitas verificar que tu dataset esté bien formateado y calcular cuántos tokens consumirá el entrenamiento. Esa validación previa te ahorra errores, dinero y horas de depuración, sobre todo si trabajas con modelos como GPT-3.5 Turbo.
La lógica es simple: tu modelo será tan bueno como la calidad de los datos que le entregues. Si entra basura, sale basura. Por eso este flujo te interesa si estás afinando un modelo conversacional y quieres asegurar que cada ejemplo tenga su rol, su contenido y un consumo de tokens razonable.
¿Qué librerías necesitas para validar un dataset de fine-tuning?
Todo el flujo se apoya en utilidades pequeñas pero específicas, varias de ellas tomadas del OpenAI cookbook, que documenta paso a paso cómo preparar datos para fine-tuning.
- tiktoken: librería oficial de OpenAI para contar tokens igual que lo hace el modelo en producción.
- json: para cargar tu archivo
.jsonl línea por línea.
- numpy: para calcular distribuciones, mínimos, máximos y medianas sobre los ejemplos.
- collections.defaultdict: para manipular diccionarios al revisar roles y mensajes.
Una vez instaladas, cargas el dataset desde la variable data_path apuntando al archivo de entrenamiento. El script del cookbook te imprime cuántos ejemplos tienes y muestra el primero, con su system, user y assistant. En la clase, por ejemplo, se cargan 1,261 ejemplos y se confirma que cada uno tiene su contenido por rol [3:00].
¿Cómo se valida el formato de un dataset JSONL para OpenAI?
La validación de formato revisa que ningún ejemplo tenga roles faltantes, contenidos vacíos o llaves no reconocidas. Si tu archivo está bien, el script no devuelve mensajes de error.
¿Qué pasa si mi dataset tiene un mensaje vacío? El modelo aprenderá de ese vacío y degradará su desempeño. Tienes que localizar el registro y completarlo o eliminarlo antes de entrenar.
El cookbook tiene una sección llamada Format validation donde lista los escenarios típicos: tipos de datos incorrectos, ausencia de la lista messages, llaves desconocidas dentro de cada mensaje, o roles y contenidos inexistentes. Si tu script imprime alguno de esos avisos, abres el dataset, ubicas el registro problemático y lo corriges manualmente [4:30].
¿Qué errores son los más comunes al preparar datos?
En la práctica, los errores que más aparecen son tres y todos se resuelven antes de subir el archivo a OpenAI.
- Mensajes sin el rol
system, que es el que define cómo debe responder el modelo.
- Ejemplos donde falta el
user o el assistant, lo que rompe la estructura conversacional.
- Contenido vacío en cualquiera de los roles, lo que enseña al modelo a responder con nada.
Después de pasar esta validación, recién tiene sentido contar tokens.
¿Cómo cuento los tokens y detecto warnings en mi dataset?
El cookbook incluye utilidades para contar tokens con tiktoken. Esas funciones por sí solas no devuelven nada, pero alimentan el bloque siguiente, donde sí obtienes la radiografía completa del dataset.
Al ejecutar el conteo, el script te muestra la distribución de mensajes por ejemplo (mínimo, máximo, mediana), la distribución de tokens totales, y los tokens específicos en mensajes del assistant, que reflejan qué tan verboso es tu modelo al responder. También te avisa si algún ejemplo supera el límite de 4,096 tokens por mensaje, que es el tope para fine-tuning [6:45].
¿Qué hago si un ejemplo excede los 4,096 tokens? Divídelo en dos ejemplos más cortos o reescribe una versión condensada que conserve la intención del diálogo.
Esta sección, llamada Data warnings and token counts en el cookbook, también detecta si falta algún system o user message, algo crítico porque sin esos roles el modelo no aprende nada útil durante el fine-tuning.
¿Cómo estimo el costo de un fine-tuning antes de entrenar?
Acá viene lo interesante. El script aplica varios parámetros por defecto que vienen directo de OpenAI y que definen el cálculo final.
- Máximo de 4,096 tokens por ejemplo.
- 3 epochs de entrenamiento por defecto.
- Mínimo de 100 ejemplos y máximo de 250,000 ejemplos por dataset.
- Rango de epochs entre 1 y 25, ajustado automáticamente para optimizar el desempeño.
Con el dataset de la clase, el conteo arroja unos 168,000 tokens por epoch. Multiplicado por los 3 epochs por defecto, el entrenamiento consume aproximadamente 506,000 tokens [10:15].
¿Cuánto cuesta entrenar GPT-3.5 Turbo con ese volumen?
Vas a la página de pricing de OpenAI, bajas hasta la sección fine-tuning models y buscas el modelo que vas a afinar. Para GPT-3.5 Turbo, el entrenamiento cuesta 0.0080 dólares por cada 1,000 tokens.
Con los 506,000 tokens del ejemplo, el costo aproximado de entrenamiento es de 4 dólares. Aparte tendrás que considerar los costos de input (mensajes que mandas al modelo) y de output (respuestas que genera), que aparecen en columnas separadas en la misma tabla de precios.
Este cálculo lo deberías hacer cada vez que vayas a entrenar, porque cambia según el modelo, el tamaño del dataset y el número de epochs efectivos.
Reto: valida tu dataset de validación
Ya revisaste y costeaste el dataset de entrenamiento, pero falta replicar el ejercicio con data-val.jsonl, que es tu dataset de validación. Aplica la misma validación de formato, cuenta los tokens y estima el costo.
¿Cuántos tokens consumió tu validación y cuánto pagarías por entrenar con ese archivo? Cuéntamelo en los comentarios.