PCI Passthrough en Proxmox: guía GPU paso a paso

PCI Passthrough en Proxmox: guía GPU paso a paso

PCI Passthrough en Proxmox: guía GPU paso a paso

Guía práctica de PCI passthrough en Proxmox 8: desde activar VT-d en la BIOS hasta tener la GPU funcionando dentro de la VM. Sin atajos falsos ni promesas de rendimiento garantizado.

Por Javier · Actualizado: 2025-03-04

El PCI passthrough de GPU en Proxmox permite asignar una tarjeta gráfica física directamente a una máquina virtual, que la ve como hardware dedicado. Requiere que la placa base soporte IOMMU (Intel VT-d o AMD-Vi), activarlo en BIOS y en el kernel, y vincular la GPU al driver vfio-pci antes de arrancar la VM.

Ya tienes Proxmox. Falta meter la GPU.

Si llevas un tiempo con Proxmox y ya te mueves con soltura entre VMs y contenedores, en algún momento te has preguntado si puedes dar un paso más: asignarle la GPU directamente a una VM para que el guest la vea como hardware real. Gaming en Windows sin sacrificar el homelab, o cargas con CUDA y ROCm sin tocar el host. La idea tiene sentido. La ejecución, en cambio, tiene más capas de las que parece.

IOMMU, VFIO, grupos de dispositivos, driver stub, OVMF… cada uno con su manera de fallar sin decirte por qué. No es que la documentación falte; es que está repartida en foros, wikis y hilos de Reddit donde cada caso es ligeramente distinto al tuyo. Yo me tiré tres fines de semana antes de conseguir que funcionara, y la mayor parte del tiempo la perdí en pasos que pensaba que eran opcionales y resultaron no serlo.

Este post recorre el proceso desde el principio: qué verificar antes de empezar (el hardware importa y no todos los equipos se portan igual), cómo configurar el host paso a paso, y dónde suele atascarse la gente cuando algo no cuadra. No voy a prometerte que será rápido, porque depende de tu setup. Sí puedo contarte exactamente lo que nadie te explica hasta que ya llevas horas perdido.

Por qué importa

IOMMU es obligatorio

Sin VT-d (Intel) o AMD-Vi activo en BIOS y kernel, el passthrough no arranca. Muchas placas lo traen desactivado por defecto.

Driver del host, desvinculado

vfio-pci debe reemplazar al driver nativo de la GPU antes de asignarla a la VM.

UEFI, no SeaBIOS

Las GPUs modernas requieren OVMF como firmware de la VM. Con SeaBIOS el passthrough falla silenciosamente.

Error 43: no es un bug

NVIDIA detecta el hipervisor y bloquea el driver en VMs. Se resuelve ocultando la firma de Proxmox en la config de la VM.

Antes de empezar: qué necesitas realmente

El passthrough de GPU en Proxmox no es un truco que funcione en cualquier máquina. El hardware del host tiene que soportar IOMMU — Intel lo llama VT-d, AMD lo llama AMD-Vi — y la placa base tiene que exponerlo correctamente al sistema operativo.

Antes de tocar nada, comprueba estas tres cosas:

  • CPU con soporte VT-d o AMD-Vi: la mayoría de procesadores de los últimos años lo incluyen, pero algunas líneas de consumo (Celeron, Pentium, Athlon sin sufijo X) lo omiten. Compruébalo en las especificaciones del fabricante.
  • BIOS/UEFI con la opción activada: en muchos equipos viene desactivada por defecto. Busca «VT-d», «AMD-Vi» o «IOMMU» en la configuración avanzada del chipset.
  • Proxmox 8.x: este tutorial usa Proxmox 8.2+, que trae el kernel 6.8 como base. Los pasos son prácticamente los mismos en versiones anteriores, pero el comportamiento de los módulos puede variar.

Una advertencia importante: mientras la VM con passthrough esté encendida, la GPU queda completamente ocupada por esa VM. Si tu servidor solo tiene una GPU y la usas para algo en el host, tendrás que apagar la VM para recuperarla.

Paso 1 — Activar IOMMU en la BIOS y en el kernel

Primero la BIOS: entra en la configuración de tu placa base y activa VT-d (Intel) o AMD-Vi (AMD). La ubicación exacta varía por fabricante — en ASUS suele estar en Advanced → CPU Configuration → Intel Virtualization for Directed I/O; en Supermicro está en Advanced → PCIe/PCI/PnP. Si no la encuentras, busca el manual de tu placa.

Con la BIOS configurada, toca editar el arranque del kernel en el host Proxmox.

Intel (VT-d)

Edita /etc/default/grub y localiza la línea GRUB_CMDLINE_LINUX_DEFAULT. Añade intel_iommu=on iommu=pt:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

El parámetro iommu=pt (passthrough mode) mejora el rendimiento de dispositivos que no usan IOMMU activamente. Merece la pena añadirlo siempre.

