Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Prise en charge vGPU

SUSE Virtualization est capable de partager le support GPU NVIDIA pour la virtualisation d’E/S à racine unique (SR-IOV). Cette capacité supplémentaire, fournie par le produit complémentaire pcidevices-controller, exploite sriov-manage pour la gestion des GPU.

Pour déterminer si votre GPU prend en charge le SR-IOV, consultez la documentation de l’appareil. Pour plus d’informations sur la création d’un vGPU NVIDIA qui prend en charge le SR-IOV, consultez la documentation NVIDIA.

Vous devez activer le produit complémentaire nvidia-driver-toolkit pour pouvoir gérer le cycle de vie des vGPUs sur les appareils GPU.

Syntaxe

  1. Dans l’interface utilisateur, allez à Avancé → Appareils GPU SR-IOV et vérifiez les éléments suivants :

    • Les appareils GPU ont été scannés.

    • Un objet sriovgpudevices.devices.harvesterhci.io associé a été créé.

      sriovgpudevices disabled
  2. Localisez l’appareil que vous souhaitez activer, puis sélectionnez ⋮ → Activer.

    sriovgpudevices enabled
  3. Allez à l’écran Appareils vGPU et vérifiez les objets vgpudevices.devices.harvesterhci.io associés.

    Laissez un certain temps au pcidevices-controller pour scanner les appareils vGPU et pour que l’interface utilisateur SUSE Virtualization affiche les informations sur l’appareil.

    vgpudevicelist
  4. Sélectionnez un vGPU et configurez un profil.

    vgpuprofiles

    La liste des profils dépend du GPU et de l’arborescence /sys sous-jacente de l’hôte. Pour plus d’informations sur les profils disponibles et leurs capacités, consultez la documentation NVIDIA.

    Après avoir sélectionné le premier profil, le pilote NVIDIA configure automatiquement les profils disponibles pour les vGPUs restants.

  5. Attachez le vGPU à une nouvelle machine virtuelle ou à une machine virtuelle existante.

    vgpuattachment

    Une fois qu’un vGPU a été attribué à une machine virtuelle, il peut ne pas être possible de désactiver la machine virtuelle tant que le vGPU n’est pas retiré.

Appareils vGPU basés sur MIG

Les informations suivantes s’appliquent uniquement aux GPU NVIDIA qui prennent en charge le partitionnement basé sur GPU à instances multiples (MIG), tels que les A100, H100 et H200.

SUSE Virtualization permet de partager des vGPUs basés sur MIG entre des machines virtuelles. Les vGPUs basés sur MIG résident sur une instance GPU dans un GPU physique compatible avec MIG. Chaque vGPU basé sur MIG a un accès exclusif aux moteurs de l’instance GPU, y compris les moteurs de calcul et de décodage vidéo.

SUSE Virtualization crée l’objet MIGConfiguration uniquement si le GPU détecté prend en charge le partitionnement basé sur MIG.

Activation des appareils vGPU basés sur MIG

  1. Dans l’interface utilisateur SUSE Virtualization, allez à →Configurations vGPU MIG avancées et vérifiez les éléments suivants :

    • Une configuration MIG a été créée pour prendre en charge les appareils GPU.

    • Un objet migconfiguration.devices.harvesterhci.io associé a été créé.

  2. Définissez les profils MIG pour votre GPU et activez la configuration MIG.

    Consultez la documentation du GPU pour des informations sur la configuration MIG et les combinaisons disponibles.

    Exemple de configuration MIG
  3. Allez à Appareils vGPU avancés→ et activez le dispositif vGPU associé à la configuration MIG.

    Les nouveaux profils MIG créés sont disponibles en tant que types de vGPU valides.

Une fois activé, le dispositif vGPU peut être utilisé avec une machine virtuelle.

Machine virtuelle avec vGPU

limites

Attachement de plusieurs vGPU

