Cómo asignar una GPU física a una máquina virtual Hyper-V

Cómo habilitar el paso a través de GPU o el uso compartido con máquinas virtuales de Hyper-V

El tema del paso a través de la GPU y las máquinas virtuales puede volverse muy confuso rápidamente. A veces, sobre todo si se ejecuta algo más pesado o aplicaciones específicas, se desea asignar directamente esa GPU a una máquina virtual. En Windows Server, DDA lo hace prácticamente posible, aunque no es muy sencillo. Y si se usa Windows 10 u 11, la tarea es algo limitada, pero aún existen opciones como el particionamiento de la GPU.¿Lo complicado? Configurar todo correctamente, especialmente las rutas de hardware, los controladores y la configuración de la máquina virtual. Aquí tienes algunos métodos probados para que la GPU funcione sin problemas en tu entorno Hyper-V. No prometemos que sea perfecto en todas las configuraciones, pero es un buen comienzo.

Habilitar el paso directo de GPU a la máquina virtual Hyper-V en Windows Server

Deshabilitar las instantáneas automáticas y ajustar algunas configuraciones de la máquina virtual puede ayudarte a transferir una GPU PCIe directamente a tu máquina virtual. Esto solo funciona en Windows Server con la función Hyper-V, no en Windows 10 ni 11.Por qué es útil : Transferir la GPU directamente a la máquina virtual puede mejorar drásticamente el rendimiento gráfico si todo está correctamente alineado. Normalmente, verás que la GPU aparece como un nuevo dispositivo en el administrador de dispositivos de la máquina virtual, y puedes instalar controladores allí.Cuándo usar esto : Si alojas una máquina virtual que necesita mucha potencia gráfica (por ejemplo, para juegos, renderizado o tareas CUDA) y estás en Windows Server.Espera ver : Tu GPU aparece en el administrador de dispositivos de la máquina virtual como un adaptador de pantalla, junto con el controlador de pantalla de Hyper-V. Ten en cuenta que la máquina virtual necesita controladores gráficos preinstalados para la GPU que estás transfiriendo, o podría no funcionar correctamente.—

Cambiar la configuración de la máquina virtual

Esto forma parte del proceso donde Windows a veces presenta problemas debido a las instantáneas automáticas o los límites de caché. Primero, desactive esas instantáneas para mantener la configuración limpia:

Set-VM -Name munGPUVM1 -AutomaticStopAction TurnOff

A continuación, ajuste la configuración de caché y memoria (a veces es necesario para evitar conflictos):

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

Encuentre la ruta del dispositivo PCIe a la GPU

Esta parte es la más molesta. Necesitas encontrar la ruta de la ranura PCIe de tu GPU.¿Una opción? Abre el Administrador de dispositivos, ve a las propiedades de la GPU en Detalles, marca Rutas de ubicación y copia la línea que empieza por PCIROOT. O, si eres perezoso como yo, puedes ejecutar PowerShell:

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

Esto debería darte una lista de dispositivos de visualización con sus ID de instancia. Selecciona el que coincida con tu GPU.—

Separe la tarjeta y pásela a la máquina virtual

Para deshabilitar la tarjeta en el host (para que esté lista para ser asignada a una VM), ejecute:

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

Reemplace esa ruta con la que obtuvo anteriormente. Luego, para asignarla a la máquina virtual:

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

Encienda la máquina virtual y compruebe si la GPU aparece en el Administrador de dispositivos, en Adaptadores de pantalla. A veces, podría ser necesario reiniciar la máquina virtual o incluso el host después de este paso. Además, recuerde que la máquina virtual necesita tener instalados previamente los controladores correctos; de lo contrario, aparecerá como un dispositivo desconocido.—

Para deshacer o reasignar la GPU

Si las cosas salen mal o quieres devolver la GPU al host, simplemente ejecuta:

Remove-VMAssignableDevice -VMName munGPUVM1 -LocationPath $locationPath Y luego: 
Mount-VMHostAssignableDevice -LocationPath $locationPath

---

Compartir la GPU en Windows 10 o 11 con Particionado de GPU (GPU-P)

Si usas Windows 10/11, la compatibilidad con la transferencia directa de GPU es limitada. Sin embargo, el particionado de GPU (GPU-P) es una buena alternativa. Te permite dividir tu GPU en bloques para que una máquina virtual pueda usar parte de ella, como compartir una pizza.Por qué ayuda : depende menos del hardware que el paso completo y funciona con controladores compatibles en Windows 10/11.Cuándo usar esto : si solo desea un rendimiento de GPU decente en una máquina virtual sin modificar las rutas PCIe. Para comprobar si su GPU es compatible con GPU-P, ejecute desde PowerShell:

Get-VMPartitionableGpu

(o en Win11)

Get-VMHostPartitionableGpu

Si ves tu GPU en la lista, ¡buenas noticias! Ahora, para asignar particiones:

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

Luego, agregue el adaptador de partición de GPU:

Add-VMGpuPartitionAdapter -VMName myVM1

¿La parte complicada? Necesitarás el controlador instalado tanto en el host como en la máquina virtual. El script Easy-GPU-PV ayuda a copiar los controladores a la máquina virtual (porque, claro, Windows tiene que complicarlo más de lo necesario).Ejecute el script de actualización del controlador:

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

Y luego, en la configuración de la máquina virtual, asigne la GPU a través de la administración de PowerShell o Hyper-V.---

Resumen

Conseguir que la transferencia o el uso compartido de GPU funcionen a la perfección no siempre es sencillo. Depende en gran medida del hardware, la compatibilidad de los controladores y la versión de Windows que se esté ejecutando. Pero seguir estos pasos, especialmente verificar las rutas de los dispositivos y las estrategias de los controladores, puede marcar una gran diferencia. En algunas configuraciones, basta con reiniciar un par de veces o ejecutar los comandos en un orden determinado. No sé por qué funciona, pero en una configuración, esto simplemente funcionó tras reiniciar. Ojalá esto le ahorre algunas horas a alguien. Solo recuerda que la paciencia y el manejo cuidadoso del conductor son clave.