この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

vGPUサポート

SUSE Virtualizationは、シングルルートIO仮想化(SR-IOV)のためにNVIDIA GPUサポートを共有することができます。この追加機能は、pcidevices-controllerアドオンによって提供され、`sriov-manage`を利用してGPU管理を行います。

GPUがSR-IOVをサポートしているかどうかを確認するには、デバイスのドキュメントをチェックしてください。SR-IOVをサポートするNVIDIA vGPUの作成に関する詳細は、 NVIDIAのドキュメントを参照してください。

GPUデバイス上でvGPUのライフサイクルを管理するには、nvidia-driver-toolkitアドオンを有効にする必要があります。

使用方法

  1. UIで、*Advanced → SR-IOV GPU Devices*に移動し、次の内容を確認してください:

    • GPUデバイスがスキャンされました。

    • 関連する`sriovgpudevices.devices.harvesterhci.io`オブジェクトが作成されました。

      sriovgpudevices disabled
  2. 有効にしたいデバイスを見つけて、*⋮ → 有効にする*を選択してください。

    sriovgpudevices enabled
  3. *vGPUデバイス*画面に移動し、関連する`vgpudevices.devices.harvesterhci.io`オブジェクトを確認してください。

    pcidevices-controllerがvGPUデバイスをスキャンし、SUSE Virtualization UIがデバイス情報を表示するまで、しばらくお待ちください。

    vgpudevicelist
  4. vGPUを選択し、プロファイルを設定してください。

    vgpuprofiles

    プロファイルのリストは、GPUおよびホストの基盤となる/sysツリーに依存します。利用可能なプロファイルとその機能に関する詳細は、 NVIDIAのドキュメントを参照してください。

    最初のプロファイルを選択すると、NVIDIAドライバーは残りのvGPUに対して利用可能なプロファイルを自動的に設定します。

  5. vGPUを新しいまたは既存のVMに接続してください。

    vgpuattachment

    vGPUがVMに割り当てられた後は、vGPUが削除されるまでVMを無効にできない場合があります。

MIG対応のvGPUデバイス

以下の情報は、A100、H100、H200などのマルチインスタンスGPU(MIG)ベースのパーティショニングをサポートするNVIDIA GPUにのみ適用されます。

SUSE Virtualizationは MIG対応のvGPUを仮想マシン間で共有できるようにします。MIG対応のvGPUは、MIG対応の物理GPU内のGPUインスタンスに存在します。各MIG対応のvGPUは、計算エンジンやビデオデコードエンジンを含むGPUインスタンスのエンジンに独占的にアクセスできます。

SUSE Virtualizationは、検出されたGPUがMIGベースのパーティショニングをサポートしている場合にのみ`MIGConfiguration`オブジェクトを作成します。

MIG対応のvGPUデバイスを有効にする

  1. SUSE VirtualizationのUIで、*Advanced → vGPU MIG設定*に移動し、以下を確認してください:

    • GPUデバイスをサポートするためのMIG設定が作成されました。

    • 関連する`migconfiguration.devices.harvesterhci.io`オブジェクトが作成されました。

  2. GPUのMIGプロファイルを定義し、MIG設定を有効にしてください。

    MIG設定および利用可能な組み合わせに関する情報は、GPUのドキュメントを参照してください。

    サンプルMIG設定
  3. *Advanced → vGPUデバイス*に移動し、MIG設定に関連付けられたvGPUデバイスを有効にしてください。

    新しく作成されたMIGプロファイルは、有効なvGPUタイプとして利用可能です。

有効にすると、vGPUデバイスは仮想マシンで使用できます。

vGPUを持つ仮想マシン

制限

複数のvGPUを接続する

VMに複数のvGPUを接続することは、以下の理由で失敗する可能性があります:

  • すべてのvGPUプロファイルが複数のvGPUの接続をサポートしているわけではありません。 NVIDIAのドキュメントには、この機能をサポートするvGPUプロファイルが一覧されています。例えば、NVIDIA A2またはA16 GPUを使用する場合、QシリーズのvGPUのみが複数のvGPUを接続できることに注意してください。

    multiplevgpu
  • VM定義内のGPUデバイスは、`ramFB`を有効にできるのは1つだけです。複数のvGPUを接続するには、VMの設定(YAML)を編集し、すべての非プライマリvGPUデバイスに`virtualGPUOptions`を追加する必要があります。

    virtualGPUOptions:
    display:
       ramFB:
         enabled: false

使用可能なvGPUの上限

vGPUサポートがGPUで有効になっている場合、NVIDIAドライバーはデフォルトで16のvGPUデバイスを作成します。最初のプロファイルを選択すると、NVIDIAドライバーは残りのvGPUに対して利用可能なプロファイルを自動的に設定します。

使用されるプロファイルは、各GPUに対して利用可能なvGPUの最大数も決定します。最大数に達すると、残りのvGPUに対してプロファイルを選択できず、それらのデバイスを構成することはできません。

例 (NVIDIA A2 GPU):

`NVIDIA A2-4Q`プロファイルを選択すると、4つのvGPUデバイスのみを構成できます。これらのデバイスが構成されると、残りのvGPUに対してプロファイルを選択することはできません。

nvidia a2 example

技術的な詳細

pcidevices-controllerは、次のCRDを導入します:

  • sriovgpudevices.devices.harvesterhci.io

  • vgpudevices.devices.harvesterhci.io

起動時に、pcidevices-controllerはSR-IOV vGPUデバイスをサポートするNVIDIA GPUをホストでスキャンします。そのようなデバイスが見つかると、それらはCRDとして表現されます。

例:

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"

SRIOVGPUDeviceが有効になると、pcidevicesコントローラーは`nvidia-driver-toolkit`デーモンセットと連携してGPUデバイスを管理します。

pcidevicesによる/sysツリーの次回スキャン時に、vGPUデバイスはpcidevicesコントローラーによってスキャンされ、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

ユーザーが`VGPUDevice`のプロファイルを有効にして選択すると、pcidevicesコントローラーはデバイスを設定し、指定されたデバイスに正しいプロファイルを設定します。

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

pcidevicesコントローラーは、さまざまなvGPUプロファイルの詳細をkubeletに通知するvGPUデバイスプラグインも実行します。これはk8sスケジューラーによって使用され、VMが要求するvGPUを正しいノードに配置します。

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

pcidevicesコントローラーはkubevirtとの統合も設定し、VMがvGPUを利用できるように、KubeVirt CR内でvGPUデバイスを外部管理デバイスとして公開します。