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

このページでは、Google Distributed Cloud コネクテッドでグラフィック処理ユニット(GPU)ワークロードを管理する方法について説明します。この機能を利用するには、GPU を含む Distributed Cloud 接続ハードウェア構成が必要です。Distributed Cloud Servers は GPU ワークロードをサポートしていません。

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

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

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

  • コンテナで実行されている 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 リソースがコンテナ化されたワークロードに割り当てられます。各ノードの 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

次のステップ