Proxmox VE: GPU passthrough & VM layout
Proxmox VE is used as the hypervisor to isolate workloads and allow clean GPU passthrough.
Host overview
Proxmox VE host reserves 4–6 GB RAM for itself. Guest layout:
flowchart TB
Host[Proxmox VE Host]
Host --> VM1[VM: ai-training]
Host --> VM2[VM: ocr-processing]
Host --> CT[CT: file-server]
VM1 --> |Ubuntu Server 24.04| Spec1[vCPUs: 24, RAM: 96 GB, GPU passthrough, 500 GB NVMe]
VM2 --> |Ubuntu Server 24.04| Spec2[vCPUs: 32, RAM: 24 GB, CPU-only]
CT --> |Alpine Linux| Spec3[RAM: 2 GB, NFS dataset share]
ASCII summary
Proxmox VE Host (4–6 GB RAM reserved)
├── VM: ai-training (Ubuntu Server 24.04)
│ ├── vCPUs: 24 (leave 8 for host/OCR)
│ ├── RAM: 96 GB (ballooning enabled)
│ ├── GPU: RTX 3070 (PCI passthrough)
│ └── Storage: 500 GB NVMe (datasets + checkpoints)
│
├── VM: ocr-processing (Ubuntu Server 24.04)
│ ├── vCPUs: 32 (CPU-only)
│ ├── RAM: 24 GB
│ └── Purpose: Parallel OCR and text ingestion
│
└── CT: file-server (Alpine Linux)
├── RAM: 2 GB
└── Purpose: NFS dataset share between VMs
BIOS configuration
- Enable SVM / AMD-V
- Enable IOMMU
- Disable CSM
- Set PCIe devices to UEFI mode
Enable IOMMU on Proxmox host
-
Edit GRUB:
nano /etc/default/grub -
Set kernel command line:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt" -
Apply and reboot:
update-grub reboot -
Verify:
dmesg | grep -e IOMMU -e AMD-Vi
GPU passthrough (VFIO)
1. Identify GPU PCI IDs
lspci -nn | grep -i nvidia
Example output:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [RTX 3070] [10de:2484]
01:00.1 Audio device [0403]: NVIDIA Corporation GA104 HDMI Audio [10de:228b]
2. Bind GPU to VFIO
echo "options vfio-pci ids=10de:2484,10de:228b disable_vga=1" > /etc/modprobe.d/vfio.conf
3. Blacklist NVIDIA drivers on host
echo -e "blacklist nouveau\nblacklist nvidia" > /etc/modprobe.d/blacklist-nvidia.conf
4. Update initramfs and reboot
update-initramfs -u
reboot
5. Confirm binding
lspci -nnk -d 10de: