До основного вмісту

GPU Passthrough у Proxmox VE: налаштування NVIDIA і AMD

Proxmox VE · 19.04.2026 · 6 хв читання
Ілюстрація до статті «GPU Passthrough у Proxmox VE: налаштування NVIDIA і AMD»

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"

Розбір типових помилок

  • vfio-pci: probe of 0000:01:00.0 failed with error -16 — пристрій уже захоплений іншим драйвером (зазвичай nvidia чи nouveau); чорний список з кроку 4 не спрацював до перезавантаження — перевірте порядок завантаження initramfs.
  • IOMMU-група відеокарти містить інші пристрої хоста (наприклад, USB-контролер материнської плати) — passthrough усієї групи цілком забере з хоста і ці пристрої; частково вирішується патчем ACS override, але це знижує ізоляцію.
  • Code 43 у Windows Device Manager після передачі NVIDIA GeForce у VM — драйвер NVIDIA навмисно блокує роботу всередині віртуальної машини без потрібних патчів CPU-прапорів; потрібен kvm=off,hv_vendor_id=proxmox.
  • VM не запускається: kvm: -device vfio-pci,host=01:00.0: vfio: error opening /dev/vfio/16: Device or resource busy — пристрій ще зайнятий хостом чи іншою VM; переконайтеся, що nouveau/nvidia вивантажені і жодна інша VM не використовує той самий пристрій.

Крок 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.

Порівняння варіантів розділення GPU

ВаріантКількість VM на одну картуВимагає підтримки від GPUПродуктивність
Повний passthrough1НіНативна
vGPU (NVIDIA)ДекількаТак, ліцензія vGPUЧастка від нативної
SR-IOVДекількаТак, підтримка картиБлизька до нативної

Налаштування у /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

Коли GPU Passthrough не підходить

  • На хості лише одна відеокарта — без вбудованої графіки CPU для консолі хоста Proxmox ризикує лишитися без відеовиводу після передачі єдиного GPU у VM; спершу забезпечте хосту альтернативний вивід (IPMI, iGPU).
  • Потрібно розділити одну карту між кількома VM без ліцензії vGPU — повний passthrough віддає GPU лише одній VM одночасно, для кількох споживачів потрібні SR-IOV або платний vGPU.
  • Відеокарта споживчого сегмента NVIDIA використовується для обчислень у дата-центрі під комерційним навантаженням — ліцензійна угода NVIDIA обмежує таке використання карт GeForce, формально потрібна лінійка для дата-центрів.

Обмеження passthrough: VM з GPU passthrough не підтримує живу міграцію; один GPU не можна передати кільком VM одночасно без vGPU/SR-IOV для розділення; серія NVIDIA GeForce блокує passthrough у VM без патчу kvm=off,hv_vendor_id=proxmox.

Як перевірити, що passthrough працює

# Всередині VM: відеокарта визначається системою
lspci -nnk | grep -A3 VGA

# Всередині VM (Linux): драйвер NVIDIA/AMD завантажений, а не заглушка
nvidia-smi
# або для AMD:
rocm-smi

# На хості: пристрій більше не належить хосту
lspci -nnk -s 01:00.0 | grep "Kernel driver in use"
# Очікуємо: vfio-pci, а не nvidia/amdgpu

Якщо nvidia-smi (або rocm-smi) всередині VM показує модель карти і її завантаження, а на хості пристрій рахується за vfio-pci — GPU передано у віртуальну машину коректно і він працює з нативною продуктивністю.

Часті питання

Чи підходить GPU Passthrough для LXC-контейнерів, чи описаний спосіб працює лише для повноцінних віртуальних машин?

Описаний у статті спосіб через vfio-pci розрахований саме на повноцінні віртуальні машини з окремим ядром і драйверами всередині гостя. Для LXC-контейнерів, які діляться ядром із хостом, відеокарта передається інакше — через прокидання файлів пристроїв усередину контейнера, а не через захоплення vfio-pci, і налаштування в цьому випадку помітно відрізняється від кроків для VM.

Чи можна віддати одну відеокарту одразу кільком віртуальним машинам без ліцензії vGPU?

Ні, повний passthrough закріплює пристрій рівно за однією віртуальною машиною в кожен момент часу — поки карта зайнята однією VM, жодна інша звернутися до неї не може. Щоб розділити одну фізичну карту між кількома споживачами одночасно, потрібна або платна ліцензія vGPU від виробника, або апаратна підтримка SR-IOV на самій карті.

Чому відеокарта споживчого сегмента NVIDIA GeForce відмовляється нормально працювати всередині віртуальної машини?

Драйвер GeForce навмисно визначає, що система запущена всередині віртуальної машини, і блокує повноцінну роботу — у диспетчері пристроїв Windows це виглядає як помилка карти. Обходиться це додаванням до конфігурації віртуальної машини спеціального патча, який приховує сам факт віртуалізації від гостьової системи, після чого драйвер запускається так само, як на фізичному комп'ютері.

Що робити, якщо на сервері лише одна відеокарта і немає окремого відеовиходу для консолі хоста?

Передавати у віртуальну машину єдину відеокарту сервера ризиковано: після запуску VM хост Proxmox може лишитися без власного відеовиводу, і керувати ним доведеться лише мережею. Перед налаштуванням passthrough варто заздалегідь забезпечити альтернативний вивід для хоста — вбудовану графіку процесора або віддалений доступ через IPMI, щоб не втратити консоль.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці