← Labs Pensum // IA Aplicada

Reentrenar modelos de lenguaje, de Qwen3-0.6B a on-device

No es crear un modelo desde cero: es dominar el pipeline de adaptación. Un currículo autoguiado para llevar un LLM pequeño de un checkpoint base a un modelo especializado que corre on-device — enseñando el método con fine-tuning y recuperando el contenido con RAG. Doce módulos, con la matemática incluida y ejercicios en cada tema.

Formato · autoguiado, 12 módulos Práctica · 5 ejercicios por módulo Meta · Qwen3-0.6B + LoRA + eval reproducible Stack · PyTorch · TRL · PEFT · llama.cpp
predicción del siguiente token● live
Comencemos desde seis y avancemos
avancemos0.62
contamos0.19
sumamos0.11
seguimos0.05
0.03

El entrenamiento mueve estas probabilidades. La inferencia (temperature, top_p) solo elige entre ellas.

lo que cambia LoRAΔ
W₀ + B·A = W
W₀ congelado A, B entrenables

No tocas los millones de parámetros del modelo base. Entrenas dos matrices pequeñas de bajo rango y guardas un adaptador portátil de pocos MB.

El pipeline de una sola pasada

00modelo base
01dataset
02SFT · LoRA
03evaluación
04fusión
05GGUF · cuant.
06runtime local
07RAG
MÓDULO 00 · FUNDAMENTOS

Cómo funciona un LLM (mínimo técnico)

Objetivo: distinguir qué modifica el entrenamiento y qué solo afecta la inferencia.

No necesitas derivar toda la matemática del Transformer. Necesitas el modelo mental: tokens previos → probabilidades → siguiente token.

tokenización / token_ids embeddings atención causal logits + muestreo ventana de contexto temperature · top_p · top_k KV cache pesos vs activaciones vs contexto
Estudiar módulo
MÓDULO 01 · FUNDAMENTOS

Tokenizadores y chat templates

Obligatorio. Una plantilla incorrecta hace que el modelo aprenda el formato equivocado.
AutoTokenizer apply_chat_template() roles system / user / assistant BOS · EOS padding · attention_mask truncamiento add_generation_prompt Qwen vs Gemma

Una conversación estructurada

# termina como UNA secuencia de tokens con marcadores especiales
{
  "messages": [
    {"role": "system",    "content": "Eres profesor de segundo grado."},
    {"role": "user",      "content": "¿Cuánto es 6 + 5?"},
    {"role": "assistant", "content": "Comencemos desde seis y avancemos cinco pasos..."}
  ]
}
Qwen3: alterna modo razonamiento / sin-razonamiento. Decide explícitamente cuándo usar cada uno y evita bloques de <think> frente al niño.
Estudiar módulo
MÓDULO 02 · DATOS

Ingeniería del dataset

La parte más importante del proyecto. No construyas miles de ejemplos aleatorios: construye una matriz de cobertura.
JSONL · Parquet · HF Dataset conversacional vs prompt-completion train / val / test deduplicación balance de categorías contaminación train↔eval positivos y negativos metadatos pedagógicos versionado

Esquema con más señal que la conversación final

{
  "id": "mat-g2-suma-error-001",
  "grado": 2, "materia": "matematicas", "tema": "suma_con_llevadas",
  "tipo_interaccion": "correccion_error", "dificultad": 2,
  "estrategia": "pista_progresiva",
  "messages": [
    {"role": "user",      "content": "Creo que 18 + 7 es 24."},
    {"role": "assistant", "content": "Revisemos las unidades. Ocho más siete son quince..."}
  ]
}
Taxonomía de cobertura: grado · materia · unidad · objetivo · tipo de error · tipo de respuesta · dificultad · estrategia · nº de pistas · resultado esperado. Los metadatos no van al modelo — sirven para balancear y filtrar.
Estudiar módulo
MÓDULO 03 · ENTRENAMIENTO

SFT — Supervised Fine-Tuning

Objetivo: que la pérdida se calcule sobre la respuesta del profesor, no sobre la pregunta del estudiante.
next-token prediction cross-entropy token a token shift input_ids ↔ labels máscara -100 completion_only_loss assistant_only_loss sequence packing
# la idea matemática que debes manejar
loss = error( token_correcto_del_profesor , prob_asignada_por_el_modelo )
Estudiar módulo
MÓDULO 04 · ENTRENAMIENTO

Hiperparámetros y lectura de curvas

Objetivo: no memorizar valores universales — aprender a interpretar lo que dicen las métricas.
learning_rate num_train_epochs batch_size gradient_accumulation warmup_ratio weight_decay max_length scheduler grad clipping early stopping

Lo que lees en cada paso: training_loss · validation_loss · gradient_norm · learning_rate · tokens/s · VRAM. Los tres patrones que debes reconocer están abajo.

Estudiar módulo

Panel · leer las curvas de loss

Overfitting

Train baja, val sube. Memoriza. Menos epochs, más datos o regularización.

Underfitting

Ambas altas y planas. Datos, formato, learning rate o capacidad insuficiente.

Loss engañosa

Loss baja pero las respuestas empeoran. Objetivo de entrenamiento o de evaluación mal diseñado.

MÓDULO 05 · EFICIENCIA

LoRA y PEFT

Regla: más módulos ≠ mejor. Compara all-linear contra objetivos específicos.
pesos congelados r (rank) lora_alpha lora_dropout target_modules merge_and_unload() multi-adaptador
# empieza amplio…
target_modules = "all-linear"