L’attachement de plusieurs vGPU à une VM peut échouer pour les raisons suivantes :

  • Tous les profils de vGPU ne prennent pas en charge l’attachement de plusieurs vGPU. La documentation NVIDIA répertorie les profils de vGPU qui prennent en charge cette fonctionnalité. Par exemple, si vous utilisez des GPU NVIDIA A2 ou A16, notez que seuls les vGPU de la série Q vous permettent d’attacher plusieurs vGPU.

    multiplevgpu
  • Seul 1 dispositif GPU dans la définition de la VM peut avoir ramFB activé. Pour attacher plusieurs vGPU, vous devez modifier la configuration de la VM (en YAML) et ajouter virtualGPUOptions à tous les dispositifs vGPU non principaux.

    virtualGPUOptions:
    display:
       ramFB:
         enabled: false

Plafond sur les vGPU utilisables

Lorsque le support vGPU est activé sur un GPU, le pilote NVIDIA crée par défaut 16 dispositifs vGPU. Après avoir sélectionné le premier profil, le pilote NVIDIA configure automatiquement les profils disponibles pour les vGPU restants.

Le profil utilisé détermine également le nombre maximum de vGPU disponibles pour chaque GPU. Une fois le maximum atteint, aucun profil ne peut être sélectionné pour les vGPU restants et ces dispositifs ne peuvent pas être configurés.

Exemple (NVIDIA A2 GPU) :

Si vous sélectionnez le profil NVIDIA A2-4Q, vous ne pouvez configurer que 4 dispositifs vGPU. Une fois ces dispositifs configurés, vous ne pouvez sélectionner aucun profil pour les vGPU restants.

nvidia a2 example

Plongée technique approfondie

Le contrôleur pcidevices introduit les CRDs suivants :

  • sriovgpudevices.devices.harvesterhci.io

  • vgpudevices.devices.harvesterhci.io

Au démarrage, le contrôleur pcidevices scanne l’hôte à la recherche de GPU NVIDIA qui prennent en charge les dispositifs vGPU SR-IOV. Lorsque de tels dispositifs sont trouvés, ils sont représentés comme un CRD.

Exemple :

apiVersion: devices.harvesterhci.io/v1beta1
kind: SRIOVGPUDevice
metadata:
  creationTimestamp: "2024-02-21T05:57:37Z"
  generation: 2
  labels:
    nodename: harvester-kgd9c
  name: harvester-kgd9c-000008000
  resourceVersion: "6641619"
  uid: e3a97ee4-046a-48d7-820d-8c6b45cd07da
spec:
  address: "0000:08:00.0"
  enabled: true
  nodeName: harvester-kgd9c
status:
  vGPUDevices:
  - harvester-kgd9c-000008004
  - harvester-kgd9c-000008005
  - harvester-kgd9c-000008016
  - harvester-kgd9c-000008017
  - harvester-kgd9c-000008020
  - harvester-kgd9c-000008021
  - harvester-kgd9c-000008022
  - harvester-kgd9c-000008023
  - harvester-kgd9c-000008006
  - harvester-kgd9c-000008007
  - harvester-kgd9c-000008010
  - harvester-kgd9c-000008011
  - harvester-kgd9c-000008012
  - harvester-kgd9c-000008013
  - harvester-kgd9c-000008014
  - harvester-kgd9c-000008015
  vfAddresses:
  - "0000:08:00.4"
  - "0000:08:00.5"
  - "0000:08:01.6"
  - "0000:08:01.7"
  - "0000:08:02.0"
  - "0000:08:02.1"
  - "0000:08:02.2"
  - "0000:08:02.3"
  - "0000:08:00.6"
  - "0000:08:00.7"
  - "0000:08:01.0"
  - "0000:08:01.1"
  - "0000:08:01.2"
  - "0000:08:01.3"
  - "0000:08:01.4"
  - "0000:08:01.5"

Lorsqu’un SRIOVGPUDevice est activé, le contrôleur pcidevices travaille avec le daemonset nvidia-driver-toolkit pour gérer les dispositifs GPU.

