Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

vGPU Support

SUSE Virtualization ist in der Lage, die NVIDIA-GPU-Unterstützung für Single Root IO‑Virtualisierung (SR‑IOV) zu teilen. Diese zusätzliche Funktionalität, die durch das pcidevices-controller Add-on bereitgestellt wird, nutzt sriov-manage für das GPU-Management.

Um festzustellen, ob Ihre GPU SR-IOV unterstützt, überprüfen Sie die Gerätedokumentation. Für weitere Informationen zur Erstellung einer NVIDIA vGPU, die SR‑IOV unterstützt, siehe die NVIDIA-Dokumentation.

Sie müssen das nvidia-driver-toolkit Add-on aktivieren, um den Lebenszyklus von vGPUs auf GPU-Geräten verwalten zu können.

Verwendung

  1. Gehen Sie in der Benutzeroberfläche zu Erweiterte → SR-IOV GPU-Geräte und überprüfen Sie Folgendes:

    • GPU-Geräte wurden gescannt.

    • Ein zugehöriges sriovgpudevices.devices.harvesterhci.io Objekt wurde erstellt.

      sriovgpudevices disabled
  2. Suchen Sie das Gerät, das Sie aktivieren möchten, und wählen Sie dann ⋮ → Aktivieren aus.

    sriovgpudevices enabled
  3. Gehen Sie zum Bildschirm vGPU-Geräte und überprüfen Sie die zugehörigen vgpudevices.devices.harvesterhci.io Objekte.

    Lassen Sie etwas Zeit, damit der pcidevices-controller die vGPU-Geräte scannt und die SUSE Virtualization Benutzeroberfläche die Geräteinformationen anzeigt.

    vgpudevicelist
  4. Wählen Sie eine vGPU aus und konfigurieren Sie ein Profil.

    vgpuprofiles

    Die Liste der Profile hängt von der GPU und dem zugrunde liegenden /sys-Baum des Hosts ab. Für weitere Informationen zu den verfügbaren Profilen und deren Funktionen siehe die NVIDIA-Dokumentation.

    Nachdem Sie das erste Profil ausgewählt haben, konfiguriert der NVIDIA-Treiber automatisch die für die verbleibenden vGPUs verfügbaren Profile.

  5. Fügen Sie die vGPU einer neuen oder bestehenden VM hinzu.

    vgpuattachment

    Sobald eine vGPU einer VM zugewiesen wurde, kann es möglicherweise nicht möglich sein, die VM zu deaktivieren, bis die vGPU entfernt wurde.

MIG-unterstützte vGPU-Geräte

Die folgenden Informationen gelten nur für NVIDIA-GPUs, die die Multi-Instance GPU (MIG)-basierte Partitionierung unterstützen, wie die A100, H100 und H200.

SUSE Virtualization ermöglicht es, MIG-unterstützte vGPUs über virtuelle Maschinen hinweg zu teilen. MIG-unterstützte vGPUs befinden sich auf einer GPU-Instanz in einer MIG-fähigen physischen GPU. Jede ansässige MIG-unterstützte vGPU hat exklusiven Zugriff auf die Engines der GPU-Instanz, einschließlich der Rechen- und Video-Decodierungs-Engines.

SUSE Virtualization erstellt das MIGConfiguration Objekt nur, wenn die erkannte GPU MIG‑basierte Partitionierung unterstützt.

Aktivierung von MIG-unterstützten vGPU-Geräten

  1. Gehen Sie in der SUSE Virtualization Benutzeroberfläche zu Erweiterte → vGPU MIG-Konfigurationen und überprüfen Sie Folgendes:

    • Eine MIG-Konfiguration wurde zur Unterstützung von GPU-Geräten erstellt.

    • Ein zugehöriges migconfiguration.devices.harvesterhci.io Objekt wurde erstellt.

  2. Definieren Sie die MIG-Profile für Ihre GPU und aktivieren Sie die MIG-Konfiguration.

    Bitte beachten Sie die Dokumentation der GPU für Informationen zur MIG-Konfiguration und verfügbaren Kombinationen.

    Beispiel MIG-Konfiguration
  3. Gehen Sie zu Erweiterte → vGPU-Geräte und aktivieren Sie das vGPU-Gerät, das mit der MIG-Konfiguration verbunden ist.

    Die neu erstellten MIG-Profile sind als gültige vGPU-Typen verfügbar.

