⚠️ Competencia avanzada: el GPU Passthrough VFIO es uno de los logros más complejos y más buscados del portfolio. Permite asignar físicamente la RTX 5090 a una VM, con un rendimiento cercano al de una instalación nativa.
¿Por qué una RTX 5090 para la IA local? Con sus núcleos CUDA y Tensor y sus 32 GB de memoria GDDR7, acelera considerablemente los cálculos paralelos necesarios para la inferencia de modelos de lenguaje, los embeddings y la generación de imágenes — manteniendo localmente los modelos y los datos procesados.
¿Por qué el passthrough pese a sus restricciones? El passthrough PCIe con VFIO asigna la tarjeta directamente a una VM: el sistema invitado, CUDA y los contenedores usan la GPU con un rendimiento cercano al nativo y un aislamiento claro de las cargas. A cambio, la asignación es exclusiva (sin uso simultáneo por varias VM) y exige una preparación rigurosa del host, del arranque y de los procedimientos de recuperación.
⚡ Límite eléctrico — medición de diagnóstico (pasada)

Se utilizó un límite de software temporal de 400 W (frente a 600 W por defecto en la tarjeta observada) durante un diagnóstico eléctrico. Las pruebas de ComfyUI y Ollama del 27–28 de septiembre de 2026 se realizaron después a 600 W, por decisión explícita. No se ha establecido ninguna ganancia de estabilidad duradera ni comparación de rendimiento entre estos límites.

verificación pública reproducible
nvidia-smi \
  --query-gpu=power.limit,power.default_limit \
  --format=csv,noheader

El valor de diagnóstico de 400 W se aplica con sudo nvidia-smi --power-limit=400 — un ajuste no persistente tras un reinicio o una recarga del controlador. Los comandos detallados, la telemetría y el retorno al límite de fábrica están documentados en la página IA y LLM (VM210).

