Как пробросить видеокарту в виртуальную машину Hyper-V
Ранее, начиная с Windows 7/Windows Server 2008R2, проброс дискретной видеокарты с хоста в виртуальную машину Hyper-V осуществлялся с помощью технологии RemoteFX vGPU. Однако, начиная с Windows 10 версии 1809 и Windows Server 2019, поддержка RemoteFX была отключена, и вместо нее появилась новая технология — Discrete Device Assignment (DDA).
Проброс видеокарты в виртуальную машину на Windows Server с Hyper-V
Технология Discrete Device Assignment (DDA) позволяет пробросить PCI/PCIe устройства (включая GPU и NVMe) с хоста на виртуальную машину. В VMware аналогом этой функции является VMware PCI Passthrough (VMDirectPath). Для успешного использования DDA необходимо соблюсти следующие условия:
— DDA доступен только для виртуальных машин второго поколения (Gen 2);
— ВМ не должна использовать динамическую память и чекпоинты;
— Физическая видеокарта должна поддерживать технологию GPU Partitioning;
— SR-IOV не является обязательным требованием, но без его поддержки проброс GPU может работать некорректно.
Шаг 1: Настройка виртуальной машины и системы
1. Отключите автоматическое создание снапшотов:
Set-VM -Name VMName -AutomaticStopAction TurnOff
2. Настройте кэш и лимиты памяти для 32-разрядного адресного пространства MMIO:
Set-VM -Name VMName -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb
Шаг 2: Получение PCI пути к видеокарте
Для того чтобы пробросить GPU в ВМ, нужно получить физический путь к PCIe устройству видеокарты на хосте Hyper-V. Сделать это можно через диспетчер устройств или через PowerShell:
— Откройте диспетчер устройств, перейдите на вкладку Сведения, выберите Путь к расположению, и скопируйте значение, которое начинается с PCIROOT.
— Либо используйте PowerShell:
Get-PnpDevice | Where-Object {$_.Present -eq $true} | Where-Object {$_.Class -eq "Display"} | select Name, InstanceId
Шаг 3: Отключение видеокарты на хосте Hyper-V
Отключите видеокарту на сервере Hyper-V с помощью диспетчера устройств или через PowerShell:
Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" –force
Шаг 4: Проброс видеокарты в виртуальную машину
Пробросьте видеокарту в ВМ с помощью команды:
Add-VMAssignableDevice -VMName VMName -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"
Запустите ВМ и проверьте, что видеокарта появилась в диспетчере устройств внутри ВМ в разделе Видеоадаптеры.
Шаг 5: Отключение GPU от ВМ
Чтобы отключить GPU от ВМ и вернуть его на хост, выполните следующие команды:
Remove-VMAssignableDevice -VMName VMName -LocationPath $locationPath
Mount-VMHostAssignableDevice -LocationPath $locationPath
Использование GPU в виртуальных машинах Hyper-V на Windows 10/11
Для десктопных версий Windows 10/11 используется технология GPU Partitioning (GPU-P). Этот метод позволяет использовать разделение GPU между виртуальными машинами.
1. Проверьте поддержку вашей видеокарты для режима GPU Partitioning:
Get-VMPartitionableGpu
— (для Windows 10)
Get-VMHostPartitionableGpu
— (для Windows 11)
2. Для проброса видеокарты в ВМ используйте командлет:
Add-VMGpuPartitionAdapter -VMName VMName
3. Чтобы скопировать драйвера видеокарты с хоста в ВМ, используйте скрипт Easy-GPU-PV.
Скачайте его с GitHub, распакуйте и выполните в PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
.\Update-VMGpuPartitionDriver.ps1 -VMName VMName -GPUName "AUTO"
Этот скрипт скопирует драйвера с хоста в ВМ.
Шаг 4: Настройка ВМ для проброса GPU
Настройте ВМ для работы с GPU Partitioning:
Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb
Add-VMGpuPartitionAdapter -VMName VMName
Если вы обновляете драйвера на хосте Hyper-V, вам нужно также обновить их в ВМ:
.\Update-VMGpuPartitionDriver.ps1 -VMName VMName -GPUName "AUTO"
Заключение
Использование Discrete Device Assignment (DDA) на серверных версиях Windows и GPU Partitioning на десктопных версиях позволяет пробросить видеокарту в виртуальные машины Hyper-V для различных задач, включая графически интенсивные вычисления и виртуализацию.