Как пробросить видеокарту в 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 CurrentUser Set-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 $vm Set-VM -LowMemoryMappedIoSpace 1Gb -VMName $vm Set-VM -HighMemoryMappedIoSpace 32Gb -VMName $vm Add-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 будет работать для выполнения актуальных задач.
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 не знаю (и сработает ли)
Ещё одно решение из гугла: добавление ключей реестра (нужна ли перезагрузка — не скажу)
в
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. Но не уверен, тут тестировать нужно и другие файлы тоже смотреть, сам сейчас не могу взяться.
Ответить
Владимир
А у меня все копируется без ошибок, но дискретная видеокарта в диспетчере устройств не появляется.
Ответить
Сергей
не работает. после всех действий ВМ не запускается
Ответить
Сергей
Статья не актуальна. После всех проделанных шагов раз 200 одна и та же ошибка при запуске ВМ — GPUP.
Ответить
Dmitry
Контрольных точек случайно нет в машине? Сталкивался с тем, что они вызывают такой эффект
Ответить
Дмитрий
У меня почему-то все в артефактах
Ответить