GPU Passthrough (PCI Passthrough) позволяет передать физическую видеокарту напрямую в виртуальную машину с нативной производительностью. Это необходимо для игровых VM, AI/ML рабочих нагрузок, рендеринга и работы с CUDA/ROCm.
Требования для GPU Passthrough
- CPU с поддержкой IOMMU: Intel VT-d или AMD-Vi
- Включить IOMMU в BIOS/UEFI (VT-d / AMD IOMMU)
- Отдельная видеокарта для passthrough (не та, что используется хостом)
- Процессор и материнская плата с изолированными IOMMU-группами
Шаг 1: Включение IOMMU в загрузчике
# Для Intel CPU — /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# Для AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
# Применить изменения
update-grub
reboot
# Проверить что IOMMU включён
dmesg | grep -i iommu | head -5
Шаг 2: Загрузка vfio-модулей
# Добавить в /etc/modules
echo -e "vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd" >> /etc/modules
# Обновить initramfs
update-initramfs -u -k all
Шаг 3: Найти PCI ID видеокарты
# Список всех GPU
lspci -nn | grep -E "VGA|3D|Display"
# Пример вывода:
# 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation RTX 4070 [10de:2786]
# 01:00.1 Audio device [0403]: NVIDIA Corporation [10de:22bc]
# Проверить IOMMU-группу (важно!)
for d in /sys/kernel/iommu_groups/*/devices/*; do
n=${d#*/iommu_groups/*}; n=${n%%/*}
printf 'IOMMU Group %s ' "$n"
lspci -nns "${d##*/}"
done | sort -V | grep "01:00"
Шаг 4: Привязка GPU к vfio-pci
# Добавить в /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:2786,10de:22bc
# (используйте PCI ID вашего GPU и аудио-чипа)
# Запретить загрузку nvidia/nouveau драйвера на хосте
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u -k all
reboot
# Проверить, что GPU захвачен vfio
lspci -nnk | grep -A3 "01:00"
# Должно показать: Kernel driver in use: vfio-pci
Шаг 5: Добавление GPU в VM
# Добавить PCI-устройство к VM через CLI
qm set 100 --machine q35 --bios ovmf --hostpci0 01:00,pcie=1,x-vga=1
# Для NVIDIA — добавить патч (скрыть VM от драйвера)
qm set 100 --args "-cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=proxmox,kvm=off'"
ROM-файл для NVIDIA: Некоторые NVIDIA-карты требуют явного указания VBIOS ROM-файла для корректной работы в VM. Дамп VBIOS можно получить с techpowerup.com или сделать самостоятельно до передачи карты в passthrough.
Настройка в /etc/pve/qemu-server/100.conf
bios: ovmf
machine: q35
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,size=4M
hostpci0: 0000:01:00.0,pcie=1,x-vga=1
hostpci1: 0000:01:00.1 # GPU Audio
vga: none # Отключить виртуальный GPU
Ограничения passthrough:
- VM с GPU passthrough не поддерживает живую миграцию
- Один GPU нельзя передать нескольким VM одновременно (используйте vGPU/SRIOV для разделения)
- NVIDIA GeForce-серия блокирует passthrough в VM — применяйте патч
kvm=off,hv_vendor_id=proxmox