Sobald aktiviert, kann das vGPU-Gerät mit einer virtuellen Maschine verwendet werden.

Virtuelle Maschine mit vGPU

Nutzungsbeschränkungen

Anschließen mehrerer vGPUs

Das Anschließen mehrerer vGPUs an eine VM kann aus folgenden Gründen fehlschlagen:

  • Nicht alle vGPU-Profile unterstützen das Anschließen mehrerer vGPUs. Die NVIDIA-Dokumentation listet die vGPU-Profile auf, die diese Funktion unterstützen. Wenn Sie beispielsweise NVIDIA A2- oder A16-GPUs verwenden, beachten Sie, dass nur Q-Serie-vGPUs es Ihnen ermöglichen, mehrere vGPUs anzuschließen.

    multiplevgpu
  • Nur 1 GPU-Gerät in der VM-Definition kann ramFB aktiviert haben. Um mehrere vGPUs anzuhängen, müssen Sie die VM-Konfiguration (in YAML) bearbeiten und virtualGPUOptions zu allen nicht primären vGPU-Geräten hinzufügen.

    virtualGPUOptions:
    display:
       ramFB:
         enabled: false

Obergrenze für verwendbare vGPUs

Wenn die vGPU-Unterstützung auf einer GPU aktiviert ist, erstellt der NVIDIA-Treiber standardmäßig 16 vGPU-Geräte. Nachdem Sie das erste Profil ausgewählt haben, konfiguriert der NVIDIA-Treiber automatisch die für die verbleibenden vGPUs verfügbaren Profile.

Das verwendete Profil bestimmt auch die maximale Anzahl an vGPUs, die für jede GPU verfügbar sind. Sobald die maximale Anzahl erreicht ist, können keine Profile für die verbleibenden vGPUs ausgewählt werden, und diese Geräte können nicht konfiguriert werden.

Beispiel (NVIDIA A2 GPU):

Wenn Sie das NVIDIA A2-4Q Profil auswählen, können Sie nur 4 vGPU-Geräte konfigurieren. Sobald diese Geräte konfiguriert sind, können keine Profile für die verbleibenden vGPUs ausgewählt werden.

nvidia a2 example

Technischer Tiefgang

Der pcidevices-controller führt die folgenden CRDs ein:

  • sriovgpudevices.devices.harvesterhci.io

  • vgpudevices.devices.harvesterhci.io

Beim Booten scannt der pcidevices-controller den Host nach NVIDIA GPUs, die SR-IOV vGPU-Geräte unterstützen. Wenn solche Geräte gefunden werden, werden sie als CRD dargestellt.

Beispiel:

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"

Wenn ein SRIOVGPUDevice aktiviert ist, arbeitet der pcidevices-controller mit dem nvidia-driver-toolkit Daemonset zusammen, um die GPU-Geräte zu verwalten.

Bei einem nachfolgenden Scan des /sys-Baums durch die pcidevices werden die vGPU-Geräte vom pcidevices-controller gescannt und als VGPUDevices CRD verwaltet.

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

Wenn ein Benutzer ein Profil für das VGPUDevice aktiviert und auswählt, richtet der pcidevices-controller das Gerät ein und konfiguriert das richtige Profil auf dem genannten Gerät.

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

Der pcidevices-controller führt auch ein vGPU-Geräte-Plugin aus, das die Details der verschiedenen vGPU-Profile an den Kubelet bewirbt. Dies wird dann vom k8s-Scheduler verwendet, um die vGPUs, die von der VM angefordert werden, den richtigen Knoten zuzuweisen.

(⎈|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"

Der pcidevices-controller führt auch das Setup der Integration mit Kubevirt durch und bewirbt die vGPU-Geräte als extern verwaltete Geräte im Kubevirt CR, um sicherzustellen, dass die VM die vGPU nutzen kann.