EKG + RAG/LLM para retroalimentación de códigoTrabajo de Fin de Máster · UNED
Fine tuning con QLoRA

Fine tuning con QLoRA

Afiné el modelo base Qwen2.5-Coder-7B con QLoRA para que aprendiera a redactar la retroalimentación pedagógica en español, sin tocar los pesos completos. Aquí cuento cómo medí ese ajuste, qué bajó la pérdida de validación y a qué coste, separando siempre lo que mejora en distribución de lo que aún no generaliza.

Modelo base · Qwen2.5-Coder-7B Método · QLoRA 4-bit (NF4) GPU · RTX 5090, 32 GB

1El fine tuning en una mirada

Partí del modelo base y le añadí adaptadores QLoRA de bajo rango sobre una cuantización a 4 bits, de modo que el entrenamiento ajusta solo una fracción pequeña de parámetros. Entrené dos épocas sobre el reparto de SFT y evalué siempre contra un conjunto retenido cuyos esqueletos el modelo nunca había visto, para no engañarme con la memorización del formato.

1,051 → 1,028
eval_loss retenido, época 1 → época 2
0,842
precisión por token (mean_token_accuracy) en el retenido
2
épocas de entrenamiento
≈ −21 %
caída del eval_loss frente a la versión sin regularizar

La versión que conservé como mejor afinado es la de la época 2. Esa configuración regularizada (con NEFTune y dropout) fue la que resolvió el sobreajuste que sí aparecía en una variante anterior, donde la pérdida de validación subía con las épocas en lugar de bajar.

Qué significa cada número

El eval_loss es la pérdida de entropía cruzada sobre el conjunto retenido; cuanto más baja, mejor reproduce el modelo las retroalimentaciones de referencia que no vio al entrenar. La precisión por token mide la fracción de tokens del objetivo que el modelo predice correctamente. Ambas se calculan sobre esqueletos no vistos, por lo que reflejan generalización dentro de la distribución sintética, no memorización.

2Curva de pérdida y generalización

La pérdida de entrenamiento cae muy rápido (el formato de la respuesta es repetitivo y fácil de ajustar), pero lo que de verdad me interesa es la pérdida de validación sobre lo retenido, que es la que mide si el ajuste transfiere. Bajó de la primera a la segunda época, señal de que la regularización evitó el sobreajuste.

Curva de pérdida del fine tuning QLoRA-v3 sobre Qwen2.5-Coder-7B La pérdida de entrenamiento cae de 2,27 en el paso 5 a alrededor de 0,011 hacia el paso 75 y se mantiene plana hasta el paso final 264. La pérdida de validación sobre el conjunto retenido es 1,051 al cerrar la primera época (paso 132) y baja a 1,028 al cerrar la segunda época (paso 264). 2,4 1,2 0,8 0 1,051 1,028 fin época 1 fin época 2 inicio
Pérdida de entrenamientoPérdida de validación (retenido) · Serie real de loss_history.json del afinado QLoRA-v3. La pérdida de entrenamiento llega a ~0,011; la de validación baja de 1,051 a 1,028 entre épocas.
Lo que la pérdida baja no demuestra

La pérdida de entrenamiento tan baja refleja en buena parte que el modelo ajustó el formato de la respuesta, no que razone mejor. El conjunto sintético deriva de pocas plantillas y el coseno medio intra-esqueleto es muy alto, así que tomo la pérdida de validación como una mejora en distribución y reservo la prueba de generalización real para el código de estudiantes, donde el orden de los sistemas se invierte.

Hitos de la serie de pérdida (datos reales)
Puntos representativos de loss_history.json (afinado QLoRA-v3, 264 pasos, 2 épocas).
PasoPérdida entrenamientoPérdida validación (retenido)
52,27
200,68
750,012
132 (fin época 1)1,051
264 (fin época 2)~0,0111,028

3Coste y eficiencia del PEFT

La razón de usar QLoRA en vez de un ajuste completo es el coste. Al cuantizar el modelo base a 4 bits y entrenar solo adaptadores de bajo rango, el ajuste cabe en una sola GPU de consumo y termina en pocos cientos de pasos. La eficiencia del enfoque se ve bien en la verificación del propio canal de entrenamiento, donde los parámetros que se entrenan son una fracción mínima del total.

Datos del afinado y de la verificación del canal de entrenamiento (PEFT). Cifras reales del proyecto.
AspectoValor
Datos SFT (entrenamiento / validación)495 / 55
Cuantización del modelo base4-bit NF4 (bitsandbytes)
Parámetros LoRA en la verificación del canal (SmolLM2-135M)1,84 M (1,35 % del total)
Épocas2
Pasos de entrenamiento (QLoRA-v3)264
Entornotorch 2.11.0+cu128, CUDA 12.8, sm_120

Esa fracción del 1,35 % de parámetros entrenables (medida en la verificación del canal con un modelo pequeño) ilustra la lógica del PEFT, se actualiza muy poco para enseñar el formato y el estilo de la retroalimentación, mientras el grueso del modelo base queda congelado y cuantizado. Por eso el afinado completo del Sistema B cupo en la RTX 5090 sin recurrir a varias tarjetas.

Dónde encaja este afinado

Este modelo afinado es el Sistema B del TFM. En el banco en distribución (n=50) mejora sobre todo la clasificación del tipo de error (acierto de categoría 0,70 frente a 0,26 del base) y la explicación técnica; combinado con el grafo da el Sistema D híbrido. El detalle comparativo está en la página de resultados.

4Ver también

Sistema RAG y fine-tuning

El diseño de los cuatro sistemas A/B/C/D y cómo el afinado se combina con la recuperación sobre el grafo.

Resultados

Los benchmarks en distribución y sobre código real, con la inversión del orden que mide el sobreajuste.

El grafo

El grafo de conocimiento educativo que alimenta la recuperación del Sistema C y del híbrido D.

Cómo citar

Si este trabajo te resulta útil y quieres referenciarlo, esta es la cita recomendada.

Bueno Junquero, A. (2026). Integración de un grafo de conocimiento educativo con un LLM mediante RAG. Trabajo Fin de Máster, Máster Universitario en Investigación en Inteligencia Artificial, UNED. Director, José Luis Fernández Vindel.