Cómo hacer ajuste fino de un LLM [y cuándo usar RAG o prompts en su lugar]
Esta guía explica cómo hacer ajuste fino de un LLM paso a paso, compara el ajuste fino completo con LoRA y QLoRA, y muestra cuándo el uso de prompts o RAG es la mejor forma de mejorar los resultados de un modelo.

Hacer ajuste fino (fine-tuning) de un modelo de lenguaje grande (LLM) significa refinar un LLM preentrenado con un conjunto de datos pequeño y específico para una tarea, de modo que genere salidas que no podrías obtener solo con prompts.
El ajuste fino consiste en reunir pares de ejemplo de entrada/salida que muestren el comportamiento que buscas, ejecutar pasadas de entrenamiento que acerquen los pesos del modelo a esos ejemplos y comparar el resultado con las salidas del modelo original. Los métodos eficientes en parámetros, como LoRA, lo abaratan lo suficiente como para ejecutarlo en una sola GPU.
Si no estás satisfecho con las salidas del LLM, primero refina tus prompts y tu generación aumentada por recuperación (RAG). El ajuste fino cambia la forma en que se comporta el LLM. Cuando necesitas que use información reciente o propietaria, los prompts y RAG suelen ser una mejor opción.
Aquí te explicamos cómo hacer ajuste fino de un LLM paso a paso, cuáles son los principales métodos de ajuste fino (LoRA y QLoRA) y qué desafíos y errores pueden arruinar el proceso.
Qué es el ajuste fino de un LLM y en qué se diferencia del preentrenamiento
El preentrenamiento de un LLM desarrolla desde cero la capacidad lingüística general de un modelo a partir de un corpus enorme, mientras que el ajuste fino adapta un modelo preentrenado con un conjunto de datos pequeño para una tarea concreta.
El preentrenamiento de un LLM es la fase que más recursos consume y que da como resultado un modelo base. El modelo aprende de un corpus de texto amplio, lo que le da nociones generales de gramática, conocimientos factuales y razonamiento, pero ninguna especialización para tu tarea.
El ajuste fino de un LLM continúa el entrenamiento del modelo base con un conjunto de datos pequeño y cuidadosamente seleccionado para que produzca las salidas deseadas en una tarea o caso de uso específico. Piensa en un formato uniforme, una voz o un tono de marca, patrones propios de un dominio o llamadas confiables a herramientas y funciones.
Cuándo hacer ajuste fino de un LLM y cuándo usar prompts o RAG
Para mejorar el rendimiento de un LLM, avanza paso a paso: prompts -> RAG -> ajuste fino.
Refina tus prompts con instrucciones más detalladas y usa RAG para darle al modelo información actualizada. Recurre al ajuste fino solo cuando las mejoras en los prompts y en la recuperación no den resultado.
Enfoque | Qué cambia | Úsalo cuando | Limitación principal |
Ingeniería de prompts | La solicitud que envías | El comportamiento está cerca de lo que buscas y quieres rapidez y reversibilidad | Limitada por las capacidades existentes del modelo base |
RAG | Lo que ve el modelo en el momento de la inferencia | Los datos cambian con frecuencia y necesitas que el LLM acceda a información actualizada | Agrega latencia de recuperación e infraestructura; no cambia el comportamiento |
Ajuste fino de LLM | Los pesos del modelo (sus parámetros internos) | Necesitas un comportamiento, formato o tono consistente a gran escala, o prompts más cortos en cada llamada | Costo inicial, el conocimiento incorporado en los pesos se vuelve obsoleto y existe el riesgo de olvidar comportamientos preentrenados |
Cuándo unos prompts mejores superan al ajuste fino y cuándo no bastan
Los prompts son la palanca más rápida y económica. En muchos casos, unos prompts más precisos y detallados logran los cambios de comportamiento deseados.
Pero los prompts más largos ralentizan el trabajo, lo encarecen y no pueden superar las limitaciones existentes del modelo.
Señales de que los prompts podrían haber llegado a su límite:
- Siguen apareciendo casos límite que arruinan la salida: Por ejemplo, el modelo devuelve prosa cuando necesitas JSON o se sale del tono, y tienes que parchar el prompt para cada caso nuevo.
- El prompt del sistema no deja de crecer: El prompt llega a cientos o miles de líneas y es difícil de gestionar.
- Lo pagas en cada llamada: El prompt se vuelve a enviar y a procesar en cada solicitud, así que el costo en tokens y la latencia aumentan.
- Los cambios dejan de marcar la diferencia: Las nuevas instrucciones no mejoran las salidas.
Aun así, prueba primero las soluciones más económicas a nivel de prompt. Usa ejemplos few-shot para mostrarle al modelo el patrón (pares de entrada/salida), encadenamiento de prompts para dividir las tareas difíciles en pasos más pequeños o hooks de llamadas a funciones para delegar búsquedas exactas o cálculos.
Cuándo tiene más sentido usar RAG que hacer ajuste fino del modelo
RAG cambia lo que sabe el LLM, mientras que el ajuste fino cambia cómo se comporta. Si la carencia es de conocimiento, sobre todo de conocimiento que cambia con frecuencia o que está en tus propios documentos, la respuesta es RAG. Si la carencia es de comportamiento, haz ajuste fino.
El ajuste fino también modifica lo que sabe un modelo, pero cualquier dato que absorba queda congelado en el momento del entrenamiento y pierde vigencia pronto en campos que evolucionan con rapidez. Además, la información queda incorporada en los pesos del modelo, por lo que no conserva ningún registro de su fuente.
Actualizar los documentos fuente que usa una capa de recuperación es más rápido y económico, y esta puede citar las fuentes exactas que utilizó. Eso la convierte en una mejor opción cuando necesitas información actualizada y bien fundamentada.
¿La desventaja de RAG? Es una capa adicional que hay que construir y mantener, y agrega latencia.
En la práctica, a menudo necesitarás ambos. Los sistemas en producción combinan modelos con ajuste fino y RAG: uno para lograr un comportamiento consistente y el otro para obtener datos actuales.
Errores, riesgos y desafíos comunes del ajuste fino
Incluso cuando el ajuste fino es la herramienta adecuada, conlleva costos y riesgos:
- Costo y tiempo: Reunir datos de entrenamiento limpios y representativos, así como el cómputo necesario para el entrenamiento, resulta costoso.
- Olvido catastrófico: Si se entrena con un conjunto de datos limitado, un modelo puede perder habilidades generales y adquirir nuevos modos de falla, lo que provoca errores que el modelo base no cometía.
- Sobreajuste: Con muy pocos datos o datos demasiado repetitivos, el modelo memoriza tus ejemplos de entrenamiento en lugar de aprender patrones, por lo que funciona bien con sus muestras de entrenamiento, pero mal con entradas reales.
- Desactualización: El conocimiento incorporado en los pesos envejece rápido, así que tienes que volver a entrenar con datos nuevos.
- Obsolescencia: Cuando se lanza un modelo más potente, a menudo supera a tu modelo con ajuste fino desde el primer momento, y tienes que rehacer el trabajo.
- Desafíos de evaluación y reproducibilidad: Demostrar que el modelo con ajuste fino supera al modelo base es difícil. Además, dos ejecuciones de entrenamiento en GPU con la misma configuración pueden producir modelos ligeramente distintos.
- Gobernanza de datos: Entrenar con datos propietarios o sensibles plantea dudas de privacidad y licencias; más adelante, un modelo puede revelar fragmentos de aquello con lo que se entrenó.
Los principales métodos de ajuste fino
Los principales tipos de ajuste fino de LLM se diferencian por cuánto del modelo modifican: el ajuste fino completo vuelve a entrenar todo el modelo, mientras que los métodos de ajuste fino eficiente en parámetros (PEFT), como LoRA y QLoRA, actualizan solo algunos pesos. Los métodos PEFT requieren una fracción de la memoria del ajuste fino completo y, con la configuración adecuada, pueden igualar sus resultados.
El ajuste fino completo actualiza todos los pesos del modelo. Es el más costoso y el que implica mayor riesgo de olvido catastrófico. Resérvalo para cambios de comportamiento importantes cuando tengas los datos y el cómputo necesarios.
La alternativa es el ajuste fino eficiente en parámetros, o PEFT. Es un término general para los métodos que congelan la mayor parte del modelo y entrenan solo un pequeño conjunto de parámetros. Usa mucha menos memoria y es menos propenso al olvido, ya que el modelo base se mantiene intacto.
Con rangos bajos, PEFT aprende menos que un ajuste fino completo, pero aumentar el rango y ajustar la tasa de aprendizaje cierra la mayor parte de la brecha en tareas de ajuste por instrucciones.
Entre los métodos PEFT se incluyen:
- LoRA (Low-Rank Adaptation, adaptación de bajo rango): Es el punto de partida habitual: congela los pesos originales y entrena un pequeño conjunto de parámetros de adaptador añadidos, a menudo menos del 1% del total, por lo que se ejecuta en una sola GPU de consumo.
- QLoRA (Quantized Low-Rank Adaptation, adaptación de bajo rango cuantizada): Comprime el modelo base a una precisión de 4 bits antes de aplicar LoRA, lo que te permite hacer ajuste fino de un modelo grande en una sola GPU.
Método | Qué actualiza | Requisitos reales de hardware | Úsalo cuando |
Ajuste fino completo | Todos los pesos del modelo | Un nodo con varias GPU para modelos de clase 7B, y muchísimo más para modelos más grandes | Necesitas un cambio profundo de comportamiento y cuentas con los datos y el cómputo |
LoRA (PEFT) | Un pequeño conjunto de pesos de adaptador añadidos | Una sola GPU de consumo | Tu punto de partida predeterminado |
QLoRA (PEFT) | Adaptadores LoRA sobre una base comprimida a 4 bits | Modelos muy grandes en una sola GPU | Tienes poca memoria, pero quieres un modelo base grande |
Además de estos, usamos métodos de ajuste por instrucciones y por preferencias, desde RLHF (Reinforcement Learning from Human Feedback, aprendizaje por refuerzo a partir de retroalimentación humana) hasta alternativas más ligeras, como Direct Preference Optimization (DPO) y Odds Ratio Preference Optimization (ORPO), para definir cómo un modelo sigue instrucciones y se ajusta a las preferencias humanas.
Cómo hacer ajuste fino de un LLM paso a paso
Una vez que hayas decidido que el ajuste fino de un LLM es la opción correcta, este es el flujo de trabajo.
Paso 1: Define la tarea y cómo medirás el éxito
Decide qué comportamiento quieres del LLM y cómo sabrás que lo lograste.
Especifica la tarea concreta que quieres que realice el modelo con ajuste fino; por ejemplo, clasificar tickets de soporte, resumir contratos en un formato fijo o generar código con el estilo de tu empresa.
Luego, define qué significa el éxito. Algunas opciones comunes son:
- Validez de la salida: Por ejemplo, ¿el resultado se puede analizar como JSON válido o coincide con la estructura de Markdown que necesitas?
- Puntuaciones automatizadas: Usa métricas como BLEU o ROUGE, que comparan el texto generado con respuestas de referencia, o la precisión de la tarea en un conjunto etiquetado.
- Calificaciones humanas: Una rúbrica con puntuación o de aprobado/reprobado para cualidades que un script evalúa mal, como el tono o la utilidad.
- Confiabilidad ante entradas difíciles: ¿Maneja las entradas inusuales que hacían fallar al modelo base?
Paso 2: Prepara tu conjunto de datos
La calidad de los datos determina el éxito del ajuste fino, así que esfuérzate por reunir el conjunto de datos de ajuste fino adecuado.
Da formato a tus datos como pares de instrucción/respuesta en JSONL, donde cada línea contenga la entrada (más cualquier contexto) y la salida exacta que quieres obtener.
Por ejemplo, consulta conjuntos de datos públicos como Alpaca-cleaned, de instrucciones generales, o Dolly, de Databricks, o el conjunto específico de una tarea banking77, que incluye más de 13,000 consultas de soporte reales etiquetadas en 77 intenciones.
Para una tarea específica, desde unos cientos hasta unos cuantos miles de ejemplos limpios y variados pueden modificar el comportamiento, siempre que reflejen entradas reales de producción, incluidos los casos límite, y tengan un formato consistente.
¿Aún no tienes pares de entrada/salida? Crea el conjunto a partir de los datos que ya tienes, como tickets de soporte y sus mejores respuestas, o documentos y sus resúmenes.
Si solo tienes las salidas, usa un modelo más potente para generar una entrada plausible para cada una, o escribe a mano un pequeño conjunto inicial y amplíalo con un modelo “maestro” más grande; luego, conserva los mejores pares.
Por último, divide los datos en conjuntos de entrenamiento, validación y prueba para que puedas medir el rendimiento con ejemplos que el modelo no ha visto.
Paso 3: Elige un modelo base y un método
Empieza con un modelo pequeño de código abierto de 3 a 7 mil millones de parámetros y un método de ajuste fino eficiente en parámetros, como LoRA o QLoRA.
Las familias abiertas como Llama, Mistral y Qwen te ofrecen una base sólida que puedes alojar tú mismo, y los métodos PEFT mantienen bajos los requisitos de hardware: QLoRA cuantiza la base a 4 bits, así que hacer ajuste fino de un modelo de 7B solo requiere una tarjeta de consumo de 16-24 GB. El ajuste fino completo del mismo modelo necesita muchas veces esa memoria.
Paso 4: Configura los hiperparámetros de entrenamiento
Estos son los parámetros clave del ajuste fino de LLM y los rangos iniciales sugeridos:
- La tasa de aprendizaje controla qué tan grande es cada actualización de los pesos. Un estudio de 2024 de Biderman et al. descubrió que las mejores tasas para LoRA eran aproximadamente diez veces más altas que las del ajuste fino completo: normalmente de 5e-5 a 5e-4, frente a 1e-5 a 5e-5. El estudio recomienda hacer un barrido de 1e-5 a 5e-4 y usar el valor más alto que permita un entrenamiento estable.
- El tamaño de lote es la cantidad de ejemplos de los que aprende el modelo antes de cada actualización de pesos. En una sola GPU, usa un lote pequeño por dispositivo, de 1 a 8, y acumulación de gradientes para alcanzar un lote efectivo de aproximadamente 16 a 64.
- El número de épocas es la cantidad de veces que el modelo ve el conjunto de datos completo. Cuando entrenas el modelo para realizar tareas específicas, de 1 a 3 es una buena regla general, pero las ejecuciones con LoRA suelen necesitar más.
- El rango de LoRA (r) define la capacidad del adaptador, es decir, cuánto puede aprender. Empieza con un valor de 8 a 32 para tareas más sencillas y auméntalo para las más difíciles: en el estudio sobre LoRA de Biderman et al. citado anteriormente, el ajuste por instrucciones de un modelo de 7B con código necesitó un rango de 256 para igualar el ajuste fino completo, mientras que un rango de 64 casi lo igualó en matemáticas.
- La longitud máxima de secuencia es la entrada más larga que procesará la ejecución. Configúrala para que abarque tus ejemplos más largos, hasta el límite de la ventana de contexto del modelo, ya que cualquier entrada más larga se trunca.
- El calentamiento y la programación de la tasa de aprendizaje controlan cómo aumenta y cambia esa tasa a lo largo de la ejecución. Un calentamiento corto y un decaimiento coseno son los valores predeterminados habituales. Sin embargo, el estudio de Pareja et al. sobre modelos pequeños encontró que prescindir del calentamiento no perjudicó las puntuaciones finales.
Considera estos valores como puntos de partida para un barrido de hiperparámetros, no como configuraciones fijas.
Paso 5: Entrena y supervisa la pérdida
Mientras se ejecuta el entrenamiento, observa las curvas de pérdida de entrenamiento y de validación para ver si está funcionando.
La pérdida mide qué tan lejos están los resultados del modelo de tus ejemplos, y debería disminuir de forma constante a medida que avanza la ejecución. La pérdida de entrenamiento abarca los datos de los que aprende el modelo. La pérdida de validación se calcula sobre los ejemplos reservados.
Si la pérdida de entrenamiento y la de validación disminuyen juntas, el modelo está aprendiendo a generalizar. Si la pérdida de entrenamiento sigue bajando, pero la de validación se estanca o sube, el modelo está memorizando el conjunto de entrenamiento en lugar de aprender el patrón (sobreajuste).
Paso 6: Evalúa y luego implementa
Una pérdida de entrenamiento baja no garantiza resultados correctos, así que evalúa el modelo ajustado con los criterios que definiste en el Paso 1.
Cuando pase la evaluación, tienes dos formas de implementarlo:
- Despliega el adaptador sobre el modelo base y carga ambos en tiempo de ejecución; así, el adaptador sigue siendo intercambiable.
- Fusiona el adaptador con los pesos base para obtener un único modelo independiente que es más sencillo de alojar.
Usa Perplexity para darle a tu LLM acceso a información actualizada
El ajuste fino es la opción correcta cuando quieres adaptar el comportamiento del modelo a tus necesidades.
Si tu modelo necesita información actual, sobre todo información que cambia rápidamente, necesitas un sistema RAG o una herramienta de búsqueda externa confiable.
Una pila de recuperación personalizada funciona mejor con conjuntos de datos propietarios, como tu wiki interna, el historial de atención al cliente, contratos o documentación de productos.
Cuando el conocimiento que quieres usar es público, no hace falta crear una capa de recuperación a medida. Perplexity es un motor de respuestas que ofrece resultados con citas en línea en las que se puede hacer clic, provenientes de un índice web en tiempo real. Su Agent API entrega esas respuestas fundamentadas en la web y con citas en una sola llamada, para que tu app pueda aprovechar fuentes actuales.
Preguntas frecuentes sobre el ajuste fino de LLM
¿Se puede hacer ajuste fino de un LLM gratis?
Sí, puedes hacer ajuste fino de un LLM abierto pequeño gratis. Por ejemplo, el nivel gratuito de Google Colab te da suficiente GPU para ejecutar QLoRA en un modelo de 3B a 8B, lo cual es más que suficiente para una tarea específica. Empiezas a pagar cuando necesitas más memoria, ejecuciones más largas o un modelo base más grande del que admite el nivel gratuito.
¿Necesitas tu propia GPU o puedes hacer ajuste fino en la nube?
No necesitas tener una GPU propia para hacer ajuste fino de LLM. Los servicios administrados y los proveedores de GPU en la nube rentan el hardware por hora, así que una sola GPU rentada basta para una ejecución de QLoRA con un modelo pequeño. Comprar una GPU solo vale la pena si haces ajuste fino con frecuencia o si debes mantener todos tus datos en tus propios equipos.
¿Cuánto tarda el ajuste fino de un LLM?
Para un LLM pequeño, una ejecución puede terminar en minutos o en unas cuantas horas, según el tamaño del conjunto de datos y el hardware. Oumi, por ejemplo, hizo el ajuste fino completo de un modelo de 0.8B en poco más de una hora en su plataforma alojada.
Con modelos más grandes o decenas de miles de ejemplos, ese tiempo puede extenderse a un día o más: las ejecuciones de LoRA de Emburse con un modelo de 7B tardaron 8 horas con 5,000 ejemplos y unas 30 horas con 50,000 en una sola GPU de 40 GB.
¿Puedes seguir actualizando un modelo ajustado a medida que cambian tus datos?
Puedes volver a hacer ajuste fino con datos nuevos, pero cada ronda consume cómputo y conlleva el riesgo de olvido catastrófico. Para conocimiento que cambia con frecuencia, RAG suele ser la mejor solución, ya que actualizas los documentos fuente en lugar de volver a entrenar.