Как пробросить видеокарту в ВМ
Проброс (passthrough) отдаёт машине настоящее устройство сервера: видеокарту, сетевую карту, контроллер дисков. Машина работает с ним напрямую, как с собственным. Пока устройство проброшено, сам сервер и другие машины им пользоваться не могут.
Общий порядок: включить IOMMU в BIOS, загрузить модули vfio, проверить группы IOMMU, добавить устройство в машину. Работает не на любом оборудовании — многое зависит от материнской платы. IOMMU — механизм процессора и платы, который даёт машине прямой доступ к устройству и при этом защищает от него остальную память сервера.
Неудачная настройка проброса может оставить сервер без изображения или сети, если отдать машине его единственную видеокарту или сетевую карту. Перед опытами убедитесь, что есть другой доступ к серверу, и не пробрасывайте контроллер, к которому подключён системный диск.
Шаг 1. IOMMU в BIOS
Включите в BIOS/UEFI пункт VT-d (Intel) или IOMMU / AMD-Vi (AMD). Название зависит от платы — ищите в инструкции к ней.
В ядре Linux IOMMU для процессоров AMD включён по умолчанию, а для Intel — начиная с ядра 6.8. В Proxmox VE 9 ядра новее, поэтому параметр intel_iommu=on, который встречается в старых инструкциях, не нужен.
Шаг 2. Модули vfio
Создайте файл со списком модулей:
nano /etc/modules-load.d/vfio.confС тремя строками:
vfio
vfio_iommu_type1
vfio_pciОбновите initramfs (начальный образ, из которого ядро при загрузке берёт модули) и перезагрузите сервер:
update-initramfs -u -k all
rebootШаг 3. Проверка
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
lsmod | grep vfioВ выводе первой команды должны быть строки о включённом IOMMU (у Intel — DMAR, у AMD — AMD-Vi; текст зависит от оборудования), вторая должна показать три модуля vfio.
Устройство должно быть в своей группе IOMMU — вместе с ним можно передать только его же функции (например, видеокарта и её звук HDMI). Группы видны в окне добавления устройства в машину, а в терминале — так:
pvesh get /nodes/pve/hardware/pci --pci-class-blacklist ""Вместо pve — имя вашего узла. Если видеокарта в одной группе с другими устройствами, иногда помогает перестановка её в другой слот PCIe.
Шаг 4. Машина
Для видеокарты лучше всего работают машины с типом q35 и прошивкой OVMF (UEFI) — это выбирается на вкладке System при создании (менять у установленной системы рискованно). Добавьте устройство: машина → Hardware → Add → PCI Device → Raw Device, выберите видеокарту, отметьте All Functions (видеокарта вместе со звуком) и PCI-Express. То же в терминале, где 01:00 — адрес из lspci:
qm set 100 -hostpci0 01:00,pcie=onЗапустите машину и поставьте внутри драйвер видеокарты, как на обычном компьютере.
Если хост не отдаёт видеокарту
Proxmox сам пытается отцепить устройство от драйвера сервера. Если не выходит, привяжите его к vfio-pci по номерам производителя и модели. Узнайте их:
lspci -nnНомера — в квадратных скобках в конце строки, вида [10de:1d01]. Запишите их в файл /etc/modprobe.d/vfio.conf строкой (номера — свои, через запятую для видео и звука):
options vfio-pci ids=10de:1d01,10de:0fb8Снова update-initramfs -u -k all и перезагрузка. Проверка: lspci -nnk у устройства показывает Kernel driver in use: vfio-pci.
Подводные камни
- Экран машины в веб-консоли пустой. Изображение проброшенной видеокарты в noVNC не показывается: подключите к ней монитор или настройте удалённый рабочий стол внутри машины. Для вычислений (CUDA, OpenCL) монитор не нужен.
- Единственная видеокарта сервера. После проброса у самого сервера не будет изображения на мониторе — управляйте им через веб-интерфейс и SSH.
- Живая миграция недоступна. Машину с проброшенным устройством переносят только выключенной, а на другом узле устройство настраивают заново.
Подробности и примеры для разных видеокарт — в разделе PCI(e) Passthrough руководства администратора и на вики PCI Passthrough.