GPU ワークロードを管理する

このページでは、Google Distributed Cloud コネクテッドで画像処理装置(GPU)ワークロードを有効にして管理する方法について説明します。この機能を利用するには、GPU を含む Distributed Cloud 接続ハードウェア構成が必要です。GPU サポートはデフォルトで無効になっています。Distributed Cloud 接続クラスタで GPU サポートを明示的に有効にする必要があります。Distributed Cloud Servers は GPU ワークロードをサポートしていないことに注意してください。

このような構成を計画して注文するには、次のドキュメントで構成 2 を選択します。

Distributed Cloud コネクテッド ラックに GPU が含まれている場合は、GPU リソースを使用するように Distributed Cloud コネクテッド ワークロードを構成できます。

Distributed Cloud 接続ワークロードは、コンテナと仮想マシンで実行できます。

  • コンテナで実行されている GPU ワークロード。GPU サポートを有効にすると、Distributed Cloud コネクテッド クラスタのすべての GPU リソースが、コンテナで実行されているワークロードに最初に割り当てられます。GPU ベースのコンテナ化されたワークロードを実行するための GPU ドライバは、Distributed Cloud コネクテッドに含まれています。各コンテナ内で、GPU ライブラリは /opt/nvidia にマウントされます。

  • 仮想マシンで実行されている GPU ワークロード。仮想マシンで GPU ベースのワークロードを実行するには、このページの後半で説明するように、ターゲットの Distributed Cloud 接続ノードで GPU リソースを仮想マシンに割り当てる必要があります。これにより、組み込みの GPU ドライバがバイパスされ、GPU が仮想マシンに直接渡されます。互換性のある GPU ドライバを各仮想マシンのゲスト オペレーティング システムに手動でインストールする必要があります。また、仮想マシンで専用の GPU ドライバを実行するために必要なすべてのライセンスを確保する必要があります。

Distributed Cloud に接続されたノードに GPU が存在することを確認するには、ノードに vm.cluster.gke.io.gpu=true ラベルがあることを確認します。ノードにラベルがない場合、対応する Distributed Cloud 接続の物理マシンに GPU がインストールされていません。

GPU サポートを有効にする

ワークロードの GPU サポートを有効にするには、値が true に設定された enableGPU パラメータを含む VMRuntime カスタム リソースを作成または変更し、Distributed Cloud 接続クラスタに適用する必要があります。次に例を示します。

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  # Enable GPU support
  enableGPU: true

GDC 仮想マシン サブシステムで VM ランタイムを有効にするクラスタのタイプに応じて、次のいずれかを行います。

  • GDC の VM ランタイム仮想マシン サブシステムをまだ有効にしていない Cloud コントロール プレーン クラスタの場合は、VMRuntime リソースを手動で作成する必要があります。
  • GDC 仮想マシン サブシステムで VM ランタイムをすでに有効にしている Cloud コントロール プレーン クラスタの場合は、既存の VMRuntime リソースを編集する必要があります。
  • ローカル コントロール プレーン クラスタの場合は、既存の VMRuntime リソースを編集する必要があります。

この同じ VMRuntime リソースは、enable パラメータを使用して、クラスタでの GDC 上の VM ランタイムのサポートも構成します。ワークロードのニーズに応じて 2 つのパラメータを構成してください。Distributed Cloud 接続クラスタで GPU のサポートを有効にするために、GDC 上の VM ランタイムのサポートを有効にする必要はありません。

次の表に、使用可能な構成を示します。

enable enableGPU 結果の構成
false false ワークロードはコンテナでのみ実行され、GPU リソースを使用できません。
false true ワークロードはコンテナでのみ実行され、GPU リソースを使用できます。
true true

ワークロードは、仮想マシンとコンテナで実行できます。

どちらのタイプのワークロードでも GPU リソースを使用できます。

true false

ワークロードは、仮想マシンとコンテナで実行できます。

どちらのタイプのワークロードも GPU リソースを使用できません。

GPU サポートが有効になっていることを確認する

