Cómo hacer Passthrough en Proxmox VE | Pasar gráfica a máquina virtual en Proxmox VE | GPU Passthrough GTX 960 en Proxmox VE

Proxmox VE | GPU Passthrough | NVIDIA GTX 960

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.

Este proceso requiere: VT-d habilitado en BIOS, Proxmox con acceso root, y paciencia editando ficheros de configuración. No hay interfaz gráfica para esto.

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.

Nota: Si no encuentras VT-d, busca con F3 (función search en Click BIOS 5). Puede estar bajo diferentes nombres según marca/modelo placa.

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

nano /etc/default/grub.d/proxmox-ve.cfg # Asegurarse de que GRUB_CMDLINE_LINUX_DEFAULT contiene: # intel_iommu=on iommu=pt nano /etc/default/grub update-grub update-initramfs -u -k all
iommu=pt: Passthrough mode mejora rendimiento del host. Incluirlo siempre con intel_iommu=on.

Paso 2b: Módulos del kernel

nano /etc/modules # Añadir estas líneas: vfio vfio_iommu_type1 vfio_pci vfio_virqfd

Paso 2c: Interrupciones no seguras (necesario para GTX 960)

# GPU legacy como GTX 960 requiere allow_unsafe_interrupts 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
Advertencia: allow_unsafe_interrupts=1 implica pequeño riesgo de seguridad (grupos IOMMU no perfectamente aislados). En homelab es aceptable; en producción, no recomendado.

Paso 2d: Verificación tras reinicio

# Confirmar parámetros IOMMU 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):

# Primero, identificar ID PCI de la GPU 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
Flags importantes:
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

# Verificar que la GPU es visible en PCI 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 update 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

nvidia-smi # Salida esperada: # +----+----------+-------+ # | 0 | GTX 960 | 4 GB | # +----+----------+-------+ # Driver Version: 580.x | CUDA Version: 12.x # 1024 CUDA Cores accesibles
✓ Si nvidia-smi muestra GPU, drivers y CUDA sin errores: ¡GPU passthrough funcional 100%! Ya puedes usar Ollama, transcodificación, o cualquier workload GPU.

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:

# Caddyfile ejemplo (para aplicación web en VM) gpu-app.tudominio.com { reverse_proxy localhost:8080 }

Mantenimiento y gestión

Ver logs de la VM

qm monitor 101

Backup de datos de la VM

ssh root@proxmox-host "vzdump 101 --compress lz4 --storage local-lvm"

Actualizar drivers NVIDIA en la VM

sudo apt update && sudo apt install --only-upgrade nvidia-driver-580 -y sudo reboot

Monitorear GPU dentro de la VM

# Tiempo real de GPU 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.

Passthrough es ideal para: Homelab, laboratorio personal, consolidación máquinas viejas, control total de datos.

Comentarios

Entradas populares de este blog

Cómo Instalar y configurar SERVIDOR VPN WIREGUARD en MIKROTIK 🔐 #VPN #Wireguard #Mikrotik #RouterOS

Cómo instalar y configurar DSM SYNOLOGY 7.2.2 en PC | Guía completa, instalación, RAID 1, SMB

Cómo INSTALAR y CONFIGURAR OpenVPN en MIKROTIK. Guía completa paso a paso.