このページでは、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 サポートを有効にするには、enableGPU パラメータとその値が true に設定された 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 リソースの割り当てを構成する
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 workloadsGPU リソースの割り当てを次のように設定します。
- コンテナ化されたワークロードに 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 リソースの割り当てを確認する
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 リソースを使用するように仮想マシンを構成する
Distributed Cloud で実行されている仮想マシンが GPU リソースを使用するように構成するには、次の例に示すように VirtualMachine リソース仕様を構成し、クラスタに適用します。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: nvidia.com/gpu-vm-TESLA_T4 quantity: 2