Lors d’un scan ultérieur de l’arborescence /sys par les pcidevices, les dispositifs vGPU sont scannés par le contrôleur pcidevices et gérés comme VGPUDevices CRD.

NAME                        ADDRESS        NODE NAME         ENABLED   UUID                                   VGPUTYPE       PARENTGPUDEVICE
harvester-kgd9c-000008004   0000:08:00.4   harvester-kgd9c   true      dd6772a8-7db8-4e96-9a73-f94c389d9bc3   NVIDIA A2-4A   0000:08:00.0
harvester-kgd9c-000008005   0000:08:00.5   harvester-kgd9c   true      9534e04b-4687-412b-833e-3ae95b97d4d1   NVIDIA A2-4Q   0000:08:00.0
harvester-kgd9c-000008006   0000:08:00.6   harvester-kgd9c   true      a16e5966-9f7a-48a9-bda8-0d1670e740f8   NVIDIA A2-4A   0000:08:00.0
harvester-kgd9c-000008007   0000:08:00.7   harvester-kgd9c   true      041ee3ce-f95c-451e-a381-1c9fe71918b2   NVIDIA A2-4Q   0000:08:00.0
harvester-kgd9c-000008010   0000:08:01.0   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008011   0000:08:01.1   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008012   0000:08:01.2   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008013   0000:08:01.3   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008014   0000:08:01.4   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008015   0000:08:01.5   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008016   0000:08:01.6   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008017   0000:08:01.7   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008020   0000:08:02.0   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008021   0000:08:02.1   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008022   0000:08:02.2   harvester-kgd9c   false                                                           0000:08:00.0
harvester-kgd9c-000008023   0000:08:02.3   harvester-kgd9c   false                                                           0000:08:00.0

Lorsqu’un utilisateur active et sélectionne un profil pour le VGPUDevice, le contrôleur pcidevices configure le dispositif et met en place le bon profil sur ledit dispositif.

apiVersion: devices.harvesterhci.io/v1beta1
kind: VGPUDevice
metadata:
  creationTimestamp: "2024-02-26T03:04:47Z"
  generation: 8
  labels:
    harvesterhci.io/parentSRIOVGPUDevice: harvester-kgd9c-000008000
    nodename: harvester-kgd9c
  name: harvester-kgd9c-000008004
  resourceVersion: "21051017"
  uid: b9c7af64-1e47-467f-bf3d-87b7bc3a8911
spec:
  address: "0000:08:00.4"
  enabled: true
  nodeName: harvester-kgd9c
  parentGPUDeviceAddress: "0000:08:00.0"
  vGPUTypeName: NVIDIA A2-4A
status:
  configureVGPUTypeName: NVIDIA A2-4A
  uuid: dd6772a8-7db8-4e96-9a73-f94c389d9bc3
  vGPUStatus: vGPUConfigured

Le contrôleur pcidevices exécute également un plugin de dispositif vGPU, qui annonce les détails des différents profils vGPU au kubelet. Cela est ensuite utilisé par le planificateur k8s pour placer les vGPUs demandés par la VM sur les nœuds appropriés.

(⎈|local:harvester-system)➜  ~ k get nodes harvester-kgd9c -o yaml | yq .status.allocatable
cpu: "24"
devices.kubevirt.io/kvm: 1k
devices.kubevirt.io/tun: 1k
devices.kubevirt.io/vhost-net: 1k
ephemeral-storage: "149527126718"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
intel.com/82599_ETHERNET_CONTROLLER_VIRTUAL_FUNCTION: "1"
memory: 131858088Ki
nvidia.com/NVIDIA_A2-4A: "2"
nvidia.com/NVIDIA_A2-4C: "0"
nvidia.com/NVIDIA_A2-4Q: "2"
pods: "200"

Le contrôleur pcidevices effectue également la configuration de l’intégration avec kubevirt et annonce les dispositifs vGPU comme des dispositifs gérés de l’extérieur dans le CR Kubevirt pour garantir que la VM peut consommer le vGPU.