Hyper-V GPU Passthrough: Una guía esencial para principiantes

En algunos escenarios, es posible que necesite utilizar una tarjeta de vídeo (que contiene una GPU), también llamada adaptador gráfico o adaptador de pantalla, en una máquina virtual. Sin embargo, utilizar una tarjeta de vídeo emulada en una máquina virtual Hyper-V puede no ser suficiente para tareas que utilicen OpenGL, Direct3D, CUDA y otras funciones relacionadas con el hardware. Afortunadamente, es posible conectar una tarjeta de vídeo física a una máquina virtual en un host Hyper-V utilizando la función Hyper-V GPU passthrough.

NAKIVO for Hyper-V Backup

NAKIVO for Hyper-V Backup

Agentless, application-aware backups for Hyper-V. Anti-ransomware protection, instant VM boot from backup, other virtual/physical platform support and more.

¿Qué es el GPU Passthrough?

GPU Passthrough es una función que permite conectar una tarjeta de vídeo física instalada en un host físico a una máquina virtual sin emulación. Como resultado, la máquina virtual puede utilizar directamente un adaptador gráfico físico.

Por defecto, las máquinas virtuales Hyper-V utilizan una tarjeta gráfica emulada, que depende de la CPU del host Hyper-V. Sin embargo, este enfoque sólo permite a los usuarios trabajar con las tareas más básicas, pero no es suficiente para tareas que requieren un mayor rendimiento gráfico.

NOTA: Una GPU puede estar integrada en el chipset de una placa base o en una unidad central de procesamiento (CPU), también llamada procesador (para las últimas generaciones de procesadores Intel y arquitectura relacionada). Una GPU de alto rendimiento es un chip de una tarjeta de vídeo discreta que se conecta a una placa base mediante la interfaz PCI Express (PCIe).

Principales ventajas del paso de GPU en Hyper-V

Una tarjeta gráfica física conectada a través de GPU passthrough en una máquina virtual Hyper-V puede ser utilizada por usuarios domésticos, desarrolladores, diseñadores y otros en escenarios específicos. Los escenarios más comunes son:

  • Ejecución de aplicaciones con cargas de trabajo intensivas en gráficos (diseño gráfico, modelado 3D, dibujo en AutoCAD, ingeniería y cálculos, diseño y desarrollo de juegos, etc.). Uso de renderizado acelerado por hardware.
  • Ejecución de juegos con funciones de aceleración por hardware. Es posible que algunos juegos no funcionen sin una tarjeta de vídeo física.
  • Ejecución de aplicaciones de aprendizaje automático (ML) e inteligencia artificial (IA) utilizando una GPU.

Las ventajas del modo GPU passthrough son:

  • Mejor rendimiento gráfico con máquinas virtuales que acceden directamente a una tarjeta gráfica para aplicaciones o juegos de uso intensivo de gráficos. La reproducción de vídeo es más fluida. Dispone de gráficos acelerados por hardware y las últimas API.
  • Utilización flexible de los recursos de hardware. Uso de un host Hyper-V para varias máquinas virtuales con tareas gráficas intensivas desiguales en casos en los que el uso de estaciones de trabajo dedicadas no es óptimo.
  • Rentabilidad. El paso a través de la GPU puede ahorrar costes en algunos escenarios, especialmente en términos de utilización de recursos de hardware. Esta función también puede utilizarse para una infraestructura de escritorio virtual (VDI).
  • Seguridad. Las ventajas de seguridad son similares a las de la virtualización en general. Si las vulnerabilidades se aprovechan en máquinas virtuales, éstas se ejecutan en un entorno aislado y hay más posibilidades de mitigar el problema. En caso de problemas graves, es posible restaurar rápidamente las máquinas virtuales a partir de una copia de seguridad.

Requisitos

Para configurar una VM con GPU passthrough en un host Hyper-V, debe cumplir ciertos requisitos de hardware y software. No todas las tarjetas de vídeo pueden utilizar esta función.

