Невозможно использовать графический процессор NVIDIA L4 на виртуальных машинах Windows Server Hyper-V с DDA.

Вопрос или проблема

Детали окружения:

  • Хост-машина:

    • ОС: 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 завершены без ошибок.

Выполненные шаги:

  1. Проверка текущего состояния ВМ

    PS C:\Users\Administrator> Get-VM
    

    Вывод:

    Имя                Состояние Использование CPU (%) Назначенная память (МБ) Время работы   Статус     Версия
    ----                ------- ----------- ----------------- ------   ------     -------
    VM_4.5.12_Build Отключен   0           0                 00:00:00 正常稼働中 10.0
    
  2. Установить действие при автоматической остановке

    PS C:\Users\Administrator> Set-VM -Name VM_4.5.12_Build -AutomaticStopAction TurnOff
    
  3. Включить управление типами кэша гостевой системой

    PS C:\Users\Administrator> Set-VM -GuestControlledCacheTypes $true -VMName VM_4.5.12_Build
    
  4. Настроить пространство памяти с отображением ввода-вывода

    • Выделено пространство памяти с низким отображением:
      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
      
  5. Отключить GPU от хоста
    GPU был удален с хоста с помощью следующей команды:

    PS C:\Users\Administrator> Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(9E)#PCI(0100)#PCI(0000)" -Force
    
  6. Назначить GPU виртуальной машине
    GPU был назначен ВМ с помощью:

    PS C:\Users\Administrator> Add-VMAssignableDevice -LocationPath "PCIROOT(9E)#PCI(0100)#PCI(0000)" -VMName VM_4.5.12_Build
    

enter image description here

  1. Запустить виртуальную машину
    После завершения настройки DDA виртуальная машина была запущена:

    PS C:\Users\Administrator> Start-VM -Name VM_4.5.12_Build
    
  2. Проверить GPU в гостевой ОС
    Внутри гостевой ОС была использована следующая команда, чтобы проверить, видна ли GPU:

    lspci | grep -i nvidia
    
  3. Запустил виртуальную машину и проверил GPU в гостевой ОС с использованием lspci.
    enter image description here

Наблюдаемая проблема:

  • GPU не отображается в выводе lspci внутри Linux VM, несмотря на то, что все конфигурации завершены без ошибок.
  • Во время процесса настройки DDA не наблюдалось ошибок или предупреждений.

Дополнительные заметки:

Я хотел представить обновление по поводу проблемы, с которой я столкнулся с графическими процессорами NVIDIA L4 на виртуальных машинах Windows Server Hyper-V, использующих Discrete Device Assignment (DDA). Я смог успешно решить эту проблему, следуя рекомендациям, предоставленным в документации NVIDIA:

Ошибка №2812853: Microsoft DDA не работает с некоторыми графическими процессорами.

Проблема возникла, потому что графические процессоры с более чем 16 ГБ памяти требуют дополнительного пространства MMIO (ввода-вывода с отображением в память) для правильного отображения в гостевой ВМ. Без этой конфигурации графический процессор не был бы корректно обнаружен в виртуальной машине.


Решение:

Обходной путь включает выделение достаточного количества HighMemoryMappedIoSpace для виртуальной машины, основываясь на размере памяти BAR1 графического процессора и количестве графических процессоров, назначенных ВМ. Вот пошаговый процесс:

  1. Используйте следующую формулу для расчета требуемого пространства MMIO:

    MMIO space=2×gpu-bar1-memory×assigned-gpus

Где:

  • gpu-bar1-memory: Объем памяти BAR1 для одного GPU (равен общей памяти GPU, если не указано иначе).
  • assigned-gpus: Количество графических процессоров, назначенных ВМ.
  1. Назначьте вычисленное пространство 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 ВМ).
enter image description here

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

Ответ или решение

Если вы IT-эксперт и сталкиваетесь с проблемой использования графической карты NVIDIA L4 в виртуальных машинах Hyper-V на Windows Server с DDA, важно учесть несколько нюансов, чтобы успешно решить эту проблему.

Анализ проблемы

Ваша виртуальная машина на Hyper-V не видит GPU, несмотря на корректное выполнение всех настроек Discrete Device Assignment (DDA). Это может быть связано с тем, что графические процессоры с памятью более 16 ГБ требуют дополнительного пространства MMIO (Memory-Mapped Input/Output) для правильного отображения в гостевой ОС.

Решение проблемы

Шаги по решению:

  1. Определите необходимое пространство MMIO:
    Используйте формулу:
    [
    \text{MMIO space} = 2 \times \text{gpu-bar1-memory} \times \text{assigned-gpus}
    ]
    где:

    • gpu-bar1-memory — объем памяти BAR1 одного графического процессора.
    • assigned-gpus — количество графических процессоров, назначенных виртуальной машине.
  2. Расчёт для 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{ГБ}
      ]
  3. Назначьте рассчитанное пространство MMIO для ВМ:
    Используйте команду PowerShell на Hyper-V хосте:

    Set-VM –HighMemoryMappedIoSpace 138GB –VMName <Имя_ВМ>
  4. Проверка и настройка:

    • Перезагрузите виртуальную машину.
    • Проверьте, что GPU распознается в гостевой ОС через lspci (для Linux) или nvidia-smi.

Дополнительные замечания

Убедитесь, что на вашем Windows Server установлены последние драйверы NVIDIA для Data Center L4 Card для обеспечения совместимости и повышения производительности. Более подробную информацию можно найти в документации NVIDIA по ссылке: NVIDIA Driver Details.

Следуя вышеуказанным шагам, вы сможете успешно настроить использование NVIDIA L4 GPU на виртуальных машинах Hyper-V. Если у вас есть дополнительные вопросы, пожалуйста, задавайте их.

Оцените материал
Добавить комментарий

Капча загружается...