В ранних версиях 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 будет работать для выполнения актуальных задач.
В предыдущих версиях Hyper-V (начиная с Windows 7/Windows Server 2008R2) для проброса дискретной видеокарты с хоста в виртуальную машину можно было использовать технологию RemoteFX vGPU. Однако, начиная с Windows 10 1809 и Windows Server 2019, Майкрософт отключило поддержку RemoteFX. Вместо нее предлагается использовать новую технологию Discrete Device Assignment (DDA).
Содержание:
- Проброс видеокарты в виртуальную машину на Windows Server с Hyper-V
- Использование GPU в виртуальных машинах Hyper-V на Windows 10/11
DDA позволяет пробросить PCI/PCIe устройства (включая GPU, NVMe) с хоста в виртуальную машину Hyper-V.
Основные требования к инфраструктуре для использования DDA в Hyper-V:
- Доступно только для виртуальных машин Hyper-V второго поколения (Gen 2);
- На ВМ должно быть отключены динамическая память и чекпоинты;
- Физическая карта должна поддерживать технологию GPU Partitioning;
- Если на хосте развернута среда WSL (Windows Subsystem for Linux), то при пробросе видеокарты с помощью GPU-P, в ВМ может появляться ошибка видеокарты с кодом 43;
- Хотя SR-IOV (Single Root Input/Output Virtualization) не заявлена в требованиях DDA, без ее поддержки проброс GPU в ВМ работает не корректно.
Discrete Device Assignment доступна только в Windows Server с ролью Hyper-V. В десктопных версиях Windows 10/11 для предоставления общего доступа к видеокарте в виртуальных машинах можно использовать GPU Partitioning. В этой статье мы покажем, как пробросить видеокарту в виртуальную машину на Hyper-V.
Проброс видеокарты в виртуальную машину на Windows Server с Hyper-V
Discrete Device Assignment (DDA) позволяет пробросить PCIe устройства в виртуальную машину во всех версиях Windows Server, начиная с 2016.
Перед пробросом GPU в ВМ, нужно изменить ее конфигурацию.
Отключить автоматическое создание снапшотов (описано в статье об управлении запуском и порядке загрузки ВМ на Hyper-V):
Set-VM -Name VMName -AutomaticStopAction TurnOff
Настроить кэш и лимиты памяти для 32-разрядного пространства MMIO:
Set-VM -Name VMName -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb
Затем нужно получить физический путь к PCIe устройству видеокарты на хосте Hyper-V. Для этого нужно открыть свойства GPU в диспетчере устройств, перейти на вкладку Details и выбрать свойство Location paths. Скопируйте значение, которое начинается с PCIROOT.
Либо вы можете получить это значение с помощью PowerShell:
Get-PnpDevice | Where-Object {$_.Present -eq $true} | Where-Object {$_.Class -eq "Display"}|select Name,InstanceId
Отключить эту видеокарту на сервере Hyper-V в диспетчере устройств или с помощью PowerShell:
Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" –force
Теперь нужно пробросить GPU адаптер в виртуальную машину:
Add-VMAssignableDevice -VMName VMName -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"
Затем включите ВМ и проверьте, что ваша видеокарта появилась в диспетчере устройств в разделе Display Adapters вместе с устройством Microsoft Hyper-V Video.
Драйвера видеокарты должны быть предварительно установлены в ВМ.
Чтобы отключить GPU от ВМ и подключить его к хосту:
Remove-VMAssignableDevice -VMName VMName -LocationPath $locationPath
Mount-VMHostAssignableDevice -LocationPath $locationPath
Использование GPU в виртуальных машинах Hyper-V на Windows 10/11
GPU Partitioning (GPU-P) доступно в виртуальных машинах Hyper-V на Windows 10/11, начиная с билда 1903. Проверьте, что ваша видеокарта поддерживает режим GPU Partitioning с помощью команды Get-VMPartitionableGpu (Windows 10) или Get-VMHostPartitionableGpu (для Windows 11).
Для проброса видеокарты в ВМ используется командлет Add-VMGpuPartitionAdapter. Чтобы скопировать драйвера видеокарты с хоста Hyper-V в виртуальную машину нужно использовать скрипт Easy-GPU-PV (https://github.com/jamesstringerparsec/Easy-GPU-PV).
Скачайте ZIP архив с скриптом и распакуйте его в папку на хосте Hyper-V.
Откройте консоль PowerShell с правами администратора и разрешите запуск PowerShell скриптов в текущей сессии (подробнее о PowerShell Execution Policy):
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
Выполняйте скрипт:
.\Update-VMGpuPartitionDriver.ps1 -VMName VMName -GPUName "AUTO"
Скрипт скопирует драйвера видеокарты с хоста в ВМ.
Теперь осталось настроить ВМ и пробросить в нее GPU:
Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb
Add-VMGpuPartitionAdapter -VMName VMName
Если вы обновили драйвера видеокарты на хосте Hyper-V, нужно обновить их в ВМ:
.\Update-VMGpuPartitionDriver.ps1 -VMName VM Name -GPUName "AUTO"
В общем-то не удивительно, что тема набирает популярность — задача иметь линух на хосте и полноценную игровую машину на винде гостем (или как здесь — винда в винде) для того, чтобы разделить мух и котлет все интереснее, тем более, что видеокарты все мощнее.
Вот только производители видеокарт тоже об этом знают и нифига этому не рады Да и производители гиперов тоже не сидят на месте.
Чтоюы видюха могла полностью использоваться виртуалкой — ее нужно просунуть туда целиком, как устрйоство, чтобы виртуалка ее нашла и поставила дрова. Мне известна только одна комбинация железа, гипера и оси, где по неподтвержденным данным этот финт ушами канает — видюха от ATI (НЕ NVidia!), гипер KVM, линух хостом, винда гостем.
Какое-то время я пробовал сам, но нифига не преуспел — в KVM видюха пробрасывается, но винда нифига не запускает дрова (потому что NVidia противодействует этому. Намеренно.) в ESXi дрова ставятся, но как «переключить» на нее «монитор» я так и не понял. В Hyper-V же я не уверен, что даже пробросить удастся.
Там статья по ссылке выше. Ее конечно стоит прочитать, но исключительно для самообразования, потому что автор скромно умолчал, сколько стоит GRID K1/K2 карта. Для справки — GRID K1 — порядка 200 тыс руб, GRID K2 — порядка 400 тыс
Пруф
Как ни крути, возможности систем виртуализации что до использования ими ресурсов «железа» ограничены, поэтому не стоит удивляться тому, что большая часть графических API не работает в VMware, VirtualBox или Hyper-V. Кстати, именно по этой причине в установленной на виртуальную машину Windows 11 могут быть недоступны такие эффекты как скругление окон.
Ничего личного, только бизнес
Что лежит в основе этих ограничений? В первую очередь политика производителей видеокарт и разработчиков систем виртуализации. Так, для виртуализации графических вычислений компания NVidia предлагает использовать специальные видеокарты GRID K1 и K2, стоимость которых значительно превышает стоимость «обычных» видеокарт. Если NVidia реализует возможность проброса в ВМ недорогих видеокарт, то кто станет покупать топовые?
Предложение от Hyper-V
Тем не менее, кое-что сделать таки можно. В отличие от VMware и VirtualBox, проброс дискретной видеокарты поддерживается системой Hyper-V, хотя опять же и не без ограничений. В ранних версиях Windows 10 для этого использовалась технология RemoteFX, в актуальных сборках Windows 10, а также в Windows 11 это решение не работает, и для задействования ресурсов физической видеокарты нужно использовать сторонние инструменты.
Сразу нужно отметить, что предлагаемое ниже решение имеет ряд ограничений, а именно:
- В Hyper-V допускается использование только Windows 10 20H1 и выше.
- Метод не поддерживается первым поколением виртуальных машин.
- После проброса возможны конфликты при параллельной работе ВМ и WSL.
- Функция создания контрольных точек для виртуальной машины будет отключена.
Если условия вас устраивают, следуйте дальнейшим инструкциям. Для начала убедитесь в возможности подключения видеокарты к Hyper-V, для чего запустите PowerShell от имени администратора и выполните команду Get-VMPartitionableGpu или Get-VMHostPartitionableGpu, если у вас Windows 11. В случае успеха в консоль будет выведен список видеоадаптеров и их свойств.
Затем:
- Скачайте со страницы разработчика github.com/jamesstringerparsec/Easy-GPU-PV архив с готовыми скриптами подключения видеокарты и распакуйте его в удобное расположение.
- Завершив работу виртуальной машины, откройте от имени администратора PowerShell и разрешите командами Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser и Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass выполнение в системе неподписанных сценариев.
- Командой cd путь перейдите в папку с содержимым распакованного архива Easy-GPU-PV-main.zip и выполните команду Update-VMGpuPartitionDriver.ps1 -VMName «NameMyVm» -GPUName «AUTO», где NameMyVm – название вашей виртуальной машины.
В случае успешного выполнения команды вы получите конкретный результат, например, появление ранее недоступных эффектов прозрачности в виртуальной ОС.
Ограничения проброса
Ожидать, что в случае удачного проброса видеокарты в Hyper-V виртуальная система сможет использовать все возможности графики, не стоит. Значительная их часть доступны по-прежнему не будут, в частности недоступными окажутся инструменты панелей управления графикой (NVIDIA или AMD), статистические данные загрузки GPU в Диспетчере задач, не будут работать также программы и функции, использующие Vulkan и некоторые другие популярные графические API.
Загрузка…
Requirements Before You Start
NVIDIA virtual GPU solutions are designed to run on NVIDIA GPUs. Please ensure you have the following before downloading the NVIDIA virtual GPU software evaluation edition:
1
Certified Server
NVIDIA Virtual GPU Certified Servers. See a complete list of certified systems.
2
Supported GPU
Supported NVIDIA GPUs: NVIDIA A10, A16, A40, A100, T4, RTX 8000, RTX 6000, V100S, V100, P100, P40, P6, P4, M60.
3
Virtualization Software
VMware, Citrix, Red Hat, or Nutanix.
The Evaluation Includes
The 90-day trial includes everything you need to successfully evaluate virtual GPU software.
128 CCU’s of vWS
The evaluation license provides access to 128 CCU’s of the NVIDIA RTX Virtual Workstation (vWS) edition for up to 90 days.
Any Software Edition
Management Pack
Evaluation license also provides access to the NVIDIA Virtual GPU Management Pack for VMware vSphere deployments with vRealize Operations.
If you have any additional questions, please reach out to your NVIDIA certified partner or contact us.
Start Your Trial Now
Frequently Asked Questions
-
Can I extend my 90-day trial license?
The trial license is intended to a one-time, 90-day license. For enterprises needing a longer evaluation time, we recommend contacting one of our expert partners to begin a proof of concept. Find an NVIDIA Partner Network (NPN) GPU Virtualization Partner at www.nvidia.com/object/vgpu-software-partners.html.
For additional support, please contact your NVIDIA sales representative or fill out the form below to request a second 90-day eval license.
-
How do I know if my 90-day trial has ended?
If your trial has ended, you’ll receive a message that the system failed to acquire a license. The 90-day trial period begins when your Product Activation Key has been redeemed in the licensing portal. The beginning and end date of the evaluation is listed in the portal, which can be accessed at nvid.nvidia.com/dashboard/. Other options for viewing license properties can be found in the License Server UI.