Especificaciones de hardware para GPU Passthrough

  • La CPU del host Hyper-V debe ser compatible con las funciones de virtualización Intel-VT o AMD-V. La función de virtualización adecuada debe estar habilitada para su procesador en su host Hyper-V en la configuración UEFI/BIOS.
  • La unidad de gestión de memoria de entrada-salida (IOMMU) debe ser compatible con la CPU en el host Hyper-V. Esta función es necesaria para el paso a través de PCI, incluyendo el paso a través de tarjeta de vídeo o GPU.
  • Una tarjeta de vídeo con una GPU compatible con tecnologías de virtualización de GPU, como NVIDIA GRID o AMD MxGPU (GPU multiusuario). Estas tecnologías son específicas de cada proveedor. El uso de hardware de clase servidor mejora las tasas de éxito. Los dispositivos antiguos que utilizan interrupciones PCI (INTx) no son compatibles.
  • SR-IOV (Single Root Input/Output Virtualization) debe ser soportado y habilitado para evitar errores.

Requisitos de software para Hyper-V Passthrough

  • Windows Server 2016 o versión posterior de Windows Server (preferido).
  • Windows 10 o Windows 11
  • La función Hyper-V debe estar activada en Windows.
  • Deben instalarse los controladores gráficos más recientes en el host Hyper-V y en el invitado VM que utilice GPU passthrough.
  • Sólo deben utilizarse máquinas virtuales Hyper-V de Generación 2 para el paso de GPU con DDA.

Limitaciones y configuraciones no compatibles

Tenga en cuenta las configuraciones que no son compatibles con el uso de GPU passthrough:

  • Las máquinas virtuales que utilizan Hyper-V Dynamic Memory, es decir, la función para asignar y desasignar RAM para una máquina virtual según sea necesario, no pueden utilizar GPU passthrough.
  • GPU Passthrough solo está disponible en las ediciones más altas de Windows, como Windows Server 2019 Datacenter.
  • Si Windows Subsystem para Linux se implementa en el host Hyper-V, puede producirse un error con el código 43 en la máquina virtual.
  • Las funciones de clustering, como la alta disponibilidad y la migración en vivo de máquinas virtuales, no son compatibles.
  • Guardar y restaurar con puntos de control VM no son compatibles.

Configuración del paso de GPU: Lo que hay que saber

Debe tener en cuenta que la configuración de la GPU passthrough puede ser más compleja que la mayoría de las tareas habituales de configuración de máquinas virtuales. La escalabilidad de los entornos virtuales cuando se utiliza GPU passthrough no es tan alta cuando se utiliza el método por defecto para la emulación de la tarjeta de vídeo. No es posible migrar VMs utilizando la función GPU passthrough entre hosts Hyper-V porque estas VMs están vinculadas a adaptadores gráficos físicos instalados en el host.

Hasta Windows Server 2016, la función RemoteFX se utilizaba para el paso de GPU a máquinas virtuales. Después de Windows Server 2019 y Windows 10 build 1809, la función RemoteFX ya no está disponible, y solo se puede utilizar Hyper-V Direct Device Assignment (DDA) para pasar a través de una tarjeta gráfica, de forma similar a cualquier otro dispositivo PCI/PCIe, incluidos los dispositivos de almacenamiento NVMe. DDA es el análogo de VMware PCI passthrough.

RemoteFX es una extensión para RDP (Microsoft Remote Display Protocol) utilizada para conectar dispositivos USB (que están conectados al host) a una máquina virtual. RemoteFX vGPU se utilizó para las tarjetas gráficas en consecuencia. RemoteFX permitía compartir una GPU para varias máquinas virtuales, lo que no es posible con la asignación de dispositivos discretos. RemoteFX también limitó la cantidad de memoria de vídeo dedicada a 1 GB para cada máquina virtual y el máximo de FPS es 30. En el caso de DDA, no existe tal limitación de RAM de vídeo, y los FPS pueden fijarse en 60.

