Projet PAINS : mettre un GPU en passtrough sur une VM | partie 12

Projet PAINS : mettre un GPU en passtrough sur une VM | partie 12

Comme indiqué dans le titre, j'ai une carte graphique pour le serveur.
On est sur une RTX 2060 super dual fan 8go. L'objectif avec elle est de faire un serveur IA pour la génération d'images, d'agent conversationnel et une API ( pour utiliser l'IA sur d'autres logiciels )

Mais pour l'instant on va mettre la carte graphique sur une VM, et oui, il en faut un article complet juste pour ça. Tout simplement car ce n'est pas comme les disques durs qu'on a fait pour Nextcloud, avec deux lignes de commandes et c'est bon. Là on peut même aller dans le bios. 

Donc on est parti dans cette aventure....

Premièrement laisser tomber chatGPT, les documentations vont être beaucoup plus utiles et précises. Donc on va s'appuyer sur celle ci, celle là et un peu là ( oui j'ai mis le texte en lien cliquable )

 

Déja on commence par créer une VM. La mienne sera sous debian 13, version DVD pour ceux qui veulent du détail. Mais il faut faire déjà quelques choses : 

on change :
- Machine par q35
- SCSI controller par VirtIO SCSI ( il y a le single en plus par défaut )
- BIOS par OVMF (UEFI ) et avec un EFI storage ( proxmox vous oblige à en mettre un )

et ensuite dans CPU : 

Changer le type par host ( tout en bas dans la liste )

Et ensuite c'est comme vous voulez. Par contre ne la démarrez pas, on a des trucs à faire sur le shell proxmox qui vont demander un redémarrage.
Si, vous pouvez l'allumer si vous voulez, et faire ce que vous voulez dessus, ce n'est pas problématique.

On part dans le fichier /etc/default/grub de notre proxmox pour modifier une ligne : 

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

ça va permettre de faire du passtrought du port PCI-E ( donc de la carte graphique )

On va ensuite dans /etc/modprobe.d/blacklist.conf pour bloquer le démarrage des drivers Nvidia sur Proxmox ( mais pas dans les VM ). C'est pour s'assurer que Proxmox ne prenne pas la main dessus et donc empêche le passthrough de la carte graphique. On rajoute ceci : 

blacklist nouveau
blacklist nvidia

Puis dans /etc/modules on rajoute : 

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

C'est pour que la communication passe correctement entre la VM et le port PCIE.

Et on peut redémarrer notre serveur Proxmox, et on rentre ( toujours sur notre shell proxmox ) la commande : 

update-initramfs -u

Maintenant, il faut trouver l'identifiant du PCI-E de notre GPU.
Pour cela, on rentre la commande :

lspci

Dans mon cas, j'ai ce résultat : 

Donc pour moi, c'est 01:00 . Souvent c'est cette valeur qui revient, mais pour les utilisateurs avec plusieurs PCI-E ça peut ne pas être cette valeur

Maintenant qu'on a l'ID PCIE, il nous faut l'ID des modules de la CG. 
Avec un :

lspci -n -s 01:00

01:00 étant le résultat trouvé au-dessus

on récupère les ID. Oui cette fois ci on les prend tous, car chaque ID est une fonctionnalité de la CG, et donc autant que la VM qui héritera de la CG est toutes les fonctionnalités pour ne pas avoir de soucis.

Ensuite on vient créer le fichier /etc/modprobe.d/vfio.conf pour rajouter nos ID de la Carte graphique, en ajoutant cette ligne : 

options vfio-pci ids=10de:1f06,10de:10f9,10de:1ada,10de:1adb disable_vga=1

chaque id étant espacé par une virgule.

Et on peut redémarrer. 

--------------

Je préviens juste que si votre Ethernet ou wifi est dans le même groupe iommu que le PCIE de la carte graphique, vous n'allez plus avoir d'internet dans certains cas. 
Pour savoir ça, rentrez la commande : 

for d in /sys/kernel/iommu_groups/*/devices/*; do echo "$d"; done

dans mon cas ça donne : 

On voit que ma carte graphique est dans le groupe 1 avec son ID 01:00, et que ma carte wifi, qui est 03:00 est dans le groupe 11. Donc je n'aurai pas de soucis au redémarrage.
Si ils sont dans le même groupe, j'ai aucune idée de comment les séparer de groupe, mais la solution est de rentrer cette commande : 

systemctl mask ifupdown2-pre.service

-------------

 

ensuite on peut vérifier que tout à fonctionné en faisant :

lspci -v

Cette ligne veut dire qu'on a réussi.


On peut maintenant aller dans le fichier de configuration de la VM pour rajouter une ligne et donc la carte graphique.

Dans /etc/pve/qemu-server/XXX.conf (XXX étant l'ID de la VM) on rajoute la ligne : 

hostpci0: 01:00,x-vga=on,pcie=1

Et on peut démarrer notre VM.

Il ne faut pas oublier d'installer les drivers Nvidia, et ensuite c'est parti !

 

Petit info tout de même. Si vous n'avez pas configuré votre VM avant d'insérer la CG sur la VM, vous aller avoir une erreur de noVNC. 
Le souci vient que le driver virtuel de la VM à été désactivé, et donc noVNC ne peut faire apparaître de l'image
La solution :

Changer le display "defaut" par Standard VGA. De préférence rajouter un peu de Vram pour pas que ça s'accade trop.

Et c'est bon !

 

 


Posté le 2 mars 2026 par _Antonin_