🔧 Stack técnico
TecnologíaFunción
VFIOFramework Linux de aislamiento PCIe
IOMMU / AMD-ViUnidad de gestión de memoria para E/S
PCI PassthroughAsignación directa GPU → VM
Q35Chipset QEMU requerido para PCIe moderno
OVMFUEFI obligatorio para passthrough NVIDIA
📁 Archivos del sistema modificados
ArchivoModificación
/etc/default/grubamd_iommu=on iommu=pt
/etc/modprobe.d/vfio.confbind de VFIO a los ID de la GPU
/etc/modulesvfio vfio_iommu_type1 vfio_pci
/etc/initramfs-tools/Integración de módulos en el arranque
/etc/pve/qemu-server/*.confConfiguración de VM en Proxmox
🐛 Diagnóstico por capas

La puesta en marcha exigió distinguir varios niveles de diagnóstico, para atribuir cada efecto a un único parámetro:

  • firmware e IOMMU
  • controlador del host y grupos PCIe
  • reserva de la GPU y de su función de audio a vfio-pci
  • configuración de la VM
  • controlador invitado y CUDA
  • runtime en contenedores (acceso a la GPU hasta dentro de Docker)

Antes de cualquier actualización del firmware, se guardan los parámetros necesarios para IOMMU y VFIO y se prepara un retroceso; tras cada modificación, se revalidan los grupos IOMMU, la reserva de la GPU y el arranque de las VM. Se conserva una consola virtual distinta para la recuperación.

No se muestra aquí: ningún arreglo puntual (parche OVMF, enmascaramiento del hipervisor, mapeo IOMMU particular…) se presenta mientras no exista una prueba pública exacta. La validación de VFIO, del controlador invitado y de CUDA no permite deducirlos.
🔄 Exclusividad de la GPU — estado y orden de arranque de las VM

Ejecutado en el host Proxmox, este comando detecta la RTX 5090 (sin mostrar su dirección), identifica las VM configuradas para usarla y publica una etiqueta depurada — distinguiendo el estado actual de la VM de su política de autoarranque, y verificando que solo una VM de passthrough esté activa a la vez.

bash — verificación de exclusividad de GPU
gpu_bdf=$(lspci -D | awk '/NVIDIA.*RTX 5090/ {print $1; exit}')
[ -n "$gpu_bdf" ] || { echo 'RTX 5090 non détectée'; exit 1; }

gpu_slot=${gpu_bdf%.*}
gpu_slot_short=${gpu_slot#0000:}
alternative=0
running_gpu_vms=0

for vmid in $(qm list | awk 'NR > 1 {print $1}'); do
    config=$(qm config "$vmid")

    if grep -Eq "^hostpci[0-9]+:.*(${gpu_slot}|${gpu_slot_short})([.,]|$)" \
        <<< "$config"; then
        if [ "$vmid" = 210 ]; then
            label="IA-Core"
        else
            alternative=$((alternative + 1))
            label="GPU-alternative-${alternative}"
        fi

        status=$(qm status "$vmid" | awk '{print $2}')
        onboot=$(awk -F': ' '/^onboot:/ {print $2}' <<< "$config")
        startup=$(awk -F': ' '/^startup:/ {print $2}' <<< "$config")

        [ -z "$onboot" ] && onboot=0
        [ -z "$startup" ] && startup="-"
        [ "$status" = running ] && running_gpu_vms=$((running_gpu_vms + 1))

        printf '%-20s status=%-8s onboot=%-2s startup=%s\n' \
            "$label" "$status" "$onboot" "$startup"
    fi
done

if [ "$running_gpu_vms" -le 1 ]; then
    printf 'GPU passthrough actif : %s VM — exclusivité OK\n' "$running_gpu_vms"
else
    printf 'ALERTE : %s VM GPU actives simultanément\n' "$running_gpu_vms"
    exit 2
fi
extracto depurado — exclusividad verificada
IA-Core              status=running  onboot=1  startup=order=20,up=30,down=60
GPU-alternative-1    status=stopped  onboot=0  startup=-
GPU-alternative-2    status=stopped  onboot=0  startup=-
…                    status=stopped  onboot=0  startup=-
GPU passthrough actif : 1 VM — exclusivité OK
Lectura: solo una VM de passthrough (IA-Core / VM210) usa la RTX 5090; los entornos GPU alternativos quedan fuera del autoarranque. Al reanudar el host, VM215 (PostgreSQL/pgvector) arranca primero, luego VM210 (carga GPU + Ollama / OpenWebUI / RAG) — sin competencia por la GPU.
🔧 Registro de BIOS y precaución con el firmware

Un registro de BIOS de referencia separa los valores realmente observados de las mejoras simplemente consideradas. Antes de cualquier actualización de firmware, se respaldan los parámetros necesarios para IOMMU y VFIO y se prepara un plan de reversión; tras la modificación, se revalidan los grupos IOMMU, la reserva de la GPU y el arranque de las VM. Las pruebas se realizan de una en una, para atribuir claramente cada efecto al parámetro modificado.

Restricción estructurante: la RTX 5090 es un recurso físico exclusivo — solo una VM de passthrough puede usarla a la vez. La arquitectura documenta por tanto explícitamente las incompatibilidades de arranque simultáneo, y se conserva una consola virtual independiente para la recuperación.

Validación: el controlador NVIDIA y CUDA se validaron en una VM Ubuntu, y después se verificó el acceso a la GPU incluso dentro de contenedores Docker (mediante el NVIDIA Container Toolkit).

Páginas relacionadas

Referencias y fuentes

CategoríaRecursoURL
Documentación oficialProxmox VE — PCI(e) Passthroughpve.proxmox.com/wiki/PCI_Passthrough
Documentación oficialLinux Kernel — VFIOdocs.kernel.org/driver-api/vfio
HardwareNVIDIA GeForce RTX 5090 · plateforme AMD (IOMMU / AMD-Vi)—
LicenciaVFIO (noyau Linux) — GPL · pilotes NVIDIA — propriétaires—
Contenido de esta páginaCompartido bajo CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0