⚠️ Compétence avancée : Le GPU Passthrough VFIO est l'une des réalisations les plus complexes et les plus recherchées du portfolio. Il permet d'assigner physiquement la RTX 5090 à une VM, avec des performances proches d'une installation native.
Pourquoi une RTX 5090 pour l'IA locale ? Avec ses cœurs CUDA et Tensor et ses 32 Go de mémoire GDDR7, elle accélère fortement les calculs parallèles nécessaires à l'inférence des modèles de langage, aux embeddings et à la génération d'images — tout en conservant localement les modèles et les données traitées.
Pourquoi le passthrough malgré ses contraintes ? Le passthrough PCIe avec VFIO attribue directement la carte à une VM : système invité, CUDA et conteneurs utilisent le GPU avec des performances proches du natif et une isolation claire des charges. En contrepartie, l'affectation est exclusive (pas d'usage simultané par plusieurs VM) et exige une préparation rigoureuse de l'hôte, du démarrage et des procédures de récupération.
⚡ Plafond électrique — mesure de diagnostic (passée)

Un plafond logiciel temporaire de 400 W (contre 600 W par défaut sur la carte observée) a été utilisé pendant un diagnostic électrique. Les essais ComfyUI et Ollama des 27–28 septembre 2026 ont ensuite été réalisés à 600 W, sur décision explicite. Aucun gain de stabilité durable ni comparaison de performance entre ces plafonds n'est établi.

contrôle public reproductible
nvidia-smi \
  --query-gpu=power.limit,power.default_limit \
  --format=csv,noheader

La valeur diagnostique de 400 W s'applique avec sudo nvidia-smi --power-limit=400 — réglage non persistant après un redémarrage ou un rechargement du pilote. Commandes détaillées, télémétrie et retour au plafond usine sont documentés sur la page IA & LLM (VM210).

🔧 Stack technique
TechnologieRôle
VFIOFramework Linux d'isolation PCIe
IOMMU / AMD-ViUnité de gestion mémoire pour I/O
PCI PassthroughAssignation directe GPU → VM
Q35Chipset QEMU requis pour PCIe moderne
OVMFUEFI obligatoire pour NVIDIA en passthrough
📁 Fichiers système modifiés
FichierModification
/etc/default/grubamd_iommu=on iommu=pt
/etc/modprobe.d/vfio.confbind VFIO sur IDs GPU
/etc/modulesvfio vfio_iommu_type1 vfio_pci
/etc/initramfs-tools/Intégration modules au boot
/etc/pve/qemu-server/*.confConfig VM Proxmox
🐛 Diagnostic par couches

La mise en place a exigé de distinguer plusieurs niveaux de diagnostic, afin d'attribuer chaque effet à un seul paramètre :

  • firmware et IOMMU
  • pilote hôte et groupes PCIe
  • réservation du GPU et de sa fonction audio à vfio-pci
  • configuration de la VM
  • pilote invité et CUDA
  • runtime conteneurisé (accès GPU jusque dans Docker)

Avant toute mise à jour du firmware, les paramètres nécessaires à IOMMU et VFIO sont sauvegardés et un retour arrière est préparé ; après modification, groupes IOMMU, réservation du GPU et démarrage des VM sont revalidés. Une console virtuelle distincte est conservée pour la récupération.

Non présenté ici : aucun dépannage ponctuel (patch OVMF, masquage de l'hyperviseur, mappage IOMMU particulier…) n'est affiché tant qu'une preuve publique exacte n'est pas disponible. La validation de VFIO, du pilote invité et de CUDA ne permet pas de les déduire.
🔄 Exclusivité GPU — état et ordre de démarrage des VM

Exécutée sur l'hôte Proxmox, cette commande détecte la RTX 5090 (sans afficher son adresse), repère les VM configurées pour l'utiliser et publie un libellé assaini — en distinguant l'état courant de la VM de sa politique d'autodémarrage, et en vérifiant qu'une seule VM de passthrough est active à la fois.

bash — contrôle d'exclusivité 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
extrait assaini — exclusivité vérifiée
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
Lecture : une seule VM de passthrough (IA-Core / VM210) utilise la RTX 5090 ; les environnements GPU alternatifs restent hors autodémarrage. À la reprise de l'hôte, VM215 (PostgreSQL/pgvector) démarre d'abord, puis VM210 (charge GPU + Ollama / OpenWebUI / RAG) — sans concurrence pour le GPU.
🔧 Relevé BIOS & prudence firmware

Un relevé BIOS de référence sépare les valeurs réellement observées des améliorations seulement envisagées. Avant toute mise à jour du firmware, les paramètres nécessaires à IOMMU et VFIO sont sauvegardés et un retour arrière est préparé ; après modification, les groupes IOMMU, la réservation du GPU et le démarrage des VM sont revalidés. Les essais restent unitaires, afin d'attribuer clairement chaque effet au paramètre modifié.

Contrainte structurante : la RTX 5090 est une ressource physique exclusive — une seule VM de passthrough peut l'utiliser à la fois. L'architecture documente donc explicitement les incompatibilités de démarrage simultané, et une console virtuelle distincte est conservée pour la récupération.

Validation : le pilote NVIDIA et CUDA ont été validés dans une VM Ubuntu, puis l'accès GPU a été vérifié jusque dans des conteneurs Docker (via le NVIDIA Container Toolkit).

Pages liées

Références & Sources

CatégorieRessourceURL
Documentation officielleProxmox VE — PCI(e) Passthroughpve.proxmox.com/wiki/PCI_Passthrough
Documentation officielleLinux Kernel — VFIOdocs.kernel.org/driver-api/vfio
MatérielNVIDIA GeForce RTX 5090 · plateforme AMD (IOMMU / AMD-Vi)—
LicenceVFIO (noyau Linux) — GPL · pilotes NVIDIA — propriétaires—
Contenu de cette pagePartagé sous CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0