AMD (AMD-Vi)

La línea equivalente para AMD:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

Aplica los cambios y reinicia:

update-grub
reboot

Tras el reinicio, verifica que IOMMU está activo:

dmesg | grep -e DMAR -e IOMMU

Deberías ver líneas como DMAR: IOMMU enabled (Intel) o AMD-Vi: Found IOMMU (AMD). Si no aparece nada, el problema está en la BIOS — es el punto donde más tiempo se pierde en este proceso.

Paso 2 — Verificar los grupos IOMMU y aislar la GPU

Los grupos IOMMU determinan qué dispositivos pueden pasarse juntos a una VM. El kernel los agrupa según la topología del bus PCIe, y solo puedes asignar a una VM dispositivos que pertenezcan a grupos distintos entre sí. Lo que buscas es que tu GPU esté en un grupo junto únicamente con sus propias funciones (la GPU y su controlador de audio).

Este script lista todos los grupos IOMMU del sistema:

#!/bin/bash
for d in /sys/kernel/iommu_groups/*/devices/*; do
  n=${d#*/iommu_groups/*}; n=${n%%/*}
  printf 'IOMMU Group %s ' "$n"
  lspci -nns "${d##*/}"
done

En mi caso, con una RTX 3060 en un Ryzen 5 3600 + B550, el grupo estaba limpio: GPU y su audio en el mismo grupo, sin nada más. No necesité ningún parche adicional.

¿Qué pasa si la GPU comparte grupo IOMMU con otros dispositivos?

Hay placas base, especialmente de gama media-baja de consumo, donde los grupos IOMMU están mal aislados y la GPU aparece junto al puente PCIe u otros dispositivos críticos. En ese caso tienes dos opciones reales:

  • ACS override patch: un parche del kernel que fuerza el aislamiento de grupos. Funciona en muchos casos, pero tiene una implicación de seguridad importante: rompe el aislamiento IOMMU real, lo que podría permitir a un dispositivo en la VM acceder a memoria del host. En un homelab personal sin datos críticos ni usuarios adicionales puede ser aceptable; en cualquier otro entorno, evalúalo con cuidado antes de aplicarlo.
  • Cambiar de placa base o de slot PCIe: aburrido pero efectivo. Las placas con chipsets de servidor (C621, C422, TRX50) suelen tener un aislamiento IOMMU mucho mejor por diseño.

Paso 3 — Vincular la GPU al driver vfio-pci

Para que Proxmox pueda asignar la GPU a una VM, el host no puede estar usándola con su driver nativo (nvidia, amdgpu, nouveau). Hay que vincularla al driver vfio-pci, que actúa como stub y la deja disponible para la VM.

Primero obtén las IDs de vendor y device de tu GPU:

lspci -nn | grep -iE "vga|3d|display"

Verás algo como [10de:2504] — el primer número es el vendor (NVIDIA = 10de, AMD = 1002), el segundo es el device. Anota también la ID del audio de la GPU si quieres pasarla también.

Crea el fichero de configuración de módulos con tus IDs:

echo "options vfio-pci ids=10de:2504,10de:228b" > /etc/modprobe.d/vfio.conf

Luego asegúrate de que los módulos vfio se declaran en /etc/modules:

vfio
vfio_iommu_type1
vfio_pci

Para que vfio-pci gane la carrera de carga frente a los drivers nativos, añade en /etc/modprobe.d/blacklist.conf los drivers que apliquen a tu GPU:

# Para NVIDIA
blacklist nouveau
blacklist nvidia
blacklist nvidiafb

# Para AMD
blacklist radeon
blacklist amdgpu

Actualiza el initramfs y reinicia:

update-initramfs -u -k all
reboot

Verifica que vfio-pci ha tomado el control de la GPU:

lspci -nnk | grep -A 3 -iE "vga|3d"

La línea Kernel driver in use: vfio-pci confirma que todo está en orden.

Paso 4 — Configurar la VM en Proxmox

Crea una VM nueva o adapta una existente. Los parámetros que más importan para el passthrough de GPU:

  • BIOS: OVMF (UEFI). SeaBIOS tiene limitaciones importantes con GPUs modernas en passthrough. Activa el disco EFI al crear la VM.
  • Machine type: q35. Soporta PCIe correctamente; i440fx tiene restricciones de topología que pueden dar problemas.
  • CPU type: host. Expone las flags reales de la CPU a la VM. Necesario para algunos drivers y para el rendimiento correcto.

Con la VM creada, añade el dispositivo PCI desde la interfaz: Hardware → Add → PCI Device. Selecciona tu GPU, marca «All Functions» (para incluir el controlador de audio si lo quieres) y activa «PCI-Express» si la GPU va en un slot PCIe.