# …y compara contra específicos
[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj]
Estudiar módulo
MÓDULO 06 · EFICIENCIA

LoRA vs QLoRA · precisión y memoria

Para Qwen3-0.6B: empieza con LoRA normal en BF16/FP16. QLoRA cuando escales o falte VRAM.
NF4 bnb_4bit_quant_type bnb_4bit_compute_dtype double quantization optimizers 8-bit prepare_model_for_kbit_training() gradient checkpointing flash attention
# la VRAM no es solo el tamaño del archivo
VRAM_entrenamiento = pesos + adaptadores + gradientes
                   + estados_optimizador + activaciones + buffers

# una secuencia de 4096 tokens cuesta MUCHO más que una de 512
Estudiar módulo
MÓDULO 07 · EVALUACIÓN

Evaluación reproducible (harness)

No evalúes charlando con el modelo. Mismos prompts, misma config de generación, misma seed.
# compara las cuatro versiones con el MISMO harness
base   vs   +LoRA   vs   fusionado   vs   cuantizado

Métricas académicas

exactitud adecuación al grado uso del currículo claridad calidad de pistas detecta el error no revela la solución de inmediato reconoce incertidumbre

Métricas técnicas

tokens/s tiempo al primer token RAM máxima tamaño del modelo perplexity Δ antes/después de cuantizar
Regla de oro: crea el set de evaluación primero y nunca lo uses para entrenar.
Estudiar módulo
MÓDULO 08 · ARQUITECTURA

Fine-tuning vs RAG — la frontera de diseño

Entrena el método de enseñar. Recupera el contenido académico. No metas los libros dentro del LoRA.
fine-tuning · el CÓMO
forma de enseñartono secuencia pedagógicacómo corregir uso de pistasformato fuera de alcance
RAG · el QUÉ
currículo oficialcontenido por grado definicionesobjetivos ejerciciosactualizable

Para RAG

embeddingschunking metadata filteringvector search rerankingcontext assembly context budgetinggrounding
Estudiar módulo
MÓDULO 09 · DESPLIEGUE

Fusión, conversión y cuantización

Objetivo: medir la degradación después de cuantizar y verificar que el chat template siga intacto.
modelo HF + adaptador LoRA
   ↓  merge_and_unload()  + guardar modelo y tokenizer
modelo fusionado
   ↓  convert  (HF → GGUF)
   ↓  quantize (Q8 · Q6 · Q5 · Q4)  + imatrix/calibration
runtime local
Cuantizar reduce tamaño y suele mejorar velocidad, pero puede introducir pérdida de calidad. Evalúa con el harness del M7 antes y después.
Estudiar módulo
MÓDULO 10 · DESPLIEGUE

Runtime on-device (Flutter)

La UI no espera la respuesta completa: consume tokens por streaming, con la inferencia fuera del hilo de UI.
carga por mmap threads de CPU GPU / NPU KV cache · context size prompt caching token streaming cancelación FFI Dart ↔ C/Rust gestión térmica y batería benchmarks por dispositivo
runtime nativo  →  token stream / callback  →  isolate de Dart  →  estado de UI
Estudiar módulo
MÓDULO 11 · RIGOR

Reproducibilidad y seguridad pedagógica

Objetivo: todo experimento se reconstruye; la seguridad no depende solo del fine-tuning.

Cada experimento guarda

modelo base exactoversión de librerías dataset + versiónseed config LoRAconfig trainer chat templatehardware métricascheckpoint config de generación

Seguridad (con niños)

límites por edadfuera de currículo datos personalesprompt injection temas sensiblescontrol parental respuesta segura al no saberpruebas adversariales
Usa YAML/JSON para la config de cada experimento — que no dependa de argumentos dispersos en el código.
Estudiar módulo

Ruta de implementación

El orden exacto para construirlo. Cada etapa entrega un artefacto verificable antes de pasar a la siguiente.

01

Baseline

Un ejecutable que carga Qwen3-0.6B, aplica su chat template, corre 100 pruebas y guarda respuestas + métricas.

entrega · línea base medible
02

Dataset

400 ejemplos de entrenamiento, 50 de validación, 100 de evaluación. Limitados a una sola unidad académica.

entrega · dataset versionado
03

LoRA

SFTTrainer con assistant/completion loss. Entiende r, alpha, target_modules, learning rate y epochs entrenando de verdad.

entrega · adaptador entrenado
04

Evaluación

Compara automáticamente Qwen original vs Qwen + LoRA con el mismo harness, prompts y seed.

entrega · reporte comparativo
05

Despliegue

Fusionar → convertir a GGUF → cuantizar → volver a evaluar → integrar por FFI en Flutter.

entrega · modelo on-device
06

RAG

Añade el currículo y filtra por grado, materia, unidad, objetivo actual y conceptos permitidos.

entrega · método + contenido

Stack concreto

TRL usa hoy Qwen3-0.6B en su propio ejemplo inicial de SFTTrainer: es la opción razonable para dominar el proceso. Gemma (2B/4B) después, cuando el pipeline esté estable.

PyTorch Transformers Datasets TRL SFT PEFT LoRA Accelerate bitsandbytes 4/8-bit llama.cpp GGUF

Ignora por ahora

Tu primera especialización es Qwen3-0.6B + LoRA + 500 ejemplos excelentes + una evaluación reproducible. Nada más.

  • preentrenamiento desde cero
  • entrenamiento distribuido · model parallelism
  • derivar todo el Transformer
  • RLHF · PPO · GRPO · DPO
  • CUDA personalizada
  • Mixture of Experts · multimodal