Déployer des appareils graphiques à l’aide de l’attribution d’appareils en mode discret

S’applique à : Windows Server 2022, Windows Server 2019, Microsoft Hyper-V Server 2019, Windows Server 2016, Microsoft Hyper-V Server 2016

À compter de Windows Server 2016, vous pouvez utiliser l’attribution d’appareil discrète (DDA) pour transmettre un appareil PCIe entier à une machine virtuelle (VM). Cela permet un accès performant à des appareils tels que le stockage NVMe ou les cartes graphiques à partir d’une machine virtuelle tout en étant en mesure d’appliquer des pilotes natifs des appareils. Pour plus d’informations sur les appareils compatibles et les implications de sécurité possibles, consultez Planifier le déploiement d’appareils à l’aide de l’attribution d’appareils en mode discret.

Important

Bien qu’il ne soit pas nécessaire, si la virtualisation d’E/S racine unique (SR-IOV) n’est pas activée ou prise en charge, vous pouvez rencontrer des problèmes lorsque vous utilisez DDA pour déployer des appareils graphiques.

Il existe trois étapes pour utiliser un appareil avec DDA :

  1. Configurer la machine virtuelle pour DDA
  2. Démonter l’appareil de la partition hôte
  3. Affecter l’appareil à la machine virtuelle invitée

Vous pouvez exécuter toutes les commandes sur l’hôte dans une console PowerShell de Windows en tant qu’administrateur.

Configurer la machine virtuelle pour DDA

La première étape de la solution consiste à traiter les restrictions DDA aux machines virtuelles. Configurez la Automatic Stop Action machine virtuelle pour activer TurnOff avec l’applet de commande PowerShell suivante :

Set-VM -Name VMName -AutomaticStopAction TurnOff

Préparation des machines virtuelles pour les appareils graphiques

Certains matériels fonctionnent mieux si la machine virtuelle est configurée d’une certaine manière. Pour plus d’informations sur la nécessité des configurations suivantes pour votre matériel, contactez le fournisseur de matériel. Pour plus d’informations, consultez Planifier le déploiement d’appareils à l’aide de l’attribution d’appareils en mode discret et sur ce billet de blog.

  1. Activez la combinaison d’écriture sur l’UC à l’aide de l’applet de commande suivante :

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configurez l’espace MMIO 32 bits à l’aide de l’applet de commande suivante :

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Configurez un espace MMIO supérieur à 32 bits à l’aide de l’applet de commande suivante :

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Conseil

    Les valeurs d’espace MMIO affichées sont des valeurs raisonnables à définir pour expérimenter avec un seul GPU. Si, après avoir démarré la machine virtuelle, l’appareil signale une erreur liée à des ressources insuffisantes, vous devrez probablement modifier ces valeurs. Pour plus d’informations sur la façon de calculer précisément les exigences MMIO, consultez Planifier le déploiement d’appareils à l’aide d’une attribution d’appareils en mode discret .

Démonter l’appareil de la partition hôte

Suivez les instructions de cette section pour démonter l’appareil de la partition hôte.

Installer le pilote de partitionnement (facultatif)

Le DDA permet aux fournisseurs de matériel de fournir un pilote d’atténuation de sécurité avec leurs appareils. Ce pilote n’est pas identique au pilote de périphérique installé dans la machine virtuelle invitée. C’est à la discrétion du fournisseur de matériel de fournir ce pilote. Toutefois, s’ils fournissent un pilote, installez-le avant de démonter l’appareil à partir de la partition hôte. Contactez le fournisseur de matériel pour vérifier s’ils possèdent un pilote d’atténuation.

Si aucun pilote de partitionnement n’est fourni, lors du démontage, vous devez utiliser l’option -Force pour contourner l’avertissement de sécurité. Pour plus d’informations sur les implications en matière de sécurité, consultez Planifier le déploiement d’appareils à l’aide de l’attribution d’appareils en mode discret.

Localiser le chemin d’emplacement de l’appareil

Le chemin d’accès à l’emplacement PCI est nécessaire pour démonter et monter l’appareil à partir de l’hôte. Un exemple de chemin d’accès à l’emplacement ressemble à ce qui suit : PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000). Pour plus d’informations sur la localisation du chemin d’accès à l’emplacement, consultez Planifier le déploiement d’appareils à l’aide d’une attribution d’appareils en mode discret.

Désactivez l’appareil

Utilisez le Gestionnaire de périphériques ou PowerShell pour vous assurer que l’appareil est désactivé .

Démonter l’appareil

