Rechercher

16.2. Gestion des périphériques NVIDIA vGPU

download PDF

La fonction vGPU permet de diviser un périphérique GPU NVIDIA physique en plusieurs périphériques virtuels, appelés mediated devices. Ces dispositifs médiatisés peuvent ensuite être affectés à plusieurs machines virtuelles (VM) en tant que GPU virtuels. Ces machines virtuelles peuvent ainsi partager les performances d'un seul GPU physique.

Important

L'attribution d'un GPU physique aux VM, avec ou sans utilisation de périphériques médiatisés, rend impossible l'utilisation du GPU par l'hôte.

16.2.1. Configuration des périphériques NVIDIA vGPU

Pour configurer la fonction NVIDIA vGPU, vous devez télécharger les pilotes NVIDIA vGPU pour votre périphérique GPU, créer des périphériques médiatisés et les affecter aux machines virtuelles concernées. Pour des instructions détaillées, voir ci-dessous.

Conditions préalables

  • Votre GPU prend en charge les appareils à médiation vGPU. Pour obtenir une liste actualisée des GPU NVIDIA prenant en charge la création de vGPU, consultez la documentation du logiciel NVIDIA vGPU.

    • Si vous ne savez pas quel GPU utilise votre hôte, installez le paquetage lshw et utilisez la commande lshw -C display. L'exemple suivant montre que le système utilise un GPU NVIDIA Tesla P4, compatible avec vGPU.

      # lshw -C display
      
      *-display
             description: 3D controller
             product: GP104GL [Tesla P4]
             vendor: NVIDIA Corporation
             physical id: 0
             bus info: pci@0000:01:00.0
             version: a1
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress cap_list
             configuration: driver=vfio-pci latency=0
             resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

Procédure

  1. Téléchargez les pilotes NVIDIA vGPU et installez-les sur votre système. Pour obtenir des instructions, consultez la documentation de NVIDIA.
  2. Si le programme d'installation du logiciel NVIDIA n'a pas créé le fichier /etc/modprobe.d/nvidia-installer-disable-nouveau.conf, créez un fichier conf de n'importe quel nom dans /etc/modprobe.d/, et ajoutez les lignes suivantes dans le fichier :

    blacklist nouveau
    options nouveau modeset=0
  3. Régénérer le ramdisk initial pour le noyau actuel, puis redémarrer.

    # dracut --force
    # reboot
  4. Vérifiez que le noyau a chargé le module nvidia_vgpu_vfio et que le service nvidia-vgpu-mgr.service fonctionne.

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]

    En outre, si vous créez une vGPU basée sur un périphérique GPU NVIDIA Ampere, assurez-vous que les fonctions virtuelles sont activées pour le GPU physique. Pour plus d'informations, consultez la documentation de NVIDIA.

  5. Générer un UUID de l'appareil.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
  6. Préparer un fichier XML avec une configuration du dispositif médiatisé, basée sur le matériel GPU détecté. Par exemple, l'exemple suivant configure un périphérique médiatisé de type nvidia-63 vGPU sur une carte NVIDIA Tesla P4 qui fonctionne sur le bus PCI 0000:01:00.0 et utilise l'UUID généré à l'étape précédente.

    <device>
        <parent>pci_0000_01_00_0</parent>
        <capability type="mdev">
            <type id="nvidia-63"/>
            <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid>
        </capability>
    </device>
  7. Définissez un dispositif vGPU basé sur le fichier XML que vous avez préparé. Par exemple :

    # virsh nodedev-define vgpu-test.xml
    Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
  8. Optional: Vérifiez que le dispositif médiatisé est répertorié comme inactif.

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  9. Démarrez le dispositif vGPU que vous avez créé.

    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
  10. Optional: Assurez-vous que le dispositif médiatisé est répertorié comme actif.

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  11. Configurer le périphérique vGPU pour qu'il démarre automatiquement après le redémarrage de l'hôte

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
  12. Attachez le dispositif médiatisé à une VM dont vous souhaitez partager les ressources vGPU. Pour ce faire, ajoutez les lignes suivantes, ainsi que l'UUID précédemment généré, aux sections <devices/> de la configuration XML de la VM.

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    Notez que chaque UUID ne peut être attribué qu'à une seule VM à la fois. En outre, si la VM n'a pas de périphériques vidéo QEMU, tels que virtio-vga, ajoutez également le paramètre ramfb='on' sur la ligne <hostdev>.

  13. Pour que toutes les fonctionnalités des périphériques vGPU soient disponibles sur les machines virtuelles assignées, configurez la licence du logiciel invité NVIDIA vGPU sur les machines virtuelles. Pour plus d'informations et d'instructions, consultez le Guide de l'utilisateur du serveur de licences logicielles NVIDIA Virtual GPU.

