Как пробросить видеокарту в Hyper-V в Windows 11 и 10
В ранних версиях Hyper-V для клиентских версий Windows 10 была возможность простого проброса дискретной видеокарты с помощью установки видеоадаптера RemoteFX. В актуальных версиях эта возможность исчезла, а документированный способ с помощью DDA (Discrete Device Assignment) подходит только для серверных версий системы. Однако, возможность подключения физической видеокарты компьютера в Hyper-V имеется.
В этой инструкции пошагово о том, как пробросить видеокарту компьютера в Hyper-V в Windows 11 или Windows 10 с использованием GPU Partitioning и какие особенности использования виртуальной машины при этом возникают. Близкая тема: Как пробросить USB накопители и другие устройства в Hyper-V . Создание виртуальных машин Hyper-V описано в этой инструкции .
Требования для подключения видеокарты в Hyper-V
Прежде чем приступить непосредственно к пробросу видеокарты, о том, какие условия должны выполняться для использования этой возможности:
- В виртуальной машине должна быть установлена Windows 10 (не ниже 20H1) или Windows Рекомендуется использование одинаковых версий системы (например, 22H2) на хосте и в виртуальной машине.
- Должно использоваться 2-е поколение виртуальной машины.
- После проброса создание контрольных точек будет недоступно (вариант решения будет представлен далее в статье). Если контрольные точки создаются автоматически, это может приводить к сбою виртуальной машины.
- Параллельная работа WSL (Windows Subsystem for Linux) и проброса видеокарты с использованием GPU-P может привести к сбоям (в частности, ошибка с кодом 43 в виртуальной машине).
Для проверки возможности использования видеокарты в Hyper-V посредством GPU Partitioning, вы можете использовать следующие команды PowerShell (от имени администратора), первая — для Windows 10, вторая — для Windows 11:
Get-VMPartitionableGpu
Get-VMHostPartitionableGpu
Если в результате выполнения команд вы видите список видеоадаптеров и информацию о них, можно продолжать.
Порядок проброса видеокарты в Hyper-V с помощью Easy-GPU-PV
Для подключения дискретной или интегрированной видеокарты в Hyper-V в этом примере будут использоваться готовые сценарии PowerShell Easy-GPU-PV, доступные в GitHub разработчика — зайдите на страницу, нажмите по кнопке «Code», скачайте ZIP-архив и распакуйте в удобное расположение на вашем компьютере.
Шаги для проброса видеокарты в Hyper-V:
- Выключите виртуальную машину, если она работает.
- Запустите Терминал или PowerShell от имени Администратора (правый клик по кнопке «Пуск» и выбор соответствующего пункта меню) и используйте следующие две команды для разрешения исполнения неподписанных скриптов:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserSet-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
- Перейдите в каталог с извлеченными файлами Easy-GPU-PV с помощью команды
cd ПУТЬ_К_ПАПКЕ
- Выполните следующую команду, заменив имя виртуальной машины на нужное:
Update-VMGpuPartitionDriver.ps1 -VMName "ИМЯ_ВИРТУАЛЬНОЙ_МАШИНЫ" -GPUName "AUTO"
- Если команда из 4-го пункта выполняется с ошибками, возможны два варианта решения. При наличии на диске виртуальной машины нескольких разделов с буквами (помимо скрытых разделов) — удалить разделы кроме системного или установить для них атрибут «Скрытый»), выключить виртуальную машину и снова выполнить команду. В случае, если в виртуальной машине есть лишь один видимый раздел с Windows, смонтируйте VHDX с системой на хосте, назначьте букву этому разделу, размонтируйте виртуальный диск и снова выполните команду. Ещё один вариант — вручную задать букву диска, под которой монтируется системный диск в файле сценария PowerShell.
- Создайте файл .ps1 со следующим кодом, заменив имя виртуальной машины на нужное в первой строке и запустите его в PowerShell от имени Администратора:
$vm = "ИМЯ_ВИРТУАЛЬНОЙ_МАШИНЫ"if (Get-VMGpuPartitionAdapter -VMName $vm -ErrorAction SilentlyContinue) {Remove-VMGpuPartitionAdapter -VMName $vm}Set-VM -GuestControlledCacheTypes $true -VMName $vmSet-VM -LowMemoryMappedIoSpace 1Gb -VMName $vmSet-VM -HighMemoryMappedIoSpace 32Gb -VMName $vmAdd-VMGpuPartitionAdapter -VMName $vm
- Запустите виртуальную машину и проверьте доступность дискретной видеокарты в диспетчере устройств.
Если всё прошло успешно, с большой вероятностью, эффект от использования видеокарты в виртуальной машине вы увидите сразу — например, будут включены эффекты прозрачности и скругленные углы в Windows 11, отключенные в Hyper-V по умолчанию. Но следует учитывать, что при использовании видеокарты в Hyper-V есть некоторые особенности.
Особенности работы видеокарты в Hyper-V
Сначала о базовых нюансах после успешного проброса видеокарты в виртуальную машину Hyper-V:
- При обновлениях драйвера видеокарты на хосте, используйте команду (при выключенной виртуальной машине)
Update-VMGpuPartitionDriver.ps1 -VMName "ИМЯ_ВМ" -GPUName "AUTO"
- В диспетчере устройств в виртуальной машине в качестве драйвера будет отображаться не драйвер NVIDIA, а специальный драйвер Microsoft, и такие инструменты как панель управления NVIDIA не будут доступны.
- Для подключения к виртуальной машине с видеокартой разработчиком скрипта рекомендуется использовать ПО Parsec вместо стандартных средств подключения (но это не обязательно): для обеспечения лучшей производительности при подключении, отмены ограничения в 30 FPS и ограничений разрешения. Однако следует учитывать, что Parsec может не работать с виртуальной машиной с подключенной дискретной видеокартой ноутбука, а также ограничивать выбор разрешений в бесплатной версии для виртуальных машин без физического монитора (одно из решений предполагает установку виртуального монитора в виртуальной машине, подробнее — здесь )
- После подключения видеокарты контрольные точки для виртуальной машины создавать не получится. Одно из решений — временно отключать, а затем — вновь включать GPU Partitioning, обязательно при выключенной виртуальной машине. Достаточно использовать следующие команды в PowerShell, создав контрольную точку после выполнения первой из них
Remove-VMGpuPartitionAdapter -VMName "ИМЯ_ВИРТУАЛЬНОЙ_МАШИНЫ"Add-VMGpuPartitionAdapter -VMName "ИМЯ_ВИРТУАЛЬНОЙ_МАШИНЫ"
- В диспетчере задач в виртуальной машине GPU и его загрузка отображаться не будут.
Теперь о более насущных вещах, таких как работа игр и других программ, требующих ускорение видеокарты для работы:
- Игры и ПО, использующие API Vulkan, работать не будут, даже после установки VulkanRT.
- Некоторые игры и приложения OpenGL также могут не работать. В некоторых случаях может помочь установка OpenCL and OpenGL Compatibility Pack из Microsoft Store в виртуальной машине.
- Игры и ПО, принудительно выполняющие проверку совместимости графического оборудования при запуске, могут не запуститься, поскольку информация о подключенной видеокарте, отдаваемая гостевой системой, будет отличаться от таковой при её же использовании на хосте.
В моем тесте (Ноутбук, Windows 11 22H2, NVIDIA RTX 3060) проброс видеокарты удалось успешно выполнить. В дальнейшем для подключения к виртуальной машине использовались стандартные средства Hyper-V. Был опробован запуск:
- Небольшие любительские проекты на Unity и Unreal Engine с использованием RTX — успешно, всё работает без каких-либо проблем, при 30 FPS (ограничение подключения).
- Создание RAM-диска в памяти видеокарты из виртуальной машины — работает.
- Браузерные приложения, требующие аппаратного ускорения — работают отлично.
- Quake 2 RTX — без результата, так как используется Vulkan, а поддержка этого API отсутствует.
- Технологические демо от NVIDIA — неудачно, активно проверяют установленное оборудование при запуске.
Надеюсь, для кого-то из читателей инструкция будет полезной, а видеокарта в Hyper-V будет работать для выполнения актуальных задач.