Si utiliza Windows Server 2016 Datacenter u otras versiones y ediciones de Windows que solían admitir RemoteFX, puede instalar una actualización de Windows para eliminar por completo esta función de Hyper-V y evitar posibles vulnerabilidades de seguridad. La versión oficial de Microsoft es que RemoteFX se eliminó para evitar vulnerabilidades arquitectónicas de Hyper-V. RemoteFX resultaba atractivo para entornos virtuales de alta densidad cuando no era posible asignar una tarjeta gráfica física dedicada a cada máquina virtual. Tenga en cuenta que DDA funciona en versiones de Windows Server (no en versiones cliente, como Windows 10).

La partición de la GPU en PowerShell puede ser una solución en las versiones cliente de Windows, pero copiar los controladores de vídeo del SO anfitrión a un SO invitado (que debe ser el mismo que en el SO anfitrión) es complicado. Deben utilizarse máquinas virtuales de generación 2. En este caso, la tarjeta gráfica debe ser compatible con la partición de GPU.

Configuración de GPU Passthrough en Hyper-V

Siga los pasos que se indican a continuación para preparar el entorno y configurar el paso de GPU Hyper-V.

Preparación para configurar el paso de GPU

  1. Asegúrese de que su hardware y software son compatibles con la virtualización de GPU.
  2. Habilite las funciones de virtualización Intel VT-d o AMD-V para su CPU en UEFI/BIOS en el host Hyper-V.
  3. Activar IOMMU. La configuración de IOMMU puede activarse de diferentes maneras en diferentes placas base con diferentes versiones de UEFI/BIOS. A veces, este ajuste puede encontrarse en la configuración del Puente Norte. O se puede activar IOMMU cuando se activa Intel VT-d o AMD-V. Compruebe la función llamada Memory Remap en UEFI/BIOS.

    Puede comprobar si IOMMU está habilitado en un equipo host Hyper-V con el comando PowerShell (como Administrador):

    (Get-VMHost).IovSupport; (Get-VMHost).IovSupportReasons

    Verdadero: activado; Falso: desactivado.

  4. Elimine todos los puntos de control de la máquina virtual que va a configurar utilizando el paso de GPU.

    Si los puntos de control automáticos están activados para la máquina virtual, puede desactivarlos con el comando PowerShell:

    Set-VM -Name VMName -AutomaticStopAction TurnOff

