Appearance
Capítulo 5: Optimización GPU
Cuando un modelo no cabe completamente en la VRAM de tu GPU, existen técnicas de optimización que permiten ejecutarlo de todas formas.
Layer Offload (Offload de Capas)
Concepto
El modelo se divide entre GPU y CPU:
- Capas iniciales en GPU (más acceso)
- Capas restantes en CPU (transferidas según necesidad)
Cuándo Usar
- Modelo no cabe completo en VRAM
- Tienes CPU y RAM decentes
- Aceptas reducción en tokens/segundo
Ejemplo de Uso
bash
# Calcular offload óptimo para modelo de 70B
python main.py --model 70 --context 8192 --optimize-config --quantization int4Salida de Ejemplo
============================================
CONFIGURACIÓN DE LAYER OFFLOAD
============================================
Modelo: 70B (INT4)
Contexto: 8192
GPU: RTX 4090 (24GB)
• Capas en GPU: 20 / 80
• Capas en CPU: 60 / 80
• VRAM usada: 22.5 GB / 24 GB
Parámetro recomendado para llama.cpp:
--gpu-layers 20 --threads 12
Impacto estimado:
• Tokens/segundo: ~8-12 (vs ~15-20 completo)
• Latencia por token: ~100msCPU Offload (Offload a CPU)
Concepto
Inference híbrida donde:
- 일부 pesos en GPU
- Algunos pesos en RAM del sistema
- Transferencia via PCIe
Parámetros
bash
# Configuración con CPU offload
python main.py --model 70 --context 8192 --cpu-offload --system-ram 64 --pcie-gen 4.0Salida
============================================
ANÁLISIS DE CPU OFFLOAD
============================================
Modelo: 70B INT4
RAM del sistema: 64 GB
PCIe: 4.0 (16 GB/s)
• Memoria VRAM necesaria: 18 GB
• Memoria RAM necesaria: 18 GB
• Transferencia PCIe: ~2 GB/token
Rendimiento estimado:
• Tokens/segundo: 5-8
• Ancho de banda PCIe: 16 GB/s
• Factor limitante: PCIeComparación de Métodos
| Método | VRAM Necesaria | Rendimiento | Complejidad |
|---|---|---|---|
| Solo GPU | Alta | Alto | Baja |
| Layer Offload | Media | Medio | Media |
| CPU Offload | Baja | Bajo | Alta |
| Cuantización | Baja | Medio-Alto | Baja |
Parámetros de llama.cpp
GPU Layers
bash
# Cargar todas las capas en GPU
--gpu-layers 0
# Cargar capas específicas
--gpu-layers 32
# Cantidad óptima calculada por la herramienta
--gpu-layers 20Threads de CPU
bash
# Para procesamiento en CPU
--threads 12
--threads 8Cuándo Elegir Qué
Elige Solo GPU si:
- Tienes VRAM suficiente (modelo + 30% overhead)
- Prioridad: velocidad
Elige Layer Offload si:
- VRAM limitada pero suficiente para ~30% de capas
- CPU razonablemente rápido
- Aceptas sacrificar algo de velocidad
Elige CPU Offload si:
- VRAM muy limitada (<10GB para 70B)
- Tienes mucha RAM del sistema (>64GB)
- PCIe 4.0 o 5.0
Elige Cuantización si:
- Buscas el mejor balanceVRAM/calidad
- INT4 es aceptable para tu caso de uso
Ejemplo Práctico Completo
bash
# Escenario: RTX 3080 (10GB), modelo 70B, contexto 8K
# Opción 1: Cuantización
python main.py --model 70 -c 8192 -q int4
# Resultado: ~18GB VRAM - NO cabe
# Opción 2: Layer offload
python main.py --model 70 -c 8192 --optimize-config -q int4
# Resultado: 10GB VRAM, 15 capas en GPU
# Opción 3: CPU offload
python main.py --model 70 -c 8192 --cpu-offload --system-ram 64
# Resultado: Hybrid GPU+CPUCommits Relacionados
feat: Add advanced inference configuration features (v0.2.0)- Layer offload y CPU offload
Siguiente Capítulo
En el Capítulo 6, exploraremos configuraciones multi-GPU.