Implémentation de NVIDIA vGPU sur Proxmox VE avec des GPUs grand public

Testé sur : Proxmox VE 8.4.19 – 2× GTX 1650 (Turing)
Cas d’usage : Workspace virtualisé et gaming léger


Pourquoi faire ça ?

Par défaut, une carte graphique sous Proxmox ne peut être assignée qu’à une seule VM à la fois via le passthrough PCIe classique. La technologie vGPU (Virtual GPU) de NVIDIA permet de découper un GPU physique en plusieurs GPU virtuels, chacun assignable à une VM distincte.

C’est idéal pour du workspace (bureaux virtuels sous Windows) ou du gaming léger où une VM entière par GPU serait du gaspillage.

⚠️ Note légale : Le vGPU unlock sur GPU grand public (GTX/RTX) repose sur un contournement de la licence NVIDIA GRID, initialement réservée aux GPUs professionnels (Quadro/A-series). À utiliser dans un contexte personnel/lab uniquement.


Compatibilité

Série GPUArchitectureVersion driver max
GTX 9xxMaxwell16.9 (535.230.02)
GTX 10xxPascal16.9 (535.230.02)
GTX 16xx / RTX 20xxTuring17.5 (550.144.02)

Les GTX 1650 utilisées dans ce guide sont de l’architecture Turing → driver 17.5.


Prérequis

  • Proxmox VE avec un processeur compatible IOMMU (Intel VT-d ou AMD-Vi activé dans le BIOS) [Ne fonctionne pas sur Core i3]
  • Un ou plusieurs GPUs NVIDIA compatibles (voir tableau ci-dessus)
  • Accès root à l’hôte

1. Configuration de l’hôte

1.1 Activer l’IOMMU dans GRUB

Éditez /etc/default/grub et modifiez la ligne GRUB_CMDLINE_LINUX_DEFAULT :

Intel (Core iX / Xeon) :

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

AMD (Ryzen / Threadripper / EPYC) :

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

iommu=pt (pass-through mode) améliore les performances en évitant la translation IOMMU pour les devices qui n’en ont pas besoin.

Régénérez la configuration GRUB :

update-grub

1.2 Blacklister les pilotes NVIDIA et activer VFIO

Ces étapes sont nécessaires pour que le GPU soit disponible pour le découpage vGPU NVIDIA au lieu d’être chargé par le driver standard.

# Activer les modules VFIO au démarrage
echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules

# Blacklister le driver open-source nouveau
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf

# Régénérer l'initramfs
update-initramfs -u -k all

1.3 Redémarrer et vérifier

reboot

Après redémarrage, vérifiez que l’IOMMU est bien actif :

dmesg | grep -e DMAR -e IOMMU

Sur un système AMD, vous devriez voir quelque chose comme :

[ 0.892898] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported
[ 0.895039] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40

Si cette commande ne retourne rien, vérifiez que l’IOMMU / VT-d est bien activé dans le BIOS avant de continuer.


2. Installation des dépendances

2.1 Mettre à jour Proxmox et installer les paquets nécessaires

apt update && apt dist-upgrade -y
apt install -y git build-essential dkms pve-headers mdevctl

⚠️ Après l’installation du driver vGPU, évitez de relancer apt dist-upgrade sans vérifier la compatibilité du nouveau kernel avec le module DKMS, ça peut casser le driver.

2.2 Cloner le dépôt de patch vGPU

cd /root
git clone https://gitlab.com/polloloco/vgpu-proxmox.git

2.3 Compiler vgpu_unlock-rs

La librairie vgpu_unlock-rs est le cœur du patch, elle intercepte les appels du service NVIDIA pour débloquer les fonctionnalités vGPU sur les GPUs grand public.

cd /opt
git clone https://github.com/mbilker/vgpu_unlock-rs.git

# Installer Rust
curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal
source $HOME/.cargo/env

# Compiler
cd /opt/vgpu_unlock-rs
cargo build --release

3. Configuration de vGPU Unlock

3.1 Créer les fichiers de configuration

mkdir /etc/vgpu_unlock
touch /etc/vgpu_unlock/profile_override.toml

3.2 Injecter la librairie dans les services NVIDIA

Créez les overrides systemd pour que libvgpu_unlock_rs.so soit chargée au démarrage des services NVIDIA :

mkdir /etc/systemd/system/nvidia-vgpud.service.d
mkdir /etc/systemd/system/nvidia-vgpu-mgr.service.d

cat > /etc/systemd/system/nvidia-vgpud.service.d/vgpu_unlock.conf << 'EOF'
[Service]
Environment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so
EOF

cat > /etc/systemd/system/nvidia-vgpu-mgr.service.d/vgpu_unlock.conf << 'EOF'
[Service]
Environment=LD_PRELOAD=/opt/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so
EOF

4. Installation du driver NVIDIA GRID

4.1 Télécharger le bon driver

Les drivers GRID patchés sont disponibles ici : https://alist.homelabproject.cc/foxipan/vGPU/

⚠️ Ce lien externe peut mourir. Si c’est le cas, cherchez « vgpu-proxmox driver mirror » sur Internet.

Pour les GTX 1650 (Turing), on utilise la version 17.5 :

NVIDIA-Linux-x86_64-550.144.02-vgpu-kvm.run

4.2 Patcher le driver

chmod +x NVIDIA-Linux-x86_64-550.144.02-vgpu-kvm.run
cd /root
./NVIDIA-Linux-x86_64-550.144.02-vgpu-kvm.run --apply-patch ~/vgpu-proxmox/550.144.02.patch

Cette commande génère un fichier NVIDIA-Linux-x86_64-550.144.02-vgpu-kvm-custom.run.

4.3 Installer le driver patché

./NVIDIA-Linux-x86_64-550.144.02-vgpu-kvm-custom.run --dkms -m=kernel

L’option --dkms permet au module kernel d’être recompilé automatiquement lors des mises à jour du kernel (avec les réserves mentionnées plus haut).

4.4 Redémarrer

reboot

5. Vérification

Le driver est chargé ?

nvidia-smi

Cette commande doit lister vos GPUs NVIDIA. Si elle retourne une erreur, le driver n’est pas chargé correctement.

Le patch vGPU fonctionne ?

mdevctl types

Si le patch a fonctionné, cette commande retourne la liste des types de vGPU disponibles pour chaque GPU physique, par exemple :

0000:05:00.0
  nvidia-256
    Available instances: 24
    Device API: vfio-pci
    ...

Si mdevctl types ne retourne rien, le patch n’a pas fonctionné. Vérifiez les logs systemd des services NVIDIA :

systemctl status nvidia-vgpud
systemctl status nvidia-vgpu-mgr

En collaboration avec HulkHogan6262

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *