GPU passthrough lets a virtual machine control a real GPU directly, almost like bare metal. This guide covers Proxmox 9.2 NVIDIA GPU passthrough on Proxmox VE 9.2 with kernel 7.0 and checks the setup with a real CUDA test.
If you need a general libvirt/KVM walkthrough instead, check the GPU Passthrough KVM Setup guide.
What You Need Before You Start
Setting up Proxmox 9.2 NVIDIA GPU passthrough correctly depends on a short list of hardware and software checks. Confirm these first:
- A CPU and motherboard that support IOMMU, such as Intel VT-d or AMD-Vi.
- A dedicated NVIDIA GPU. If it's your only GPU, plan to manage the host over SSH instead of a monitor.
- Full root access to a Proxmox VE 9.2 host with kernel 7.0 installed.
- BIOS/UEFI options enabled: VT-d or AMD-Vi, and above 4G Decoding.
- A Linux guest ISO, such as Ubuntu 24.04 LTS or 26.04 LTS, for testing CUDA.
Check your current kernel and Proxmox version with:
If you are still on an older 6.x kernel, install kernel 7.0 with:
apt updateapt install proxmox-kernel-7.0reboot
If you want to skip all this setup, PerLod's high-performance GPU hosting comes with GPU passthrough already done for you.
Step 1: Confirm the GPU and IOMMU Support
Before touching any configuration file, confirm the host actually sees the GPU and that IOMMU can be enabled. List your GPU and its audio function with:
lspci -nn | grep -i nvidia
You should see the VGA controller and its HDMI audio device, each with a vendor:device ID pair like 10de:2684. Write both down; you will need them later.
Step 2: Enable IOMMU for Kernel 7.0
From kernel 6.8, Intel IOMMU turns on by default, and AMD-Vi has always been on by default too. Kernel 7.0 also keeps this. So you don't need to add intel_iommu=on manually anymore, but it's good to set it along with iommu=pt for better performance.
Open the GRUB configuration file with your desired text editor:
Find the line starting with GRUB_CMDLINE_LINUX_DEFAULT and edit it:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt" GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
Note: If your Proxmox host boots with UEFI and systemd-boot instead of GRUB, edit this file instead:
Add the same parameters on one line, then apply them:
proxmox-boot-tool refresh
Save the file, then update GRUB and reboot:
After the reboot, confirm IOMMU is active:
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
You should see lines confirming IOMMU or Directed I/O is enabled. If nothing appears, double-check the BIOS setting and the kernel command-line file you edited.
Step 3: Load the VFIO Kernel Modules
VFIO safely gives a PCI device to a VM. You must add the required modules so they load at every boot. Edit the file and add:
vfiovfio_iommu_type1vfio_pcivfio_virqfd
Save the file, then rebuild the initramfs and reboot:
update-initramfs -u -k allreboot
Confirm the modules loaded with the command below:
Step 4: Check IOMMU Groups
Every PCI device belongs to an IOMMU group, and the whole group passes through together. For a clean Proxmox 9.2 NVIDIA GPU passthrough setup, your GPU and its audio should ideally be in their own group, or share it only via a PCIe bridge. Check with:
pvesh get /nodes/$(hostname)/hardware/pci --pci-class-blacklist ""
Or use the manual loop with:
for g in /sys/kernel/iommu_groups/*; do echo "Group ${g##*/}:" for d in $g/devices/*; do echo -n " "; lspci -nns "${d##*/}" donedone
If the GPU shares a group with unrelated devices, like a USB controller or a NIC, try a different PCIe slot first. Use the ACS override patch only as a last resort; it weakens device isolation.
Step 5: Free the GPU From the Host
The Proxmox host must not load its own NVIDIA driver on the card you want to pass through, or VFIO will not be able to claim it. Find the current driver with:
lspci -nnk | grep -A 3 -i nvidia
Blacklist the host GPU drivers by creating a new file:
nano /etc/modprobe.d/blacklist-nvidia.conf
blacklist nouveaublacklist nvidiablacklist nvidiafbblacklist nvidia_drmoptions nouveau modeset=0
Next, you must bind the card to vfio-pci using the vendor:device IDs from Step 1. Create another file:
nano /etc/modprobe.d/vfio.conf
Add and replace the IDs with your own:
options vfio-pci ids=10de:2684,10de:22ba disable_vga=1
Apply the changes and verify the GPU is owned by vfio-pci:
update-initramfs -u -k allrebootlspci -nnk -s 01:00.0
The line should read Kernel driver in use: vfio-pci. If it still shows nvidia or nouveau, recheck the blacklist file and rebuild the initramfs again.
Step 6: Create the VM with the Right Machine and CPU Type
This is where a correct Proxmox 9.2 NVIDIA GPU passthrough VM is built. In the Proxmox web UI, create a new VM with these settings:
- System: Machine type
q35, required for PCIe passthrough, BIOS OVMF (UEFI), and add an EFI disk.
- CPU: Type
host so the guest sees the real CPU features.
- Memory: Enough for your workload; AI or CUDA testing usually needs at least 8 GB.
- Disk and network: VirtIO SCSI and VirtIO NIC for best performance.
Also, you can create the VM from the command line and adjust it later by editing its config file directly:
nano /etc/pve/qemu-server/<VMID>.conf
Make sure these lines are present:
machine: q35bios: ovmfcpu: host
Step 7: Attach the GPU as a PCI Device
In the VM's Hardware tab, click Add > PCI Device, then select your GPU from the dropdown. Enable:
- All Functions: on
- PCI-Express: on
- ROM-Bar: on
- Primary GPU: only if this VM has no other display device
Alternatively, you can do it from the shell:
qm set <VMID> -hostpci0 01:00,pcie=1,x-vga=1,rombar=1
Step 8: Install NVIDIA Drivers Inside the Linux Guest
At this point, you can boot the VM, install your Linux guest OS, then update it and install the driver:
apt update && apt upgrade -yapt install build-essential dkms -yubuntu-drivers devices
Install the driver Ubuntu recommends for your card, or a specific branch:
apt install nvidia-driver-580 -yreboot
After reboot, confirm the driver loaded inside the guest:
If this command prints your GPU name, driver version, and a temperature/utilization table, the core of your Proxmox 9.2 NVIDIA GPU passthrough setup is working.
Step 9: Install CUDA and Verify GPU Compute Access
The nvidia-smi working only proves the driver loaded, not that CUDA works. Install the CUDA toolkit inside the guest:
apt install nvidia-cuda-toolkit -ynvcc --version
Then run a real compute check instead of just a driver check. The simplest reliable test uses Python and PyTorch:
apt install python3-pip -ypip install torch --index-url https://download.pytorch.org/whl/cu121python3 - << 'PY'import torchprint("Torch version:", torch.__version__)print("CUDA available:", torch.cuda.is_available())if torch.cuda.is_available(): print("Device:", torch.cuda.get_device_name(0)) x = torch.rand(4096, 4096, device="cuda") y = torch.matmul(x, x) torch.cuda.synchronize() print("Matrix multiply on GPU succeeded:", y.shape)PY
If it prints your GPU's name and finishes the matrix multiply with no errors, your Proxmox 9.2 NVIDIA GPU passthrough VM has full CUDA access, not just PCI visibility. This matters for AI training, rendering, and other real compute workloads.
For ongoing AI training or inference, PerLod's AI hosting plans are built for that kind of workload.
Common Proxmox VE 9.2 and Kernel 7.0 Passthrough Failures
These are the common failures seen on current Proxmox VE 9.2 hosts running kernel 7.0:
1. VM will not start; error mentions IOMMU or vfio: IOMMU is not active. Recheck the BIOS setting and the /etc/default/grub or /etc/kernel/cmdline entry, then re-run update-grub or proxmox-boot-tool refresh.
2. GPU still shows the nvidia or nouveau driver on the host: The blacklist file was not picked up. Confirm the file is under /etc/modprobe.d/, then rerun update-initramfs -u -k all and reboot; a small initramfs rebuild is the most common cause.
3. Second VM start after a stop hangs or shows a black screen: This is the NVIDIA consumer-GPU reset problem, not a config error. Reboot the host between tests, or use the vendor-reset module for supported cards.
4.nvidia-smi works, but CUDA programs fail or crash: The CUDA toolkit version inside the guest is newer than what the installed driver supports. Run nvidia-smi to see the driver's maximum supported CUDA runtime, then match or downgrade the toolkit.
5. IOMMU group includes unrelated devices: Move the GPU to a different physical PCIe slot on the host, since slot wiring, not the OS, decides IOMMU grouping on most consumer boards.
6. Kernel 7.0 upgrade broke a previously working passthrough VM: Rebuild the initramfs after any kernel change (update-initramfs -u -k all) and confirm the vfio modules and blacklist files still load with lsmod | grep vfio.
Conclusion
Setting up Proxmox 9.2 NVIDIA GPU passthrough is a series of simple steps. You must enable IOMMU, load VFIO, free the GPU from the host, attach it to a q35/OVMF VM with CPU type host, then install the driver and CUDA toolkit in the guest.
We hope you enjoy this guide. For the official passthrough options and syntax, check the Proxmox VE PCI(e) Passthrough wiki.