Partager via


Déployer des appareils graphiques à l’aide de l’attribution d’appareils discrets

Découvrez comment utiliser l’attribution d’appareils discrets (DDA) pour transmettre un appareil PCIe entier à une machine virtuelle avec PowerShell. Cela permet un accès hautes performances aux appareils tels que le stockage NVMe ou les cartes graphiques à partir d’une machine virtuelle tout en étant en mesure d’appliquer les pilotes natifs de l’appareil. Pour plus d’informations sur les appareils qui fonctionnent et les implications de sécurité possibles, consultez Planifier le déploiement d’appareils à l’aide de l’affectation d’appareils discrets.

Cet article vous guide tout au long des étapes d’utilisation d’un appareil avec DDA :

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

Conditions préalables

Avant de pouvoir utiliser DDA pour déployer des appareils graphiques, vous devez disposer des éléments suivants.

  • Un hôte Hyper-V exécutant Windows Server 2016 ou version ultérieure.

  • Une machine virtuelle exécutant l’un des systèmes d’exploitation suivants :

    • Windows Server 2016 ou version ultérieure.

    • Windows 10 ou version ultérieure.

  • Passez en revue le plan de déploiement d’appareils à l’aide de l’affectation d’appareils discrets pour vous assurer que votre matériel est compatible avec DDA.

    • Exécutez le SurveyDDA.ps1. Script PowerShell pour identifier si le serveur est configuré correctement. Le script affiche également quels appareils peuvent être transmis en utilisant l’assignation d’appareil discrète.
  • Droits d’administration sur l’hôte Hyper-V.

  • (Facultatif) Bien qu’elle ne soit pas obligatoire, 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.

Configurer la machine virtuelle pour DDA

La première étape de la solution consiste à traiter les restrictions DDA aux machines virtuelles.

  1. Connectez-vous à l’hôte Hyper-V en tant qu’administrateur.

  2. Ouvrez une invite PowerShell avec élévation de privilèges.

  3. 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’affectation d’appareils discrets et sur ce billet de blog.

  1. Activez Write-Combining sur l’UC à l’aide de la commande suivante :

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Configurez l’espace d’E/S mappé en mémoire 32 bits (MMIO) à 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 / Astuce

    Les valeurs d’espace MMIO indiquées sont des valeurs raisonnables à définir pour l’expérimentation d’un seul GPU. Si, après avoir démarré la machine virtuelle, l’appareil signale une erreur relative à 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’appareil discrète.

Démonter l’appareil à partir 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)

DDA permet aux fournisseurs de matériel de fournir un pilote de réduction des risques 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. Mais 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, pendant le démontage, vous devez utiliser l’option permettant de contourner l’avertissement -Force 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’affectation d’appareils discrets.

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 affectation d’appareil discrète.

Désactiver l’appareil

Utilisez Device Manager 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 été installé, utilisez l’applet de commande suivante :

    Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
    

Affecter 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écifiez le chemin d’accès d’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 correctement monté sur une machine virtuelle, vous pouvez maintenant démarrer cette machine virtuelle et interagir avec l’appareil comme si vous étiez en cours d’exécution sur un système nu. Vous pouvez maintenant installer les pilotes du fournisseur de matériel dans la machine virtuelle, et les applications sont en mesure de voir le matériel. Vous pouvez le vérifier en ouvrant Device Manager sur la machine virtuelle invitée et en voyant que le matériel est disponible.

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

Si vous souhaitez renvoyer l’appareil à son état d’origine, vous devez arrêter la machine virtuelle et émettre 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 Device Manager et le système d’exploitation hôte est en mesure d’interagir à nouveau avec l’appareil.

Exemple : monter un GPU sur une machine virtuelle

Cet exemple utilise PowerShell pour configurer une machine virtuelle nommée ddatest1 pour prendre le premier GPU disponible par le fabricant NVIDIA et l’affecter à 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 transmettez un GPU à une machine virtuelle, mais que les services Bureau à distance ou une application ne reconnaissent pas le GPU, vérifiez les problèmes courants suivants.

  • Veillez à installer la version la plus récente du pilote pris en charge par le fournisseur gpu et que le pilote ne signale pas d’erreurs. Pour ce faire, vérifiez l’état de l’appareil dans Device Manager.

  • 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.

  • Veillez à utiliser un GPU que le fournisseur prend en charge pour être utilisé dans cette configuration. Par exemple, certains fournisseurs empêchent leurs cartes destinées aux consommateurs de fonctionner lorsqu'elles sont transféré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 des listes d’autorisation des GPU et des environnements.

  • Si vous utilisez le rôle Hôte de session Bureau à distance ou Windows Multipoint Services sur l’invité, vous devez 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é). Accédez à 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 valeur de stratégie de groupe sur Activé, puis redémarrez la machine virtuelle après l’application de la stratégie.