El problema del Error 43 con GPUs NVIDIA de consumo

Si usas una GPU NVIDIA GeForce en una VM Windows, es probable que el driver detecte que está corriendo en una VM y se niegue a funcionar — aparece el Error 43 en el Administrador de dispositivos. Esto no es un bug de Proxmox: NVIDIA implementa deliberadamente esta detección en sus drivers de consumo. Las tarjetas Quadro y RTX profesionales no tienen este problema.

La solución estándar es ocultar el hipervisor a la VM. Edita el fichero de configuración de la VM en /etc/pve/qemu-server/<vmid>.conf y añade:

cpu: host,hidden=1,flags=+pcid
args: -cpu 'host,kvm=off'

Y en la línea de la GPU, añade la opción x-vga=1:

hostpci0: 0000:01:00,allFunctions=1,pcie=1,x-vga=1

Con estas opciones, muchas GPUs GeForce funcionan sin Error 43. No es garantía universal — depende de la versión del driver y del modelo concreto — pero es el punto de partida que funciona en la mayoría de los casos documentados.

Paso 5 — Arrancar y verificar dentro de la VM

Con todo configurado, arranca la VM. Si es la primera vez, la consola noVNC de Proxmox te dará acceso durante el boot aunque la GPU esté en passthrough — una vez que el sistema operativo toma el control de la GPU, la consola dejará de mostrar imagen y tendrás que usar el monitor conectado a la GPU o acceso remoto (RDP, VNC desde dentro de la VM).

En una VM Windows, instala los drivers directamente desde la web de NVIDIA o AMD como si fuera un equipo físico. Si la GPU aparece en el Administrador de dispositivos sin errores, el passthrough funciona.

Para verificar en una VM Linux:

# Ver si la GPU es visible
lspci | grep -i vga

# NVIDIA
nvidia-smi

# AMD (con ROCm instalado)
rocm-smi

Si tienes pensado usar CUDA o ROCm dentro de la VM, los drivers y runtimes van instalados en el guest, no en el host. El host en este punto no sabe nada de la GPU — la tiene vfio-pci como stub y punto.

Algunas cosas que pueden salir mal en esta fase:

  • La VM no arranca y ves una pantalla en negro o un cursor parpadeante: revisa que activaste el disco EFI al crear la VM y que la GPU está efectivamente en vfio-pci, no en otro driver.
  • Error 43 en Windows a pesar de ocultar el hipervisor: prueba a instalar una versión de driver diferente. Algunas versiones recientes de NVIDIA son más estrictas; otras más permisivas. No hay una versión mágica universal.
  • El monitor conectado a la GPU no muestra nada al arrancar: asegúrate de que el monitor está conectado antes de encender la VM y de que x-vga=1 está configurado correctamente en el .conf.

Preguntas frecuentes

Q: ¿Vale cualquier placa base para hacer GPU passthrough?

A: Depende del chipset y fabricante: la placa debe soportar IOMMU (Intel VT-d o AMD-Vi) y tenerlo activado en la BIOS/UEFI, que en muchos equipos viene desactivado por defecto. Las placas de servidor o gama alta suelen tenerlo mejor implementado que las de consumo básico, donde el soporte IOMMU puede ser parcial o defectuoso.

Q: ¿Por qué aparece el Error 43 en mi GPU NVIDIA?

A: No es un bug de Proxmox: es una detección anti-VM que NVIDIA implementa deliberadamente en sus drivers de consumo. La solución habitual es ocultar la firma del hipervisor en la configuración de la VM (opción 'hidden' en el cpu type), lo que hace que el driver no detecte que está corriendo dentro de KVM.

Q: ¿Qué pasa si mi GPU comparte grupo IOMMU con otros dispositivos?

A: Si la GPU no está en un grupo IOMMU aislado, el passthrough puede fallar o arrastrar otros dispositivos del host a la VM. Existe el ACS override patch como solución, pero rompe el aislamiento entre grupos IOMMU y tiene implicaciones de seguridad reales; conviene entender el riesgo antes de aplicarlo.

Q: ¿Cuándo deja de estar disponible la GPU para el host?

A: En cuanto arrancas la VM con el passthrough configurado. La GPU queda asignada en exclusiva al guest mientras esté encendida: el host no puede usarla para nada, ni para mostrar imagen ni para cómputo. Al apagar la VM, el dispositivo vuelve a estar disponible.

Q: ¿Cómo afecta la versión de Proxmox al proceso?

A: Proxmox 8.2 y posteriores usan el kernel 6.8, donde los módulos vfio, vfio_iommu_type1 y vfio_pci están disponibles y bien mantenidos. El proceso general es similar entre versiones 7.x y 8.x, pero los pasos para cargar módulos en initramfs y la configuración de GRUB pueden variar ligeramente; siempre conviene seguir la documentación de tu versión concreta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *