GPU Passthrough GTX 960 en Proxmox VE: guía completa con VFIO, IOMMU y drivers CUDA
Cómo pasar una tarjeta gráfica NVIDIA física a una máquina virtual Ubuntu Server con GPU passthrough, configuración IOMMU en el host, y verificación CUDA en la VM. Hardware legacy (Maxwell), rendimiento nativo.
¿Qué es GPU Passthrough?
El GPU passthrough es una capacidad de Proxmox VE que permite asignar control total de un dispositivo PCIe (en este caso una tarjeta gráfica NVIDIA) a una máquina virtual, como si estuviera instalada en bare metal. La GPU queda aislada del host mediante IOMMU y VFIO, trabajando al 100% de rendimiento sin overhead de hipervisión.
En este tutorial, documento el proceso completo con una NVIDIA GTX 960 (arquitectura Maxwell) y Ubuntu Server 24.04 en Proxmox VE 8.x. El hardware es legacy de 2015, pero el resultado es completamente funcional: CUDA, drivers oficiales NVIDIA 580, y GPU accesible desde dentro de la VM.
Características principales
Rendimiento nativo
GPU al 100%, sin penalización de virtualización. Acceso directo a PCIe.
Aislamiento IOMMU
El dispositivo queda segregado del host. Invisible para Proxmox después del passthrough.
VFIO + KVM
Combinación estándar Linux para pasar hardware a VMs QEMU. Completamente soportada.
Drivers oficiales NVIDIA
nvidia-driver-580, sin necesidad de parches custom. Compatible GTX 960 (Maxwell).
CUDA 100% funcional
nvidia-smi verifica GPU, drivers y cores CUDA. Listo para Ollama, transcodificación, ML.
Configuración legacy-friendly
GTX 960 necesita allow_unsafe_interrupts=1. Funciona pero requiere cuidado.
Paso 1: Habilitar Intel VT-d en la BIOS
Antes de cualquier comando, hay que activar Intel VT-d en la placa base. Sin esta capacidad de hardware, el procesador no puede segmentar los canales PCIe para aislamiento.
Procedimiento (MSI Click BIOS 5):
1. Entrar en modo avanzado
Reiniciar → Pulsar Supr → Entrar a BIOS → F7 para activar modo avanzado (necesario).
2. Navegar a CPU Features
OC → CPU Features (o Settings → Advanced → CPU Configuration en algunas placas).
3. Cambiar VT-d a Enabled
Localizar «Intel VT-d» o «Intel Virtualization Technology for Directed I/O» → Cambiar de Disabled a Enabled.
4. Guardar y reiniciar
F10 → Confirmar → Sistema reinicia con VT-d activo en hardware.
Paso 2: Configurar IOMMU y VFIO en el host Proxmox
Con VT-d activo en hardware, ahora configuramos el kernel de Proxmox para que cargue los módulos VFIO y pase los parámetros IOMMU al arranque.
Paso 2a: Parámetros de arranque GRUB
# Asegurarse de que GRUB_CMDLINE_LINUX_DEFAULT contiene:
# intel_iommu=on iommu=pt
nano /etc/default/grub
update-grub
update-initramfs -u -k all
Paso 2b: Módulos del kernel
# Añadir estas líneas:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Paso 2c: Interrupciones no seguras (necesario para GTX 960)
echo «options kvm allow_unsafe_assigned_interrupts=1» > /etc/modprobe.d/kvm_unsafe.conf
echo «options vfio_iommu_type1 allow_unsafe_interrupts=1» > /etc/modprobe.d/iommu_unsafe.conf
update-initramfs -u -k all
reboot
Paso 2d: Verificación tras reinicio
cat /proc/cmdline
# Debe contener: intel_iommu=on iommu=pt
cat /etc/default/grub.d/proxmox-ve.cfg
cat /etc/modules
cat /etc/modprobe.d/kvm_unsafe.conf
cat /etc/modprobe.d/iommu_unsafe.conf
Paso 3: Asignar GPU a la máquina virtual
Con el host configurado, ahora le asignamos la GPU a la VM. Esto se hace en el fichero de configuración de la VM (ej: 101.conf para VM ID 101).
Opción 1 (GUI): En Proxmox → Seleccionar VM → Hardware → Add → PCI Device → Seleccionar GPU.
Opción 2 (CLI – recomendado):
lspci | grep -i nvidia
# Salida ejemplo: 01:00.0 VGA compatible controller: NVIDIA GTX 960
# El ID es: 01:00
nano /etc/pve/qemu-server/101.conf
# Añadir esta línea (reemplaza 01:00 con tu ID):
hostpci0: 0000:01:00,pcie=1,x-vga=1
cat /etc/pve/qemu-server/101.conf
# Verificar que hostpci0 está correctamente configurado
•
pcie=1 → Usar PCIe en lugar de PCI (más eficiente).•
x-vga=1 → Indicar a QEMU que esto es un display device.
Paso 4: Instalar drivers NVIDIA y verificar CUDA en la VM
Arranca la VM (con la GPU asignada). Dentro de Ubuntu Server, detectaremos la GPU, instalaremos drivers, y verificaremos CUDA.
Diagnóstico inicial
lspci | grep -i nvidia
# Debe mostrar: NVIDIA GTX 960 o similar
# Ubuntu detecta automáticamente drivers compatibles
ubuntu-drivers devices
# Debe listar: nvidia-driver-580 (o versión más reciente)
Instalar drivers NVIDIA
sudo apt install nvidia-driver-580 nvidia-utils-580 -y
# El sistema descarga e instala driver + utilidades
sudo reboot
# Reiniciar para que driver se cargue correctamente
Verificación CUDA
# Salida esperada:
# +—-+———-+——-+
# | 0 | GTX 960 | 4 GB |
# +—-+———-+——-+
# Driver Version: 580.x | CUDA Version: 12.x
# 1024 CUDA Cores accesibles
Resumen de ficheros modificados
| Fichero | Entorno | Propósito | Estado |
|---|---|---|---|
/etc/default/grub.d/proxmox-ve.cfg |
Host | Parámetros IOMMU | Modificado |
/etc/modules |
Host | Módulos VFIO | Modificado |
/etc/modprobe.d/kvm_unsafe.conf |
Host | Interrupciones KVM | Creado |
/etc/modprobe.d/iommu_unsafe.conf |
Host | Interrupciones VFIO | Creado |
/etc/pve/qemu-server/101.conf |
Host | Asignación GPU a VM | Modificado |
Casos de uso para GTX 960 via Passthrough
- Inferencia local: Ollama con Llama 3.2 3B, Phi-3 mini. 4 GB VRAM + Q4 quantization = viabilidad total.
- Transcodificación: Jellyfin/Plex con NVENC/NVDEC hardware. Reduce CPU host dramáticamente.
- CUDA workloads: Procesamiento datos, entrenamiento ML ligero, computer vision con 1024 CUDA cores.
- Gaming/Desktop: VM Windows o Linux desktop con GPU dedicada. No es AAA moderno, pero viable indie/retro.
- Laboratorio: Testing de aplicaciones GPU-bound. Desarrollo CUDA. Experimentación.
Acceso remoto seguro (opcional)
Si la VM está dentro del LAN y quieres acceso remoto, usa Caddy o Nginx Proxy Manager:
gpu-app.tudominio.com {
reverse_proxy localhost:8080
}
Mantenimiento y gestión
Ver logs de la VM
Backup de datos de la VM
Actualizar drivers NVIDIA en la VM
sudo reboot
Monitorear GPU dentro de la VM
nvidia-smi -q -g 0 -l 1
# Con watch (actualiza cada 2 segundos)
watch -n 2 nvidia-smi
Comparativa: GPU Passthrough vs otras opciones
vs GPU Emulation (qemu)
Passthrough gana: Rendimiento nativo, sin penalización. Emulation gana: No requiere hardware compatible, más flexible.
vs Bare Metal (sin Proxmox)
Passthrough gana: Múltiples VMs, consolidación, management centralizado. Bare Metal gana: Cero overhead, máxima compatibilidad.
vs Cloud GPU (AWS/Azure)
Passthrough gana: Control total, sin suscripción, privado, latencia cero. Cloud gana: Escalabilidad, disponibilidad, GPUs modernas.
Referencias oficiales
Apoya el canal GENBYTE
Suscríbete al canal de YouTube
Suscríbete a la newsletter semanal
Invítame a un Ko-fi
[email protected]