Paso de GPU en Windows Server

  1. Para configurar la caché y los límites del espacio MIMO de 32 bits (3 GB para sistemas operativos de 32 bits), ejecute este comando PowerShell como administrador:

    Set-VM -Name VMName -GuestControlledCacheTypes $True -LowMemoryMappedIoSpace 3Gb -HighMemoryMappedIoSpace 33280Mb

    También puede utilizar tres comandos distintos:

    Set-VM -GuestControlledCacheTypes $true -VMName YourVMName

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName YourVMName

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName YourVMName

    Estos límites definen la memoria que hace que el dispositivo sea accesible para la máquina virtual. Puedes utilizar un script de perfil de máquina de Microsoft para establecer los valores límite MIMO más precisos. Los valores óptimos pueden ser diferentes para distintos adaptadores de vídeo. Si recibes un mensaje de que no hay suficientes recursos al iniciar una máquina virtual, debes apagar la máquina virtual y modificar estos valores. Se utilizan 33280 MB para un espacio MIMO superior a 32 bits.

  2. Compruebe la dirección física del dispositivo PCI Express (la ruta de ubicación del dispositivo), que es la tarjeta gráfica necesaria que desea pasar.

    Se puede hacer en el Administrador de dispositivos. Puede abrir el Administrador de dispositivos ejecutando el comando devmgmt.msc . En el Administrador de dispositivos:

    • Haga clic con el botón derecho en el adaptador de pantalla necesario en la sección Adaptadores de pantalla y pulse Propiedades en el menú contextual.
    • Seleccione la pestaña Detalles en la ventana de propiedades del adaptador.
    • Seleccione la propiedad Rutas de ubicación en el menú desplegable y copie el valor (los valores pueden ser diferentes para cada ordenador).

      Visualización de la ruta de ubicación de una tarjeta de vídeo

    También puede utilizar PowerShell para identificar la ruta de ubicación de un dispositivo:

    Get-PnpDevice | Where-Object {$_.Present -eq $true} | Where-Object {$_.Class -eq "Display"}|select Name,InstanceId

    y

    Get-PnpDevice -Class Display | ForEach-Object { Write-Output "$($_.FriendlyName) has a device id of $($_.DeviceId) and is located at $($_ | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths | Select-Object -ExpandProperty Data | Where-Object { $_ -like "PCIROOT*" })"; }

    La salida debe contener una cadena como ésta:

    ‘PCIROOT(0)#PCI(0300)#PCI(0000)’

    Identificación de la ruta de ubicación de la tarjeta de vídeo en PowerShell

  3. Desactiva esta tarjeta gráfica en el Administrador de dispositivos. Haga clic con el botón derecho en el adaptador de vídeo y pulse Desactivar dispositivo en el menú contextual.

    Desactivación de una tarjeta de vídeo en el Administrador de dispositivos

  4. Desmontar un adaptador de pantalla desactivado en PowerShell:

    Dismount-VmHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)" -Force

    Dónde:

    -Se requiere forzar cuando no hay instalado un controlador de partición (opcional). No se trata de un controlador para una tarjeta gráfica instalada en un SO invitado. A veces, un proveedor de dispositivos puede proporcionar este controlador de mitigación de seguridad para un dispositivo. Si va a instalar este controlador, debería instalarlo antes de desmontar el dispositivo PCI Express de la partición host.

    La ruta de ubicación utilizada en este comando es sólo para fines ilustrativos, y usted debe utilizar su valor específico.

  5. Ejecute el comando para asignar esta tarjeta de vídeo a una máquina virtual con GPU passthrough vía DDA:

    Add-VMAssignableDevice -VMName VMName -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)"

  6. Encienda la máquina virtual y compruebe si aparece una tarjeta de vídeo física en el Administrador de dispositivos de la máquina virtual de Windows junto con el adaptador de vídeo emulado predeterminado denominado Microsoft Hyper-V video.
  7. Instale los controladores de la tarjeta de vídeo en el sistema operativo invitado de la máquina virtual. Puedes descargar los controladores de vídeo en el sitio web oficial de NVIDIA o AMD.
  8. Si desea desconectar la tarjeta de vídeo de la VM, detenga la VM y utilice el comando en el host:

    Remove-VMAssignableDevice -VMName YourVMName -LocationPath $locationPath

    A continuación, ejecute el comando para conectar la tarjeta de vídeo de nuevo al host Hyper-V:

    Mount-VMHostAssignableDevice -LocationPath $locationPath

Configuración en Windows 10

