IT
June 4, 2022

Proxmox 7 проброс видеокарты (GPU) внутри вм

Задача

Недавно я собрал себе очередной микро сервер для дома. И у меня была свободная видеокарта от Nvidia модель Geforce GTX 1050Ti.

Нужно было сделать так, что бы её можно было полноценно использовать внутри виртуальной машины. В моем случае, для видео энкодинга.

Я остановился на виртуализации Proxmox (qemu). Т.к. она бесплатная, постоянно развивается и простая в использовании. При этом, имеет довольно внушительный функционал.

Начало работ

Я недолго думая, собрал железо. Скачал дистрибутив, на момент написания статьи последняя версия была 7.2 И принялся её устанавливать.

Тогда я еще не подозревал какой квест ждет меня впереди.

Установка прошла быстро и с ней вряд ли у кого-то возникнут вопросы.

Я принялся создавать вмку, сразу пробросил "PCI устройство" в виде видеокарты и установил windows 10.

Важно

Тип машины: q35

Bios: OVMF (UEFI)

GPU была обнаружена системой и я скачал, установил драйвера с оф. сайта Nvidia.

Но после установки увидел сообщение:

Пример ошибки (скриншот не мой)

Естественно, я пошел "гуглить". Как правильно нужно сделать проброс видеокарты. Перепробовав много решений из статей. Но ничего не выходило.

Спустя несколько часов, я наткнулся на зарубежный сайт. Где было описано, почему такое происходит.

Дело в том, что компания производитель видеокарты (Nvidia). Таким способом борется с использованием домашней версии видеокарты в виртуализации на уровне прошивки. Что бы покупали корпоративные версии карт, такие как Quadro и Titan. И даже на некоторое время я разочаровался и думал, что уже ничего не сделаешь.

Но вдруг вспомнил, что в proxmox есть возможность указать файл с прошивкой.

Решение

Так как же можно решить эту проблему?

Для начала я решил сдампить текущую прошивку видеокарты. Для этого есть инструмент от производителя видеокарты под названием nvflash. Дистрибутив утилиты есть под разные ОС. Мне нужна была под linux. Я скачал её, зашел на хост и сделал дамп командой:

./nvflash --save название.bin

После, нам нужно внести изменения. Что бы снять ограничения с видеокарты.

Берем любой HEX-редактор и открываем этот дамп прошивки.

Далее делаем поиск по ANSI string со словом "Video":

Теперь берем все, что до символа "U" или "US" на этой же строке. Выделяем это и до самого начала файла. И просто удаляем.

Выделение

Получается так:

Результат после удаления

И сохраняем по пути /usr/share/kvm/vbios.bin

Прошивка готова! Но прошивать видеокарту сомнительное удовольствие.

По этому, мы просто укажем файл для нашего устройства самой вм.

Нужно пройти в каталог /etc/pve/qemu-server/, там хранятся все конфигурации созданных вм.

Моя имела айди 100, по этому я открываю редактором файл 100.conf

И дописываю ,romfile=vbios.bin в строку с hostpci0.

Получается так:

hostpci0: 0000:01:00,pcie=1,romfile=vbios.bin,x-vga=1

Сохраняем изменения и запускаем нашу виртуальную машину.

Но не забудьте, если вы используете в качестве гостевой ОС - Windows. То консоль proxmox не сможет зацепиться к вм. Нужно использовать RDP для подключения. Т.к. видеокарта будет "занята" вм.

Результат

После запуска, если вы сделали все правильно. То увидите следующее:

Ну и конечно в диспетчере задач

Видеокарта теперь работает так, как будто она находится подключенной к вашему ПК. А не внутри виртуализации. Т.е. вм работает с ней напрямую.

Цель достигнута, хоть и было затрачено мной много времени на её решение.

Собственно по этому я и пишу эту статью. Что бы вам сэкономить время и поделиться опытом.