Selon que le fournisseur a fourni un pilote d’atténuation, vous devez utiliser l’option -Force ou non, comme indiqué ici :

  • Si un pilote d’atténuation a été installé, utilisez l’applet de commande suivante :

    Dismount-VMHostAssignableDevice -LocationPath $locationPath
    
  • Si aucun pilote d’atténuation n’a pas été installé, utilisez l’applet de commande suivante :

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Attribuer l’appareil à la machine virtuelle invitée

La dernière étape consiste à indiquer à Hyper-V qu’une machine virtuelle doit avoir accès à l’appareil. Spécifier le chemin d’accès à l’emplacement et le nom de la machine virtuelle.

Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName

Effectuer des tâches sur la machine virtuelle

Une fois qu’un appareil est monté avec succès dans une machine virtuelle, vous pouvez désormais démarrer cette machine virtuelle et interagir avec l’appareil comme si vous étiez un système nu. Vous pouvez désormais installer les pilotes du fournisseur de matériel dans la machine virtuelle et les applications seront en mesure de voir le matériel. Vous pouvez vérifier cela en ouvrant le gestionnaire de périphériques dans la machine virtuelle invitée et vérifier que le matériel s’affiche.

Supprimer un appareil et le retourner à l’hôte

Si vous souhaitez rétablir l’état d’origine de l’appareil, vous devez arrêter la machine virtuelle et exécuter cette commande :

# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath

Vous pouvez ensuite réactiver l’appareil dans le gestionnaire de périphériques et le système d’exploitation hôte sera en mesure d’interagir à nouveau avec l’appareil.

Monter un GPU sur une machine virtuelle

Cet exemple démontre comment utiliser PowerShell pour configurer une machine virtuelle nommée ddatest1 afin de prendre le premier GPU disponible du fabricant NVIDIA et de l’attribuer à la machine virtuelle.

# Configure the VM for a Discrete Device Assignment
$vm = "ddatest1"
# Set automatic stop action to TurnOff
Set-VM -Name $vm -AutomaticStopAction TurnOff
# Enable Write-Combining on the CPU
Set-VM -GuestControlledCacheTypes $true -VMName $vm
# Configure 32 bit MMIO space
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
# Configure Greater than 32 bit MMIO space
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm

# Find the Location Path and disable the Device
# Enumerate all PNP Devices on the system
$pnpdevs = Get-PnpDevice -presentOnly
# Select only those devices that are Display devices manufactured by NVIDIA
$gpudevs = $pnpdevs | Where-Object {$_.Class -like "Display" -and $_.Manufacturer -like "NVIDIA"}
# Select the location path of the first device that's available to be dismounted by the host.
$locationPath = ($gpudevs | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths).data[0]
# Disable the PNP Device
Disable-PnpDevice -InstanceId $gpudevs[0].InstanceId

# Dismount the Device from the Host
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath

# Assign the device to the guest VM.
Add-VMAssignableDevice -LocationPath $locationPath -VMName $vm

Résoudre les problèmes liés au montage d’un GPU

Si vous avez passé un GPU à une machine virtuelle, mais que le bureau à distance ou une application ne reconnaît pas le GPU, vérifiez les problèmes courants suivants :

  • Vérifiez que vous avez installé la version la plus récente du pilote pris en charge par le fournisseur du GPU et que le pilote ne signale pas d’erreurs. Pour ce faire, vérifiez l’état de l’appareil dans gestionnaire de périphériques.

  • Assurez-vous que votre appareil dispose d’un espace MMIO suffisant alloué au sein de la machine virtuelle. Pour plus d’informations, consultez Espace MMIO.

  • Vérifiez que vous utilisez un GPU que le fournisseur prend en charge dans cette configuration. Par exemple, certains fournisseurs empêchent leurs cartes de consommation de fonctionner lorsqu’elles sont passées à une machine virtuelle.

  • Assurez-vous que l’application prend en charge l’exécution à l’intérieur d’une machine virtuelle et que l’application prend en charge à la fois le GPU et ses pilotes associés. Certaines applications ont une liste d’autorisation de GPUs et d’environnements.

  • Si vous utilisez le rôle Hôte de session Bureau à distance ou Windows Multipoint Services sur l’invité, vous devez obligatoirement vous assurer qu’une entrée de stratégie de groupe spécifique est définie pour autoriser l’utilisation du GPU par défaut. Utilisez un objet de stratégie de groupe appliqué à l’invité (ou à l’éditeur de stratégie de groupe local sur l’invité) pour accéder à l’élément de stratégie de groupe suivant :

    Configuration ordinateur\Modèles d’administrateur\Composants Windows\Services Bureau à distance\Hôte de session Bureau à distance\Environnement de session à distance\Utilisation des cartes graphiques matérielles pour toutes les sessions des services Bureau à distance .

    Définissez la stratégie de groupe sur Activé, puis redémarrez la machine virtuelle une fois la stratégie appliquée.