Cómo Entrenar Modelos LLM en RunPod: Guía Completa 2026
Fine-tunear un modelo de lenguaje ya no es territorio exclusivo de los grandes laboratorios. En 2026, con $10 USD, un pod en RunPod y las herramientas correctas, puedes entrenar un modelo 7B personalizado, fusionarlo y desplegarlo localmente en Ollama. Esta guía cubre todo el flujo: desde elegir la GPU hasta tener el modelo corriendo en producción.
¿Por qué RunPod y no AWS o GCP?
La diferencia de costos es brutal. Un setup equivalente de 4x A100 tiene un costo a 3 años de:
| Plataforma | Hardware | Costo 3 años | Notas |
|---|---|---|---|
| On-Premise | 4x NVIDIA A100 | ~$246,000 | Hardware + energía + personal |
| AWS | p4d.24xlarge | ~$301,000 | Proporcional a 4x A100 |
| GCP | 8x A100 (80GB) | ~$458,000 | Pricing significativamente mayor |
| RunPod | 4x A100 | ~$120,678 | Billing por segundo, sin lock-in |
Para experimentos puntuales la ventaja es aún más clara: con $10 USD puedes entrenar hasta 10 modelos tipo 7B. Pagas exactamente lo que usas, al segundo.
El Stack de 2026: Qué Herramientas Usar
- Python 3.11+ / PyTorch 2.5+ / CUDA 12.x — la base irrenunciable
- Axolotl — orquestador de fine-tuning con config YAML/JSON. Soporta LLaMA, Gemma, Mistral, Qwen y más. Imagen Docker lista:
axolotlai/axolotl-cloud:main-latest - Unsloth — kernels optimizados que reducen VRAM y aumentan throughput significativamente
- Hugging Face ecosystem — transformers, datasets, peft, trl
- Weights & Biases (WandB) — tracking de métricas durante el entrenamiento en tiempo real
Paso 1: Elegir la GPU Correcta
La regla de oro: el modelo debe caber en VRAM o el entrenamiento simplemente no arranca.
| Tamaño del modelo | GPU recomendada | VRAM mínima | Costo/hora aprox. |
|---|---|---|---|
| Hasta 7B parámetros | RTX 3090 / A100 40GB | 16–24 GB | $0.40–$1.20 |
| 7B–20B parámetros | A100 80GB | 40–80 GB | $1.50–$2.50 |
| 30B parámetros | 2x A100 40GB | 48 GB | $2.40–$3.00 |
| 70B+ parámetros | Multi-GPU H100 | 80 GB x N | $4.00+ |
| Máxima capacidad | H200 / B200 | 141–192 GB | $6.00+ |
El H100 entrega 2-3x más velocidad de entrenamiento y hasta 30x más velocidad de inferencia en modelos transformer respecto al A100. Para experimentación con modelos 7B, el A100 sigue siendo la opción con mejor costo-beneficio.
Paso 2: Crear el Pod en RunPod
- Entra a
console.runpod.ioy selecciona Deploy - Elige la GPU según tu modelo
- En Template Image escribe:
axolotlai/axolotl-cloud:main-latest - Monta un volumen persistente en
/workspaceantes de iniciar — si el Pod se cae sin volumen, pierdes todo el entrenamiento - Agrega variables de entorno:
HF_TOKENyWANDB_API_KEY - Deploy — el Pod estará listo en menos de 2 minutos
Paso 3: Preparar el Dataset
El dataset es lo más importante del proceso — el modelo aprenderá exactamente de esos datos.
Formato requerido por Axolotl (ShareGPT / ChatML)
[
{
"messages": [
{"role": "system", "content": "Eres un asistente especializado en..."},
{"role": "user", "content": "¿Cómo funciona X?"},
{"role": "assistant", "content": "X funciona de la siguiente manera..."}
]
}
]
Transferir dataset local al Pod
# En tu máquina local
runpodctl send dataset.jsonl
# Copia el código generado (ej: 8338-galileo-collect-fidel)
# En el Pod de RunPod
runpodctl receive 8338-galileo-collect-fidel
Paso 4: Elegir la Técnica de Fine-Tuning
| Técnica | VRAM requerida | Velocidad | Cuándo usarla |
|---|---|---|---|
| Full Fine-Tune | Muy alta (28GB+ para 7B) | Lenta | Cambios profundos, presupuesto disponible |
| LoRA | Baja (~16GB para 7B) | Rápida | Caso general — opción por defecto ✓ |
| QLoRA | Muy baja (~12GB para 7B) | Media | Hardware limitado o modelos 13B+ |
| Prefix Tuning | Mínima | Muy rápida | Few-shot, adaptaciones rápidas |
Paso 5: Configurar el Entrenamiento con Axolotl
Configuración funcional y comentada de LoRA para Llama 3.2-1B:
{
"base_model": "NousResearch/Llama-3.2-1B",
"load_in_4bit": false, // true para QLoRA
"load_in_8bit": false,
"adapter": "lora", // "lora" o "qlora"
"lora_r": 16, // rango — empieza aquí, sube a 64 si no aprende
"lora_alpha": 32, // siempre 2x lora_r
"lora_dropout": 0.05,
"lora_target_modules": [
"q_proj", "v_proj", "k_proj", "o_proj",
"gate_proj", "down_proj", "up_proj"
],
"datasets": [{ "path": "teknium/GPT4-LLM-Cleaned", "type": "alpaca" }],
"val_set_size": 0.1, // 10% para validación — detecta overfitting
"sequence_len": 2048,
"output_dir": "./outputs/lora-out",
"num_epochs": 3,
"micro_batch_size": 2,
"gradient_accumulation_steps": 4,
"optimizer": "adamw_8bit",
"lr_scheduler": "cosine",
"learning_rate": 0.0002,
"bf16": "auto", // bfloat16 en A100/H100 — más estable que fp16
"gradient_checkpointing": true, // SIEMPRE true — reduce VRAM ~30%
"logging_steps": 10
}
Paso 6: Ejecutar el Entrenamiento
# Single GPU
python -m axolotl.cli.train config.yaml
# Multi-GPU (ej: 2x A100)
ACCELERATE_LOG_LEVEL=info accelerate launch \
-m axolotl.cli.train config.yaml
Durante el entrenamiento WandB mostrará en tiempo real: training loss, validation loss, learning rate y tokens/segundo. El objetivo: training loss bajando consistentemente sin que la validation loss suba — esa subida es la señal de overfitting.
Paso 7: Fusionar el Adaptador LoRA
python3 -m axolotl.cli.merge_lora \
--base_model mistralai/Mistral-7B-v0.1 \
--peft_model /workspace/outputs/mymodel \
--output_dir /workspace/outputs/mymodel/merged \
--config /workspace/config.yaml
Desde el modelo fusionado en /merged, tienes tres caminos:
- Hugging Face Hub:
huggingface-cli upload tu-usuario/modelo /workspace/outputs/mymodel/merged - GGUF para Ollama local: convertir con
llama.cpp converty cargar en Ollama — sin enviar datos a terceros - RunPod Serverless: inferencia bajo demanda con auto-scaling y pago por uso
Fine-Tuning vs RAG vs Prompt Engineering
| Estrategia | Costo | Cuándo usarla |
|---|---|---|
| Prompt Engineering | $0 | El modelo base ya tiene el conocimiento, solo necesitas dirección |
| RAG | Bajo (infra) | Información actualizada o privada que cambia frecuentemente |
| Fine-Tuning | Medio ($3–$50) | Formato consistente, terminología de dominio, persona/tono específico en todas las interacciones |
Nota: Las tres estrategias no son mutuamente excluyentes. Un modelo fine-tuned que también hace RAG frecuentemente supera a cualquiera de las dos técnicas en aislamiento.
Tips Críticos Para No Perder Tiempo ni Dinero
- Monta volumen persistente ANTES de lanzar el Pod. Sin volumen, si el Pod cae, pierdes todo.
- Siempre
gradient_checkpointing: true. Reduce VRAM ~30% a costa de 20% más tiempo. - Empieza con RTX 3090 para experimentos. Migra a A100/H100 solo cuando el experimento esté validado.
- Pinea versiones de dependencias. Un cambio en
transformersopeftpuede romper la reproducibilidad. - Conecta WandB desde el inicio. Sin métricas en tiempo real estás ciego.
- Usa
bf16: auto, nofp16. En A100/H100, bfloat16 es más estable. fp16 puede generar NaN en runs largos. - Evalúa siempre contra el modelo base. Si mejora marginalmente con buen prompting, el fine-tuning no estaba justificado.
Caso Práctico: Flujo Completo para un Modelo de Dominio Específico
- Arma 500–2000 ejemplos en formato system/user/assistant con casos reales de tu dominio
- Lanza un Pod con RTX 3090 + imagen Axolotl + volumen persistente en
/workspace - Configura LoRA con
lora_r=16, 3 epochs,learning_rate=2e-4 - Entrena — tiempo estimado: 1–4 horas. Costo: $3–8 USD
- Fusiona el adaptador y convierte a GGUF
- Despliega en Ollama local — sin enviar datos a terceros, sin costo de inferencia recurrente
Conclusión
La combinación de RunPod + Axolotl + LoRA/QLoRA democratizó el fine-tuning de LLMs. Lo que hace un año requería un equipo de ML y servidores propios, hoy lo puede hacer un desarrollador individual en pocas horas por menos de $10.
El stack de 2026 está maduro. Los modelos base open source (Llama 4, Qwen3, Mistral) son suficientemente potentes para que un fine-tune bien ejecutado produzca resultados de producción reales. No hay excusa para no experimentar.