Как пробросить видеокарту в 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 и какие особенности использования виртуальной машины при этом возникают. Близкая тема: Как пробросить 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

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

Список видеокарт с поддержкой 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
  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 будет работать для выполнения актуальных задач.

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

  • serg

    Однако все равно остановился на пункте 7

    Диспетчер Hyper-V
    + Произошла ошибка при попытке запуска выбранных
    виртуальных машин.
    Сбой операции с контрольной точкой.
    Невозможно создать рабочие контрольные точки.
    Не удается выполнить операцию на виртуальной машине, так как ей назначен один или несколько разделов GPUP.

    Ответить

    • Dmitry

      Здравствуйте.
      В параметрах виртуальной машины отключите создание контрольных точек и всё заработает как нужно.
      А действия на случай, если потребуется их создать или использовать в инструкции описаны.

      Ответить

  • Алексей

    Видеокарта определяется в виртуальной машине с ошибкой 43. Не знаю, что делать?

    Ответить

    • Dmitry

      Здравствуйте.
      А на 4-м шаге ошибок не было? У меня тоже был код 43, пока не решил проблему на том этапе.

      Ответить

  • Вадёк

    Прокинуть больше одной виртуальной машины нельзя одну видеокарту? При прокидывании во вторую, одно из окон крашится

    Ответить

    • Алексей

      Успешно пробрасывал одну видеокарту в 5 виртуальных машин, все были запущены одновременно, и все одновременно использовали ресурсы видеоадаптера.

      Ответить

  • vlad

    win 11, создаю новую машину — не запускается, пишет не удалось запустить, т.к. не работает один из компонентов hyper-v, сломал голову уже куда копать может кто подскажет ?

    Ответить

    • Dmitry

      Здравствуйте.
      А никакие службы случайно не отключали? Вручную или с помощью сторонних программ «оптимизации»? Windows — оригинальная или сборка какая-то?

      Ответить

  • Danil

    При выполнении 4 пункта выскакивает эта ошибка
    Update-VMGpuPartitionDriver.ps1 -VMName hinn -GPUName AUTO
    Update-VMGpuPartitionDriver.ps1 : Имя «Update-VMGpuPartitionDriver.ps1» не распознано как имя командлета, функции, файл
    а сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути

    Ответить

    • Dmitry

      Здравствуйте.
      Тут судя по всему причина в том, что вы не находитесь в папке, где находится файл Update-VMGpuPartitionDriver.ps1

      Ответить

    • Alex

      По видимому, скрипт написан для доисторической версии PowerShell, поэтому его необходимо выполнять во встроенной в Windows версии (синенькая такая), а не дополнительно установленной 7.
      Также необходимо писать полный путь к скрипту. Путь в кавычки не обрамляем, следовательно путь не должен содержать пробелов. Получится примерно так:
      C:\Users\Danil\Downloads\Easy-GPU-PV-main\Update-VMGpuPartitionDriver.ps1 -VMName «hinn» -GPUName «AUTO»

      Ответить

  • Danil

    Так же при выполнении этого действия «Если вы уверены в надежности команды, введите «.\Update-VMGpuPartitionDriver.ps1».»
    Идет серия ошибок
    Get-VM : Не удается проверить аргумент для параметра «Name». Аргумент пустой или имеет значение NULL. Укажите непустой
    аргумент, не имеющий значение NULL, после чего повторите выполнение команды.

    Ответить

    • Dmitry

      Здесь ошибка, по видимому, проблема в отсутствии имени машины в команде.

      Ответить

  • Danil

    Можно как-то связаться с вами? Слишком много недопониманий с моей стороны и ошибок

    Ответить

    • Dmitry

      В ВК в группе (ссылки внизу статьи на подписку есть)

      Ответить

  • yarik

    нужно ли обновлять драйвер видеокарты в виртуальной машине?

    Ответить

    • Dmitry

      Нет, в виртуальной машине не обновляем. Но при обновлении на хосте может потребоваться повторить процесс проброса

      Ответить

  • Viday

    Спасибо за гайд, в принципе работает, получилось пробросить, корректно определяется в диспетчере устройств, но по какой то причине не работает должным образом, например нет плавности перетаскивания окон, прозрачности, видео в ютубе имеют пропуск кадров (статистика для сисадминов), но скорее всего это проблемы уже моей видеокарты r9 280x, которая имеет куча проблем с дровами, но даже при всем этом игры идут нормально (Factorio и Neon Abyss) и во время игры нагрузка на видеокарту есть, если смотреть в диспетчере в винде (не в Hyper-V)

    Ответить

    • Dmitry

      У меня возможность протестировать только на NVIDIA есть и тут всё в общем-то в порядке: и плавность и прозрачность на месте. Кроме всяких вулканов только.

      Ответить

  • Владимир

    Статья не дает готовое решение, но направляет в нужную сторону. В инструкции много пробелов, до которых необходимо додумываться самому. Так или иначе — спасибо.

    Ответить

    • Dmitry

      Здравствуйте и спасибо за отзыв.
      А не могли бы обратить мое внимание на такие пробелы? Просто в моем случае проброс (успешно) выполнялся именно по тем пунктам, что я и описал, ни одного шага из своих собственных действий не пропустил.

      Ответить

  • Alex

    Добрый день
    У меня на стадии 4 выходит ошибка
    (описание ошибки)

    При этом ВМ была выключена
    И пробовал устанавливать ВМ и на разных дисках.
    Не подскажете что можно сделать?

    Ответить

    • Dmitry

      Здравствуйте. Я вижу что при вводе по второму варианту вы не указываете параметры (-Name и т.п.), отсюда и ошибка.

      Ответить

      • Alex

        Спасибо большое
        Всё заработало
        У меня есть ещё одни вопрос не сильно касающийся данной темы.
        При запуске некоторых онлайн игр анти-чит распознаёт что это виртуальная машина и не даёт запустится игре. Есть какие то обходы подобных проблем на Hyper-V?
        Приложение которое я пытаюсь запустить это RageMP Для GTA V

        Ответить

        • Dmitry

          Здравствуйте.
          Здесь я не советчик уже, по играм не знаю, как оно (анти-читы) там сейчас работает.

          Ответить

  • Сергей

    Приветствую. Все проделал и все без ошибок. Но при запуске машины пишет: GPU Partition: Сбой включения, ошибка «недостаточно системных ресурсов для завершения операции» (0x800705AA).
    Под машину выделено 8/16. Видеокарта 1660 super.
    Возможно видеокарта слабая?
    Подскажите пожалуйста.

    Ответить

    • Dmitry

      Здравствуйте.
      Сам не сталкивался, решений «из головы» нет у меня.
      Гугл подсказывает, что может сработать уменьшение выделенной RAM под машину, но почему и какое отношение это имеет к GPU не знаю (и сработает ли)
      Ещё одно решение из гугла: добавление ключей реестра (нужна ли перезагрузка — не скажу)
      в

      HKLM:\SOFTWARE\Policies\Microsoft\Windows\HyperV

      RequireSecureDeviceAssignment DWORD 0
      RequireSupportedDeviceAssignment DWORD 0

      Ответить

      • Сергей

        Спасибо! Решение с реестром помогло. Но возник еще один вопрос:
        В машине теперь 3 видеоадаптера:
        Microsoft Remote Display Adapter
        Microsoft Virtual Render Driver
        Видеоустройство Microsoft Hyper-V
        Так и должно быть?
        И появилось неизвестное устройство с ИД
        VMBUS\{dde9cbc0-5060-4436-9448-ea1254a5d177}
        Стоит ли на это обращать внимание?

        Ответить

        • Dmitry

          Посмотрел у себя, всё аналогично (включая неизвестное устройство и его ID), кроме разве что вместо Virtual Render Driver у меня именно RTX 3060 указано (но драйвер vrd.inf = Virtual Render Driver)

          Насчет стоит ли обращать внимание — четкого ответа не дам, но я не обращаю.

          Ответить

      • Алексей

        Спасибо! Помогло добавление параметров в реестр.
        Раздела HyperV в нем не было. Создал без перезагрузки и машина запустилась.
        Для информации: после исполнения пунктов Вашей статьи на тестовой машине — все заработало. Затем я клонировал тестовую машину и собрал рабочую — она не запускалась с проброшенной картой, но запускалась после RemoveGPU… Тестовая с проброшенной картой тоже перестала запускаться.
        После правки реестра — рабочая запустилась и GPU работает, а тестовая запустилась, но один из виртуальных драйверов (Рендер) дал ошибку 43 и , соответственно, машина работает, но приложения, требующие аппаратного ускорения графики — нет.

        Ответить

  • Антон

    Здравствуйте, имею 2 видеокарты. Хотел бы 1ю вк пробросить на ВМ1, 2ю вк на ВМ2. Как сделать грамотно?

    Ответить

    • Dmitry

      Здравствуйте.
      Тут не подскажу сходу: сам бы смотрел скрипт используемый и как именно там происходит выбор видеокарты.
      По идее в файле Add-VMGpuPartitionAdapterFiles.psm1 где есть строки с Select-Object -First 1 (в трех местах) и соответственно переписать на 2. Но не уверен, тут тестировать нужно и другие файлы тоже смотреть, сам сейчас не могу взяться.

      Ответить

  • Владимир

    А у меня все копируется без ошибок, но дискретная видеокарта в диспетчере устройств не появляется.

    Ответить

Оставить комментарий

Интересное
Новое
Список инструкций Windows 11 Windows 10 Подписаться