En las versiones cliente de Windows, como Windows 10 y Windows 11 (a partir de Windows 10 build 1903), el flujo de trabajo para configurar el paso de GPU de Hyper-V es diferente y es posible mediante el método de partición de GPU:

  1. Comprueba si tu tarjeta de vídeo es compatible con el particionado de GPU en Windows 10 con el comando PowerShell:

    Get-VMPartitionableGpu

    En Windows 11, el comando es:

    Get-VMHostPartitionableGpu

  2. Para el paso de la GPU a una VM, se utiliza el cmdlet Add-VMGpuPartitionAdapter . Sin embargo, debe copiar los controladores gráficos de la máquina host Hyper-V a la máquina virtual. Tenga en cuenta que la versión del controlador debe ser la misma. Se puede utilizar un script gratuito Easy-GPU-PV para copiar los controladores, ya que se trata de un proceso complicado. Descargue este script en un archivo ZIP y extraiga el contenido del archivo ZIP a una carpeta del host Hyper-V. Este script puede usar la paravirtualización de GPU utilizando mecanismos usados para Windows Subsystem for Linux (WSL2) y Windows Sandbox.
  3. Abra PowerShell como Administrador y ejecute el comando para permitir la ejecución del script:

    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

  4. Apague la máquina virtual. Ejecute el script desde la carpeta donde se extrajo el script descargado para copiar los controladores gráficos instalados desde el host Hyper-V a la VM e instale los controladores en la VM:

    .\Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO"

  5. Configure la máquina virtual para prepararla para el paso de GPU y la asociación de tarjetas de vídeo:

    Set-VM -VMName VMName -GuestControlledCacheTypes $true -LowMemoryMappedIoSpace 1Gb -HighMemoryMappedIoSpace 32Gb

    Add-VMGpuPartitionAdapter -VMName YourVMName

    • Si actualiza los controladores gráficos en un host Hyper-V, debe actualizar también los controladores gráficos en la máquina virtual. La máquina virtual debe estar apagada.

      .\Update-VMGpuPartitionDriver.ps1 -VMName YourVMName -GPUName "AUTO"

    • Si necesita eliminar una tarjeta de vídeo de la VM, puede utilizar el comando:

      Remove-VMGpuPartitionAdapter -VMName "YourVMName"

Si la tarjeta de vídeo se ha conectado correctamente a la máquina virtual, debería ver el adaptador de pantalla correspondiente en el Administrador de dispositivos de la máquina virtual. También verás efectos visuales para el tema de escritorio invitado de Windows, como transparencia, etc.

Tenga en cuenta que algunos juegos y aplicaciones pueden no ejecutarse incluso después de configurar el paso de GPU. Esto puede ocurrir cuando una aplicación inicia forzosamente una comprobación de compatibilidad de la tarjeta gráfica. La información sobre la tarjeta de vídeo conectada en el SO huésped es diferente de la información en el SO anfitrión. Algunas aplicaciones pueden realizar la comprobación de «ejecución en una máquina virtual».

Si las aplicaciones que utilizan OpenGL no funcionan en la VM, la instalación de OpenGL Compatibility Pack puede ayudar en algunos casos.

Cuando se utiliza el método de partición de GPU para Windows 10 y Windows 11, el modelo de adaptador de vídeo que se muestra en el Administrador de dispositivos difiere del modelo de adaptador gráfico físico que se muestra en el host Hyper-V. Puede ver un controlador especial de Microsoft para este dispositivo. Las herramientas específicas del fabricante, como el Panel de Control de NVIDIA (o el Panel de Control de AMD), no están disponibles en la VM.

Otro problema que puede encontrar ocurre si cierra una conexión RDP sin desconectarse de una sesión RDP. En este caso, se puede desconectar toda la memoria de la GPU, y todas las aplicaciones que utilicen la GPU le notificarán acerca de la memoria de vídeo inaccesible. Estas aplicaciones dejarán de funcionar en este caso, y la reconexión a través de RDP no solucionará el problema. Será necesario reiniciar las aplicaciones que utilicen la GPU.

Resolución de problemas de GPU Passthrough

