Вопрос или проблема
Детали окружения:
-
Хост-машина:
- ОС: Windows Server 2022
- GPU: NVIDIA L4 x 3
- CPU: Intel Xeon Gold 6542Y (с включенной VT-d)
- IOMMU и SR-IOV: Включены в BIOS
-
Виртуальная машина (VM):
- ОС: Linux (Debian 12)
- Конфигурации Hyper-V DDA завершены без ошибок.
Выполненные шаги:
-
Проверка текущего состояния ВМ
PS C:\Users\Administrator> Get-VM
Вывод:
Имя Состояние Использование CPU (%) Назначенная память (МБ) Время работы Статус Версия ---- ------- ----------- ----------------- ------ ------ ------- VM_4.5.12_Build Отключен 0 0 00:00:00 正常稼働中 10.0
-
Установить действие при автоматической остановке
PS C:\Users\Administrator> Set-VM -Name VM_4.5.12_Build -AutomaticStopAction TurnOff
-
Включить управление типами кэша гостевой системой
PS C:\Users\Administrator> Set-VM -GuestControlledCacheTypes $true -VMName VM_4.5.12_Build
-
Настроить пространство памяти с отображением ввода-вывода
- Выделено пространство памяти с низким отображением:
PS C:\Users\Administrator> Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VM_4.5.12_Build
- Выделено пространство памяти с высоким отображением:
PS C:\Users\Administrator> Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VM_4.5.12_Build
- Выделено пространство памяти с низким отображением:
-
Отключить GPU от хоста
GPU был удален с хоста с помощью следующей команды:PS C:\Users\Administrator> Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(9E)#PCI(0100)#PCI(0000)" -Force
-
Назначить GPU виртуальной машине
GPU был назначен ВМ с помощью:PS C:\Users\Administrator> Add-VMAssignableDevice -LocationPath "PCIROOT(9E)#PCI(0100)#PCI(0000)" -VMName VM_4.5.12_Build
-
Запустить виртуальную машину
После завершения настройки DDA виртуальная машина была запущена:PS C:\Users\Administrator> Start-VM -Name VM_4.5.12_Build
-
Проверить GPU в гостевой ОС
Внутри гостевой ОС была использована следующая команда, чтобы проверить, видна ли GPU:lspci | grep -i nvidia
-
Запустил виртуальную машину и проверил GPU в гостевой ОС с использованием
lspci
.
Наблюдаемая проблема:
- GPU не отображается в выводе
lspci
внутри Linux VM, несмотря на то, что все конфигурации завершены без ошибок. - Во время процесса настройки DDA не наблюдалось ошибок или предупреждений.
Дополнительные заметки:
- Драйверы NVIDIA установлены на хосте Windows Server.
- Data Center L4 Driver для Windows 560.94 | Windows Server 2022
https://www.nvidia.com/en-us/drivers/details/231074/
Я хотел представить обновление по поводу проблемы, с которой я столкнулся с графическими процессорами NVIDIA L4 на виртуальных машинах Windows Server Hyper-V, использующих Discrete Device Assignment (DDA). Я смог успешно решить эту проблему, следуя рекомендациям, предоставленным в документации NVIDIA:
Ошибка №2812853: Microsoft DDA не работает с некоторыми графическими процессорами.
Проблема возникла, потому что графические процессоры с более чем 16 ГБ памяти требуют дополнительного пространства MMIO (ввода-вывода с отображением в память) для правильного отображения в гостевой ВМ. Без этой конфигурации графический процессор не был бы корректно обнаружен в виртуальной машине.
Решение:
Обходной путь включает выделение достаточного количества HighMemoryMappedIoSpace для виртуальной машины, основываясь на размере памяти BAR1 графического процессора и количестве графических процессоров, назначенных ВМ. Вот пошаговый процесс:
-
Используйте следующую формулу для расчета требуемого пространства MMIO:
MMIO space=2×gpu-bar1-memory×assigned-gpus
Где:
- gpu-bar1-memory: Объем памяти BAR1 для одного GPU (равен общей памяти GPU, если не указано иначе).
- assigned-gpus: Количество графических процессоров, назначенных ВМ.
- Назначьте вычисленное пространство MMIO виртуальной машине, используя команду
Set-VM
PowerShell на хосте Hyper-V.
Пример: GPU NVIDIA L4 с памятью 23 ГБ
Для виртуальной машины с 1 GPU, где каждый GPU имеет 23 ГБ памяти BAR1:
MMIO space=2×23 ГБ×1=46 ГБ
Команда PowerShell:
Выполните следующую команду на хосте Hyper-V, чтобы установить требуемое пространство MMIO:
Set-VM –HighMemoryMappedIoSpace 46GB –VMName <VM_Name>
Пример: Несколько GPU
Для 3 графических процессоров NVIDIA L4, каждый с 23 ГБ памяти, назначенных одной виртуальной машине:
MMIO space=2×23 ГБ×3=138 ГБ
Команда PowerShell:
Выполните следующую команду, чтобы установить пространство MMIO для виртуальной машины:
Set-VM –HighMemoryMappedIoSpace 138GB –VMName <VM_Name>
Проверка:
После настройки пространства MMIO перезагрузите виртуальную машину и проверьте, что графический процессор корректно распознан в гостевой ВМ с помощью таких инструментов, как nvidia-smi
или lspci
(для Linux ВМ).
Надеюсь, это поможет тем, кто сталкивается с аналогичными проблемами. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!
Ответ или решение
Если вы IT-эксперт и сталкиваетесь с проблемой использования графической карты NVIDIA L4 в виртуальных машинах Hyper-V на Windows Server с DDA, важно учесть несколько нюансов, чтобы успешно решить эту проблему.
Анализ проблемы
Ваша виртуальная машина на Hyper-V не видит GPU, несмотря на корректное выполнение всех настроек Discrete Device Assignment (DDA). Это может быть связано с тем, что графические процессоры с памятью более 16 ГБ требуют дополнительного пространства MMIO (Memory-Mapped Input/Output) для правильного отображения в гостевой ОС.
Решение проблемы
Шаги по решению:
-
Определите необходимое пространство MMIO:
Используйте формулу:
[
\text{MMIO space} = 2 \times \text{gpu-bar1-memory} \times \text{assigned-gpus}
]
где:- gpu-bar1-memory — объем памяти BAR1 одного графического процессора.
- assigned-gpus — количество графических процессоров, назначенных виртуальной машине.
-
Расчёт для NVIDIA L4 GPU с 23 ГБ памяти:
- Если у вас назначен 1 GPU:
[
\text{MMIO space} = 2 \times 23\ \text{ГБ} \times 1 = 46\ \text{ГБ}
] - Если назначены 3 графических процессора:
[
\text{MMIO space} = 2 \times 23\ \text{ГБ} \times 3 = 138\ \text{ГБ}
]
- Если у вас назначен 1 GPU:
-
Назначьте рассчитанное пространство MMIO для ВМ:
Используйте команду PowerShell на Hyper-V хосте:Set-VM –HighMemoryMappedIoSpace 138GB –VMName <Имя_ВМ>
-
Проверка и настройка:
- Перезагрузите виртуальную машину.
- Проверьте, что GPU распознается в гостевой ОС через
lspci
(для Linux) илиnvidia-smi
.
Дополнительные замечания
Убедитесь, что на вашем Windows Server установлены последние драйверы NVIDIA для Data Center L4 Card для обеспечения совместимости и повышения производительности. Более подробную информацию можно найти в документации NVIDIA по ссылке: NVIDIA Driver Details.
Следуя вышеуказанным шагам, вы сможете успешно настроить использование NVIDIA L4 GPU на виртуальных машинах Hyper-V. Если у вас есть дополнительные вопросы, пожалуйста, задавайте их.