Skip to content

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 int4

Salida 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: ~100ms

CPU 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.0

Salida

============================================
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: PCIe

Comparación de Métodos

MétodoVRAM NecesariaRendimientoComplejidad
Solo GPUAltaAltoBaja
Layer OffloadMediaMedioMedia
CPU OffloadBajaBajoAlta
CuantizaciónBajaMedio-AltoBaja

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 20

Threads de CPU

bash
# Para procesamiento en CPU
--threads 12
--threads 8

Cuá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+CPU

Commits 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.