クラスタで GPU サポートが有効になっていることを確認するには、次のコマンドを使用します。

kubectl get pods --namespace vm-system

このコマンドでは、次の例のような出力が返されます。

NAME                                         READY   STATUS     RESTARTS  AGE
...
gpu-controller-controller-manager-vbv4w      2/2     Running    0         31h
kubevirt-gpu-dp-daemonset-gxj7g              1/1     Running    0         31h
nvidia-gpu-dp-daemonset-bq2vj                1/1     Running    0         31h
...

出力で、GPU コントローラ Pod がデプロイされ、vm-system Namespace で実行されていることを確認できます。

GPU リソースを割り当てる

デフォルトでは、Distributed Cloud 接続クラスタで GPU サポートを有効にすると、クラスタ内の各ノードのすべての GPU リソースがコンテナ化されたワークロードに割り当てられます。各ノードの GPU リソースの割り当てをカスタマイズするには、このセクションの手順を行います。

GPU リソースの割り当てを構成する

  1. Distributed Cloud 接続ノードに GPU リソースを割り当てるには、次のコマンドを使用して、ターゲット ノードの GPUAllocation カスタム リソースを編集します。

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    NODE_NAME は、ターゲットの Distributed Cloud ノードの名前に置き換えます。

    次の例では、コマンドの出力にデフォルトの GPU リソース割り当てが表示されています。デフォルトでは、すべての GPU リソースがコンテナ化された(pod)ワークロードに割り当てられ、仮想マシン(vm)ワークロードには GPU リソースが割り当てられません。

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. GPU リソースの割り当てを次のように設定します。

    • コンテナ化されたワークロードに GPU リソースを割り当てるには、pod フィールドの値を増やし、vm フィールドの値を同じ量だけ減らします。
    • GPU リソースを仮想マシン ワークロードに割り当てるには、vm フィールドの値を増やし、pod フィールドの値を同じ量だけ減らします。

    割り当てられた GPU リソースの合計数は、ノードが実行される物理 Distributed Cloud 接続マシンにインストールされている GPU の数を超えないようにする必要があります。超えると、ノードは無効な割り当てを拒否します。

    次の例では、2 つの GPU リソースがコンテナ化された(pod)ワークロードから仮想マシン(vm)ワークロードに再割り当てされています。

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    完了したら、変更した GPUAllocation リソースをクラスタに適用し、ステータスが AllocationFulfilled に変わるまで待ちます。

GPU リソースの割り当てを確認する

  • GPU リソースの割り当てを確認するには、次のコマンドを使用します。

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    NODE_NAME は、ターゲットの Distributed Cloud 接続ノードの名前に置き換えます。

    このコマンドでは、次の例のような出力が返されます。

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  Tesla T4
     Events:          <none>
    

GPU リソースを使用するようにコンテナを構成する

Distributed Cloud に接続されたコンテナが GPU リソースを使用するように構成するには、次の例に示すように仕様を構成し、クラスタに適用します。

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        nvidia.com/gpu-pod-TESLA_T4: 2
        limits:
        nvidia.com/gpu-pod-TESLA_T4: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

次のように置き換えます。

  • CUDA_TOOLKIT_IMAGE: NVIDIA CUDA ツールキット イメージのフルパスと名前。CUDA ツールキットのバージョンは、Distributed Cloud 接続クラスタで実行されている NVIDIA ドライバのバージョンと一致している必要があります。NVIDIA ドライバのバージョンを確認するには、Distributed Cloud のリリースノートをご覧ください。一致する CUDA ツールキットのバージョンを確認するには、CUDA の互換性をご覧ください。
  • NODE_NAME: ターゲットの Distributed Cloud 接続ノードの名前。

GPU リソースを使用するように仮想マシンを構成する

GPU リソースを使用するように接続された Distributed Cloud で実行されている仮想マシンを構成するには、次の例に示すように VirtualMachine リソース仕様を構成し、クラスタに適用します。

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: nvidia.com/gpu-vm-TESLA_T4
    quantity: 2

次のステップ