Si configuró Hyper-V GPU passthrough y conectó una tarjeta de video a una VM, pero la tarjeta de video no funciona correctamente, verifique lo siguiente:

  • Asegúrese de que están instalados los controladores gráficos más recientes y de que no hay errores relacionados con los controladores. Abra el Administrador de dispositivos y compruebe el estado del dispositivo y del controlador. Debe instalar los controladores descargados de los sitios web oficiales de los proveedores (NVIDIA, AMD, Intel) y no mediante Windows Update.
  • Asegúrese de que ha asignado suficiente espacio MIMO para su máquina virtual.
  • Comprueba que la configuración GPU passthrough es compatible con el proveedor de tu adaptador gráfico. No todas las tarjetas de vídeo de la serie del cliente admiten esta función. Los proveedores pueden preferir habilitar el paso de GPU sólo para las tarjetas de vídeo de gama alta.
  • Una aplicación que se ejecuta dentro de una máquina virtual debe ser compatible con su tarjeta de vídeo y sus controladores para que funcione correctamente.
  • Habilite una política de grupo para utilizar la GPU cuando se conecte a través de Escritorio remoto a una máquina virtual:

    Computer Configuration\Administrator Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Use hardware graphics adapters for all Remote Desktop Services sessions

    Establezca el valor de la directiva de grupo en Activado.

  • Si aparece un error del tipo «La operación ha fallado porque no se ha encontrado el objeto» o Error 12, intente añadir las claves del registro en

    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\HyperV

    con los valores:

    RequireSecureDeviceAssignment = 0 (REG_DWORD)

    RequireSupportedDeviceAssignment = 0 (REG_DWORD)

    Puede establecer estos valores con comandos PowerShell:

    Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\HyperV" -Name "RequireSecureDeviceAssignment" -Type DWORD -Value 0 -Force

    Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\HyperV" -Name "RequireSupportedDeviceAssignment" -Type DWORD -Value 0 -Force

  • Desactivar las comprobaciones del hipervisor para los controladores gráficos dentro de la máquina virtual. Esta configuración puede realizarse en Enterprise Windows Driver Kit (WDK).
    • Monte el archivo ISO del WDK en la unidad de DVD virtual de la máquina virtual.
    • Ejecute E:\LaunchBuildEnv.cmd (donde E: es una unidad de DVD virtual de la VM) y, a continuación, ejecute el comando powershell.
    • Vaya al directorio donde se encuentra el script Remove-HypervisorChecks.ps1 .
    • Ejecute el comando para eliminar las comprobaciones del hipervisor para un controlador de vídeo (en un ejemplo de NVIDIA):

      ./Remove-HypervisorChecks.ps1 -Nvidia -DriverPath "C:\path-to-driver\package.exe"

    • Espere hasta que finalice la ejecución del script.
    • Copie el controlador preparado (un archivo patched-driver.zip ) en la máquina virtual, active el modo de prueba en la máquina virtual e instale el controlador en un sistema operativo invitado.
  • Si se produce el Error 43, asegúrese de que la GPU y el bus PCI de sonido (las tarjetas de vídeo NVIDIA también pueden tener funciones de sonido) se mantienen juntos cuando se utiliza el paso de GPU de la máquina virtual.
  • Si aparece el siguiente error al ejecutar el comando:

    Update-VMGpuPartitionDriver.ps1 -VMName "YourVMName" -GPUName "AUTO"

    Este error puede deberse a la existencia de varias particiones (volúmenes) en un disco duro virtual. Intente establecer el atributo oculto para las particiones que no sean del sistema (OS) o elimine temporalmente estas particiones después de copiar los datos necesarios. Una opción alternativa es establecer la partición del sistema (SO) necesaria explícitamente en el script o comando PowerShell.

Conclusión

El uso de una máquina virtual con GPU passthrough en un host Hyper-V puede ser la solución óptima en algunos casos, pero hay que tener en cuenta las limitaciones. Para utilizar una tarjeta de vídeo discreta en máquinas virtuales, generalmente se prefiere hardware de nivel de servidor y sistemas operativos Windows Server. Compruebe si el software y el hardware son compatibles antes de iniciar la configuración. No olvide realizar copias de seguridad de las máquinas virtuales Hyper-V para evitar perder datos y tiempo si algo sale mal al configurar una tarjeta de vídeo para máquinas virtuales.

Try NAKIVO Backup & Replication

Try NAKIVO Backup & Replication

Get a free trial to explore all the solution’s data protection capabilities. 15 days for free. Zero feature or capacity limitations. No credit card required.

Artículos recomendados