Как пробросить видеокарту в Hyper-V в Windows 11 и 10

Как подключить видеокарту в Hyper-VВ ранних версиях Hyper-V для клиентских версий Windows 10 была возможность простого проброса дискретной видеокарты с помощью установки видеоадаптера RemoteFX. В актуальных версиях эта возможность исчезла, а документированный способ с помощью DDA (Discrete Device Assignment) подходит только для серверных версий системы. Однако, возможность подключения физической видеокарты компьютера в Hyper-V имеется.

В этой инструкции пошагово о том, как пробросить видеокарту компьютера в Hyper-V в Windows 11 или Windows 10 с использованием GPU Partitioning и какие особенности использования виртуальной машины при этом возникают. Создание виртуальных машин 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

Если в результате выполнения команд вы видите список видеоадаптеров и информацию о них, можно продолжать.

Список видеокарт с поддержкой GPU Partitioning

Порядок проброса видеокарты в Hyper-V с помощью Easy-GPU-PV

Для подключения дискретной или интегрированной видеокарты в Hyper-V в этом примере будут использоваться готовые сценарии PowerShell Easy-GPU-PV, доступные в GitHub разработчика — зайдите на страницу, нажмите по кнопке «Code», скачайте ZIP-архив и распакуйте в удобное расположение на вашем компьютере.

Шаги для проброса видеокарты в Hyper-V:

  1. Выключите виртуальную машину, если она работает.
  2. Запустите Терминал или PowerShell от имени Администратора (правый клик по кнопке «Пуск» и выбор соответствующего пункта меню) и используйте следующие две команды для разрешения исполнения неподписанных скриптов:
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
    Добавить в заметки чтобы посмотреть позже?

    Чтобы узнавать о свежих записях укажите email:
  3. Перейдите в каталог с извлеченными файлами Easy-GPU-PV с помощью команды
    cd ПУТЬ_К_ПАПКЕ
  4. Выполните следующую команду, заменив имя виртуальной машины на нужное:
    Update-VMGpuPartitionDriver.ps1 -VMName "ИМЯ_ВИРТУАЛЬНОЙ_МАШИНЫ" -GPUName "AUTO"

    Обновить драйвер GPU-P в Hyper-V

  5. Если команда из 4-го пункта выполняется с ошибками, возможны два варианта решения. При наличии на диске виртуальной машины нескольких разделов с буквами (помимо скрытых разделов) — удалить разделы кроме системного или установить для них атрибут «Скрытый»), выключить виртуальную машину и снова выполнить команду. В случае, если в виртуальной машине есть лишь один видимый раздел с Windows, смонтируйте VHDX с системой на хосте, назначьте букву этому разделу, размонтируйте виртуальный диск и снова выполните команду. Ещё один вариант — вручную задать букву диска, под которой монтируется системный диск в файле сценария PowerShell. Исправление ошибок при установке драйвера GPU в Hyper-V
  6. Создайте файл .ps1 со следующим кодом, заменив имя виртуальной машины на нужное в первой строке и запустите его в PowerShell от имени Администратора:
    $vm = "ИМЯ_ВИРТУАЛЬНОЙ_МАШИНЫ"
    if (Get-VMGpuPartitionAdapter -VMName $vm -ErrorAction SilentlyContinue) {
    Remove-VMGpuPartitionAdapter -VMName $vm
    }
    Set-VM -GuestControlledCacheTypes $true -VMName $vm
    Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vm
    Set-VM -HighMemoryMappedIoSpace 32Gb -VMName $vm
    Add-VMGpuPartitionAdapter -VMName $vm
  7. Запустите виртуальную машину и проверьте доступность дискретной видеокарты в диспетчере устройств. Видеокарта компьютера проброшена в Hyper-V

Если всё прошло успешно, с большой вероятностью, эффект от использования видеокарты в виртуальной машине вы увидите сразу — например, будут включены эффекты прозрачности и скругленные углы в Windows 11, отключенные в Hyper-V по умолчанию. Но следует учитывать, что при использовании видеокарты в Hyper-V есть некоторые особенности.

Особенности работы видеокарты в Hyper-V

Сначала о базовых нюансах после успешного проброса видеокарты в виртуальную машину Hyper-V:

  • При обновлениях драйвера видеокарты на хосте, используйте команду (при выключенной виртуальной машине)
    Update-VMGpuPartitionDriver.ps1 -VMName "ИМЯ_ВМ" -GPUName "AUTO"
  • В диспетчере устройств в виртуальной машине в качестве драйвера будет отображаться не драйвер NVIDIA, а специальный драйвер Microsoft, и такие инструменты как панель управления NVIDIA не будут доступны. Драйвер дискретной видеокарты в Hyper-V
  • Для подключения к виртуальной машине с видеокартой разработчиком скрипта рекомендуется использовать ПО 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 (ограничение подключения). NVIDIA RTX в виртуальной машине Hyper-V
  • Создание RAM-диска в памяти видеокарты из виртуальной машины — работает.
  • Браузерные приложения, требующие аппаратного ускорения — работают отлично.
  • Quake 2 RTX — без результата, так как используется Vulkan, а поддержка этого API отсутствует.
  • Технологические демо от NVIDIA — неудачно, активно проверяют установленное оборудование при запуске.

Надеюсь, для кого-то из читателей инструкция будет полезной, а видеокарта в Hyper-V будет работать для выполнения актуальных задач.

+ +