Guía Llama.cpp: Capítulo 2 — Configuración GPU: NVIDIA y Vulkan
La CPU puede ejecutar cualquier modelo, pero la GPU es lo que convierte la inferencia de un ejercicio de paciencia en una experiencia fluida. En este capítulo configuramos los dos backends GPU más usados: CUDA para NVIDIA y Vulkan como opción universal (AMD, Intel, integradas, portabilidad).
1. Cómo funciona la deslocalización de capas
llama.cpp organiza el modelo en capas (layers). El parámetro -ngl N (n-gpu-layers) indica cuántas capas se trasladan a la GPU:
-ngl 99→ intenta subir todas las capas (valor habitual; el exceso se descarta automáticamente).-ngl 16→ solo 16 capas en GPU, el resto en CPU. Útil cuando la VRAM no basta.- Las capas que no caben en VRAM gestionan los pesos, cálculos y KV-cache de las capas que ya están en GPU se colocan en VRAM o en memoria compartida según el backend.
Estrategia práctica: empieza con -ngl 99; si hay errores de memoria, baja progresivamente (40, 24, 16...) hasta estabilizar.
2. NVIDIA con CUDA
2.1 Instalar el CUDA Toolkit
- Descarga el CUDA Toolkit (12.x en 2026) desde el portal de NVIDIA.
- Durante la instalación, marca al menos el runtime y el compilador
nvcc. - Verifica:
nvcc --version
nvidia-smi
nvidia-smi te da la información crítica: VRAM total y memoria en uso, las dos cifras que gobiernan tus decisiones de -ngl y cuantización.
2.2 Compilar con CUDA (Windows)
cmake -B build -DGGML_CUDA=ON -DGGML_NATIVE=ON
cmake --build build --config Release -j
2.3 Compilar con CUDA (Linux)
cmake -B build -DGGML_CUDA=ON -DGGML_NATIVE=ON
cmake --build build --config Release -j$(nproc)
2.4 Variables y opciones útiles de CUDA
-DGGML_CUDA_F16=ON— operar kernels en FP16 (más rápido en GPUs modernas).-DCUDA_ARCH=XX— compilar solo para tu arquitectura (89para RTX 40xx,86para RTX 30xx) y acortar tiempos de build.-DGGML_CUDA_GRAPHS=ON— activa CUDA Graphs para reducir overhead en generaciones largas.
2.5 Comprobación
./llama-cli -m models/modelo.gguf -ngl 99 -p "Prueba de GPU"
En los primeros segundos de arranque verás el volcado del backend:
ggml_cuda: found 1 CUDA devices:
Device 0: NVIDIA GeForce RTX XXXX, compute capability 8.6, VMM: yes
Y durante la carga del modelo, algo como offloaded 32/32 layers to GPU. Si lees esa línea, estás acelerando.
3. Vulkan: la opción universal
Vulkan es la alternativa cuando:
- Tu GPU es AMD (CUDA no aplica).
- Tienes una iGPU Intel/AMD y quieres descargar trabajo de la CPU.
- Se construyen binarios para máquinas heterogéneas y se quiere binario portable.
3.1 Requisitos
- Linux: SDK Vulkan y drivers de tu proveedor:
# Debian/Ubuntu
sudo apt install -y vulkan-tools libvulkan-dev glslang-tools
vulkaninfo --summary # comprueba que se detecta el dispositivo
- Windows: el driver del fabricante ya incluye el runtime de Vulkan. Comprueba con
vulkaninfo.exeo la app GPU-Z.
3.2 Compilar con Vulkan
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release -j
En Windows con Visual Studio, además del compilador, instala el Vulkan SDK (LunarG) para disponer de glslangValidator.
3.3 Vulkan vs CUDA: qué esperar
| Aspecto | CUDA | Vulkan |
|---|---|---|
| Rendimiento en RTX | Óptimo (100%) | ~80-95% |
| AMD / Intel | No disponible | Disponible |
| Portabilidad del binario | Limitada a NVIDIA | Cualquier GPU con Vulkan |
| Gestión multi-GPU | Implementación NVIDIA | Implementación genérica |
💡 Regla práctica: si tienes NVIDIA, usa CUDA. Para todo lo demás, Vulkan con fallback automático a CPU.
4. Gestión de VRAM
4.1 Dimensionar la cuantización según tu VRAM
Ecuación mental rápida: VRAM necesaria ≈ tamaño GGUF + KV-cache. La KV-cache depende de ctx, n_batch y del modelo (el número de cabezas y capas).
| VRAM GPU | Recomendación model-size |
|---|---|
| 4 GB | 1B–3B en Q4_K_M |
| 6–8 GB | 7B–8B en Q4_K_M |
| 12 GB | 8B Q5/Q6, 14B Q4_K_M |
| 16–24 GB | 14B–30B en Q4/Q5, con contexto amplio |
| 24+ GB / multi-GPU | 70B en Q4 con -ngl 99 (o split de capas) |
4.2 Contexto y VRAM
El contexto (-c) consume memoria que también vive en GPU. Subir de 4096 a 16384 puede añadir cientos de MB o varios GB. Si el objetivo es contexto largo sobre una GPU pequeña, considera:
- KV-cache cuantizada:
--cache-type-k q8_0 --cache-type-v q8_0(capítulo 4). - FlashAttention:
-fa— reduce el footprint y acelera.
4.3 Monitorizar en caliente
# Windows
nvidia-smi -l 2
# Linux
watch -n 2 nvidia-smi
Si al cargar el modelo la VRAM llega al 100 % pero los tokens/segundo son pésimos, estás usando memoria compartida (swap de GPU). Baja cuantización o -ngl.
5. Multi-GPU
Con varias GPUs, llama.cpp las detecta y reparte capas. Con Vulkan puedes seleccionar dispositivos:
./llama-cli -m models/modelo.gguf -ngl 99 --device GPU-0,GPU-1
Y con CUDA, --split-mode:
layer(por defecto): reparte capas secuencialmente.row: dividir cada capa por filas de la matriz; útil entre GPUs equivalentes cuando el modelo es tan grande que ninguna lo cubre entera.
6. Checklist final del capítulo
- Backend compilado o binario adecuado a tu GPU descargado.
-
nvidia-smi/vulkaninfodetecta el dispositivo. - Al hacer un test con
-ngl 99, la carga muestraoffloaded X/X layers to GPU. - VRAM libre suficiente para modelo + KV-cache.
- Tokens/seg. claramente superiores a la ejecución en CPU.
Con la GPU lista, pasamos al corazón del sistema: el servidor de inferencia en el capítulo 3.