Настройка подключения GPU и vGPU видеокарт Nvidia к виртуальной машине (zVirt 4.X)
Аннотация
В этом документе описывается, как использовать хост с графическим процессором (GPU) для запуска виртуальных машин в zVirt для выполнения графически требовательных задач и программного обеспечения, которое не может работать без GPU.
-
nouveau - проект по созданию свободных драйверов для видеокарт компании Nvidia с поддержкой ускорения трёхмерной графики.
-
GPU - отдельное устройство персонального компьютера или игровой приставки, выполняющее графический рендеринг.
-
vGPU - это технология ускорения графики, которая обеспечивает разделение ресурсов одного графического процессора между несколькими ВМ.
-
IOMMU - блок управления памятью для операций ввода-вывода. Так же как традиционный, процессорный блок управления памятью, который переводит виртуальные адреса, видимые процессором в физические, этот блок занимается трансляцией виртуальных адресов, видимых аппаратным устройством, в физические адреса.
1. Предисловие
zVirt поддерживает технологию PCI VFIO (виртуальная функция ввода/вывода, Virtual Function I/O), для некоторых графических процессоров NVIDIA на базе PCIe в качестве не-VGA графических устройств.
Вы можете подключить один или несколько графических процессоров хоста к одной виртуальной машине, передав виртуальной машине графический процессор хоста в дополнение к одному из стандартных эмулируемых графических интерфейсов. Виртуальная машина использует эмулируемое графическое устройство для предварительной загрузки и установки, а GPU берет управление на себя, когда загружаются его графические драйверы.
ВМ с подключенным GPU подходят для выполнения графически интенсивных задач и для запуска программного обеспечения, которое не может работать без GPU, например, CAD.
Информацию о точном количестве хостовых GPU, которые можно передавать одной виртуальной машине, смотрите на сайте NVIDIA.
Вы можете назначить GPU виртуальной машине одним из следующих способов:
-
GPU passthrough: можно назначить GPU хоста напрямую пробросив его виртуальной машине, чтобы виртуальная машина, а не хост, использовала GPU.
-
Virtual GPU (vGPU): Вы можете разделить физическое устройство GPU на одно или несколько виртуальных устройств, называемых промежуточными устройствами. Затем эти промежуточные устройства можно назначить одной или нескольким виртуальным машинам в качестве виртуальных GPU. Эти виртуальные машины совместно используют производительность одного физического GPU. Для некоторых GPU только одно промежуточное устройство может быть назначено ВМ. Поддержка vGPU доступна только для некоторых NVIDIA GPU.
Прямой проброс GPU можно использовать вместе с NVIDIA vGPU, но с некоторыми ограничениями:
-
Физический GPU может быть разделён на vGPU или напрямую пробрасываться в ВМ, но не может выполнять обе функции одновременно.
-
Одна ВМ не может быть одновременно настроена на vGPU и прямой проброс GPU.
-
Производительность физического GPU, переданного в ВМ, можно отслеживать только из самой ВМ. Такой GPU нельзя отслеживать с помощью инструментов, работающих через гипервизор, например, nvidia-smi (см. раздел Мониторинг графических процессоров NVIDIA).
Для настройки хоста с GPU с возможностью оперативного переключения между режимами прямого проброса (GPU passthrough) и vGPU необходимо выполнить следующее:
-
Включить IOMMU на хосте.
-
Заблокировать драйвер Nouveau на хосте
-
Получить и установить драйвер NVIDIA vGPU на хосте.
-
Подключить GPU или vGPU к виртуальной машине.
-
Установить драйверы GPU на виртуальной машине.
-
Настроить Xorg на виртуальной машине (только для Linux).
Здесь и далее под "хостом" понимается хост с GPU. |
Эти шаги подробно описаны ниже.
-
Ваше GPU-устройство поддерживает режим GPU passthrough.
-
Ваше GPU-устройство поддерживает функции виртуального графического процессора (vGPU)
-
Ваша система входит в список проверенных серверных аппаратных платформ.
-
Чипсет хоста с пробрасываемым GPU поддерживает Intel VT-d или AMD-Vi.
Более подробную информацию о поддерживаемом оборудовании и ПО смотрите в разделе Проверенные платформы в информации о выпуске NVIDIA GPU Software Release Notes.
2. Подготовка хоста
Подготовка хоста включает следующие операции:
-
Настройка параметров ядра:
-
Включение IOMMU.
-
Блокировка драйвера Nouveau.
-
-
Получение и установка драйвера NVIDIA vGPU на хосте.
-
Переведите хост с GPU в режим обслуживания:
-
На портале администрирования перейдите
. -
Выделите нужный хост и нажмите Управление > Обслуживание и нажмите OK.
-
-
Настройте необходимые параметры ядра:
-
Активируйте проброс устройств:
- Вариант 1
-
-
На портале администрирования перейдите
. -
Выделите нужный хост и нажмите Изменить.
-
Перейдите на вкладку Ядро.
-
Активируйте опцию Passthrough устройств хоста и SR-IOV и нажмите OK.
Убедитесь, что опция Заблокировать Nouveau неактивна и в поле Командная строка ядра отсутствует параметр rdblacklist=iommu
. -
- Вариант 2
-
-
Подключитесь к хосту по SSH и авторизуйтесь.
-
С помощью команды конфигурации загрузчика добавьте параметр активации IOMMU (зависит от процессора):
-
Для Intel:
grubby --update-kernel=ALL --args="intel_iommu=on"
-
Для AMD:
grubby --update-kernel=ALL --args="amd_iommu=on"
-
-
-
Заблокируйте драйвер Nouveau:
-
Подключитесь к хосту по SSH и авторизуйтесь.
-
С помощью команды конфигурации загрузчика добавьте параметр блокировки Nouveau:
grubby --update-kernel=ALL --args="nouveau.modeset=0"
-
-
-
Переустановите хост:
-
На портале администрирования перейдите
. -
Выделите нужный хост и нажмите Настройки > Переустановить
-
По окончании процесса хост перезагрузится и должен автоматически перейти в статус Включено.
-
-
Загрузите и установите драйвер NVIDIA-vGPU. Информацию о получении драйвера см. на странице драйверов vGPU на веб-сайте NVIDIA. Для загрузки драйверов необходима учетная запись Nvidia. Если он недоступен, обратитесь к поставщику оборудования.
В zVirt Node используется релиз ядра el8 с архитектурой x86_64, поэтому наиболее подходящим будет драйвер для RHEL 8.8, например, NVIDIA-vGPU-rhel-8.8-535.54.06.x86_64.rpm. -
Разархивируйте скачанный с сайта Nvidia архив и скопируйте rpm-пакет драйвера (как правило лежит в каталоге Host_Drivers) на хост.
-
Переведите хост с GPU в режим обслуживания:
-
На портале администрирования перейдите
. -
Выделите нужный хост и нажмите Управление > Обслуживание и нажмите OK.
-
-
Установите драйвер (например, NVIDIA-vGPU-rhel-8.8-535.54.06.x86_64.rpm)
dnf install NVIDIA-vGPU-rhel-8.8-535.54.06.x86_64.rpm
-
Перезагрузите хост:
reboot
-
Выведите хост из режима обслуживания.
-
На портале администрирования перейдите
. -
Выделите нужный хост и нажмите Управление > Включить.
-
-
Убедитесь, что IOMMU активирован:
-
На портале администрирования перейдите
. -
Нажмите на имя нужного хоста для перехода в подробное представление.
-
На вкладке Общее проверьте статус параметра Passthrough устройств. Ожидаемый статус Включено.
-
-
Проверьте, что ядро загрузило модуль nvidia_vgpu_vfio:
lsmod | grep nvidia_vgpu_vfio
Пример 1. Ожидаемый вывод lsmod# lsmod | grep nvidia_vgpu_vfio nvidia_vgpu_vfio 61440 0 mdev 24576 2 vfio_mdev,nvidia_vgpu_vfio kvm 950272 2 nvidia_vgpu_vfio,kvm_intel vfio 36864 4 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1,vfio_pci irqbypass 16384 3 nvidia_vgpu_vfio,vfio_pci,kvm
-
Убедитесь, что запущена служба nvidia-vgpu-mgr.service:
systemctl status nvidia-vgpu-mgr.service
Пример 2. Ожидаемый статус службы# systemctl status nvidia-vgpu-mgr.service ● nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2023-12-13 17:37:57 MSK; 22min ago Process: 4293 ExecStart=/usr/bin/nvidia-vgpu-mgr (code=exited, status=0/SUCCESS) Main PID: 4300 (nvidia-vgpu-mgr) [...]
-
Убедитесь что на хосте для GPU используется драйвер nvidia:
-
На портале администрирования перейдите
. -
Нажмите на имя нужного хоста для перехода в подробное представление.
-
На вкладке Устройства хоста найдите устройство видеокарты и убедитесь, что в столбце Драйвер установлено значение nvidia.
Также, при корректной настройке, в поле Типы Mdev отобразятся доступные типы промежуточных устройств.
-
3. Присоединение графического процессора к виртуальной машине
3.1. Проброс GPU в виртуальную машину
Перед включением проброса GPU убедитесь, что vGPU этого графического процессора не назначены никаким ВМ. Если такие ВМ существуют, отключите vGPU от них. |
-
Для выбранной ВМ установите параметр запуска на определённом хосте. Для этого
-
Перейдите
. -
Выделите нужную ВМ и нажмите Изменить.
-
Откройте вкладку Хост.
-
Активируйте опцию Запустить на: указанном хосте и в меню выберите хост, GPU которого необходимо присоединить к ВМ.
-
Нажмите OK
-
-
Добавьте GPU в ВМ. Для этого:
-
Нажмите на имя ВМ для перехода в подробное представление.
-
Перейдите на вкладку Устройства хоста и нажмите Добавить устройство.
-
В меню Хост выберите хост, GPU которого необходимо присоединить к ВМ.
-
В списке Доступные устройства хоста найдите и выберите видеокарту.
-
Нажмите для добавления видеокарты к списку подключаемых устройств.
-
Нажмите OK.
-
3.2. Отключение GPU хоста от виртуальной машины
Если GPU больше не требуется для виртуальной машины, либо требуется использовать vGPU, его можно отключить.
-
Перейдите в
. -
Выключите ВМ с прикреплённым GPU.
-
Нажмите на имя ВМ для перехода в подробное представление.
-
Перейдите на вкладку Устройства хоста.
-
Выделите GPU, нажмите Удалить устройство, а затем OK.
3.3. Добавление vGPU к виртуальной машине
Перед добавлением vGPU к ВМ убедитесь, что GPU не проброшен напрямую ни в какую ВМ. Если такая ВМ существует, отключите GPU от неё. |
-
Для выбранной ВМ установите параметр запуска на определённом хосте. Для этого
-
Перейдите
. -
Выделите нужную ВМ и нажмите Изменить.
-
Откройте вкладку Хост.
-
Активируйте опцию Запустить на: указанном хосте и в меню выберите хост с GPU.
-
Нажмите OK
-
-
Нажмите на имя виртуальной машины, чтобы перейти к подробному представлению.
-
Откройте вкладку Устройства хоста или Устройства ВМ.
-
Нажмите Управление vGPU. Откроется диалоговое окно Управление vGPU.
-
Выберите тип vGPU и количество экземпляров, которые вы хотите использовать с этой виртуальной машиной.
Для изменения количества экземпляров используйте кнопки Добавить экземпляр и Удалить экземпляр.
Не все GPU поддерживают назначение нескольких экземпляров vGPU одной ВМ. -
Переведите переключатель Адаптер вторичного дисплея для VNC в состояние Включен, чтобы добавить второй эмулируемый графический адаптер QXL или VGA в качестве основного графического адаптера для консоли в дополнение к vGPU.
-
В поле Optional driver parameters можно ввести параметры драйвера, передаваемые на все экземпляры vGPU виртуальной машины. Например, для включения Nvidia Unified Memory введите
enable_uvm=1
. -
Нажмите Сохранить.
3.4. Удаление устройств NVIDIA vGPU
Чтобы изменить конфигурацию назначенных устройств с поддержкой vGPU, необходимо удалить существующие устройства из соответствующих гостевых ОС.
-
На портале администрирования нажмите
. -
Нажмите на имя виртуальной машины, чтобы перейти к подробному представлению.
-
Откройте вкладку Устройства хоста или Устройства ВМ.
-
Нажмите Управление vGPU. Откроется диалоговое окно Управление vGPU.
-
Нажмите x рядом с надписью Выбранные экземпляры типа vGPU, чтобы отсоединить vGPU от виртуальной машины.
-
Нажмите Сохранить.
4. Установка драйвера графического процессора на виртуальной машине
-
Запустите виртуальную машину и подключитесь к ней с помощью консоли VNC или SPICE.
-
Загрузите драйвер на виртуальную машину. Информацию о получении драйвера см. на странице Драйверы на веб-сайте NVIDIA.
-
Установите в гостевую ОС подходящий драйвер GPU, следуя инструкциям в разделе Установка программного графического драйвера NVIDIA vGPU в документации к программному обеспечению NVIDIA.
Процесс установки программного графического драйвера NVIDIA vGPU зависит от используемой гостевой ОС. Но для любой ОС процесс установки драйвера одинаков как для ВМ, настроенной на vGPU, так и для ВМ, работающей с проброшенным GPU. Только для Linux: при установке драйвера в гостевой операционной системе Linux вам будет предложено обновить xorg.conf. Если вы не обновите xorg.conf во время установки, вам придется обновить его вручную. -
После завершения установки драйвера перезагрузите ВМ. Для виртуальных машин Windows полностью выключите ВМ на портале администрирования или пользовательском портале, а не из гостевой операционной системы.
Только для Windows: выключение виртуальной машины из гостевой операционной системы Windows иногда переводит виртуальную машину в спящий режим, при этом память не очищается полностью, что может привести к последующим проблемам. Использование портала администрирования или пользовательском портале для выключения виртуальной машины приводит к полной очистке памяти. -
Запустите виртуальную машину и подключитесь к ней, используя один из поддерживаемых протоколов удаленного рабочего стола и убедитесь, что GPU/vGPU доступен, открыв панель управления NVIDIA. В Windows вы также можете открыть диспетчер устройств Windows. Виртуальный графический процессор должен появиться в разделе Видеоадаптеры. Дополнительную информацию см. в разделе Программный графический драйвер NVIDIA vGPU в документации к программному обеспечению NVIDIA Virtual GPU.
-
Настройте лицензирование гостевого программного обеспечения NVIDIA vGPU для каждого виртуального графического процессора и добавьте учетные данные лицензии в панели управления NVIDIA. Дополнительную информацию см. в разделе Как обеспечивается лицензирование программного обеспечения NVIDIA vGPU в документации по программному обеспечению NVIDIA Virtual GPU.
5. Обновление и включение xorg (виртуальные машины Linux)
Прежде чем вы сможете использовать графический процессор на виртуальной машине, вам необходимо обновить и включить xorg на виртуальной машине. Установка драйвера NVIDIA должна выполнить это автоматически. Проверьте, обновлен ли и включен ли xorg, просмотрев /etc/X11/xorg.conf:
cat /etc/X11/xorg.conf
Первые две строки говорят, было ли оно создано NVIDIA. Например:
cat /etc/X11/xorg.conf
nvidia-xconfig: X configuration file generated by nvidia-xconfig
nvidia-xconfig: version 390.87 (buildmeister@swio-display-x64) Tue Aug 21 17:33:38 PDT 2018
Если файл не сконфигурирован выполните описанные ниже действия.
-
На виртуальной машине сгенерируйте файл xorg.conf с помощью следующей команды:
X -configure
-
Скопируйте файл xorg.conf с из текущего каталога в каталог /etc/X11/:
cp /root/xorg.conf.new /etc/X11/xorg.conf
-
Перезагрузите виртуальную машину.
-
Убедитесь, что xorg обновлен и включен, просмотрев /etc/X11/xorg.conf:
cat /etc/X11/xorg.conf
Найдите раздел Device. Вы должны увидеть запись, подобную следующей:
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" EndSection
Теперь графический процессор назначен виртуальной машине.
6. Мониторинг графических процессоров NVIDIA
NVIDIA System Management Interface, nvidia-smi - это инструмент командной строки, который сообщает информацию об управлении графическими процессорами NVIDIA.
Инструмент nvidia-smi входит в следующие пакеты:
-
Пакет NVIDIA Virtual GPU Manager для хоста;
-
Пакет драйверов NVIDIA для поддерживаемой гостевой ОС
Объем предоставляемой информации об управлении зависит от того, откуда вы запустили nvidia-smi
:
-
Из командной оболочки хоста
nvidia-smi
сообщает информацию об управлении физическими и виртуальными GPU NVIDIA, присутствующими в системе.При запуске из командной оболочки хоста nvidia-smi
не отобразит GPU, которые в данный момент работают в режиме GPU passthrough. -
Из гостевой ВМ
nvidia-smi
извлекает статистику использования vGPU или напрямую проброшенных GPU, назначенных ВМ.
Для получения дополнительной информации см. Интерфейс управления системой NVIDIA nvidia-smi в документации по программному обеспечению NVIDIA Virtual GPU.
# nvidia-smi
Wed Dec 13 18:30:31 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.199.03 Driver Version: 470.199.03 CUDA Version: N/A |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:98:00.0 Off | 0 |
| N/A 51C P8 18W / 70W | 7635MiB / 15359MiB | 1% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 13992 C+G vgpu 7552MiB |
+-----------------------------------------------------------------------------+