Vérification

  1. Interrogez les capacités de la vGPU que vous avez créée et assurez-vous qu'elle est répertoriée comme active et persistante.

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         yes
    Persistent:     yes
    Autostart:      yes
  2. Démarrez la VM et vérifiez que le système d'exploitation invité détecte le périphérique médiatisé comme étant un GPU NVIDIA. Par exemple, si la VM utilise Linux :

    # lspci -d 10de: -k
    07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1)
            Subsystem: NVIDIA Corporation Device 12ce
            Kernel driver in use: nvidia
            Kernel modules: nouveau, nvidia_drm, nvidia

Problèmes connus

  • L'attribution d'un périphérique NVIDIA vGPU à une VM qui utilise un système d'exploitation invité RHEL 9 désactive actuellement la session Wayland sur cette VM et charge une session Xorg à la place. Ceci est dû à des incompatibilités entre les pilotes NVIDIA et Wayland.

Ressources supplémentaires

16.2.2. Suppression des périphériques NVIDIA vGPU

Pour modifier la configuration des périphériques vGPU assignés, vous devez supprimer les périphériques existants des machines virtuelles assignées. Pour plus d'informations, voir ci-dessous :

Conditions préalables

  • La VM à partir de laquelle vous souhaitez supprimer le périphérique est arrêtée.

Procédure

  1. Obtenez l'ID du dispositif médiatisé que vous souhaitez supprimer.

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  2. Arrêter l'instance en cours d'exécution du dispositif vGPU.

    # virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
  3. Optional: Assurez-vous que le dispositif de médiation a été désactivé.

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         no
    Persistent:     yes
    Autostart:      yes
  4. Supprimez le périphérique de la configuration XML de la VM. Pour ce faire, utilisez l'utilitaire virsh edit pour modifier la configuration XML de la VM, et supprimez le segment de configuration de mdev. Le segment ressemblera à ce qui suit :

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    Notez que l'arrêt et le détachement du périphérique médiatisé ne le supprime pas, mais le conserve à l'adresse defined. Vous pouvez donc redémarrer et attacher le périphérique à une autre VM.

  5. Optional: Pour supprimer le dispositif à médiation arrêté, supprimez sa définition.

    # virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'

Vérification

  • Si vous avez seulement arrêté et détaché le périphérique, assurez-vous que le périphérique médiatisé est répertorié comme inactif.

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  • Si vous avez également supprimé le périphérique, assurez-vous que la commande suivante ne l'affiche pas.

    # virsh nodedev-list --cap mdev

Ressources supplémentaires

  • La commande man virsh

16.2.3. Obtenir des informations sur votre système NVIDIA vGPU

Pour évaluer les capacités des fonctions vGPU à votre disposition, vous pouvez obtenir des informations supplémentaires sur les périphériques médiatisés de votre système, telles que

  • Combien de dispositifs médiatisés d'un type donné peuvent être créés ?
  • Quels sont les dispositifs à médiation déjà configurés sur votre système.

Procédure

  • Pour voir les périphériques GPU disponibles sur votre hôte qui peuvent prendre en charge les périphériques vGPU, utilisez la commande virsh nodedev-list --cap mdev_types. Par exemple, l'illustration suivante montre un système avec deux périphériques NVIDIA Quadro RTX6000.

    # virsh nodedev-list --cap mdev_types
    pci_0000_5b_00_0
    pci_0000_9b_00_0
  • Pour afficher les types de vGPU pris en charge par un périphérique GPU spécifique, ainsi que des métadonnées supplémentaires, utilisez la commande virsh nodedev-dumpxml.

    # virsh nodedev-dumpxml pci_0000_9b_00_0
    <device>
      <name>pci_0000_9b_00_0</name>
      <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path>
      <parent>pci_0000_9a_00_0</parent>
      <driver>
        <name>nvidia</name>
      </driver>
      <capability type='pci'>
        <class>0x030000</class>
        <domain>0</domain>
        <bus>155</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <capability type='mdev_types'>
          <type id='nvidia-346'>
            <name>GRID RTX6000-12C</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>2</availableInstances>
          </type>
          <type id='nvidia-439'>
            <name>GRID RTX6000-3A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>8</availableInstances>
          </type>
          [...]
          <type id='nvidia-440'>
            <name>GRID RTX6000-4A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>6</availableInstances>
          </type>
          <type id='nvidia-261'>
            <name>GRID RTX6000-8Q</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>3</availableInstances>
          </type>
        </capability>
        <iommuGroup number='216'>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/>
        </iommuGroup>
        <numa node='2'/>
        <pci-express>
          <link validity='cap' port='0' speed='8' width='16'/>
          <link validity='sta' speed='2.5' width='8'/>
        </pci-express>
      </capability>
    </device>

Ressources supplémentaires

  • La commande man virsh

16.2.4. Services de streaming de bureau à distance pour NVIDIA vGPU

Les services de streaming de bureau à distance suivants sont pris en charge sur l'hyperviseur RHEL 9 avec NVIDIA vGPU ou NVIDIA GPU passthrough activé :

  • HP ZCentral Remote Boost/Teradici
  • NICE DCV
  • Mechdyne TGX

Pour plus de détails sur l'assistance, voir la matrice d'assistance du fournisseur approprié.

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.