このページでは、NVIDIA Collective Communication Library(NCCL)Fast Socket プラグインを使用して、Google Kubernetes Engine(GKE)クラスタでより効率的なワークロードを実行する方法について説明します。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
制限事項
- Compute Engine の制限事項が適用されます。
- gVNIC の制限が適用されます。
- NCCL Fast Socket は、ハードウェア アクセラレータが有効になっているノードプールでのみサポートされます。
要件
GKE Autopilot:
- GKE Autopilot クラスタは 1.30.2-gke.1023000 以降を実行する必要があります。
詳細については、Autopilot クラスタの作成をご覧ください。
GKE Standard:
- NCCL Fast Socket を使用するには、ノードプールで gVNIC を有効にする必要があります。
- GKE ノードでは Container-Optimized OS ノードイメージを使用する必要があります。
- クラスタで GKE バージョン 1.25.2-gke.1700 以降を実行している必要があります。
詳細については、リージョン クラスタの作成をご覧ください。
Standard クラスタで NCCL Fast Socket を有効にする
このセクションでは、GKE Standard ノードプールで NCCL Fast Socket プラグインを有効にする方法について説明します。GKE Autopilot クラスタを使用する場合、ワークロードで NCCL Fast Socket をリクエストすると、GKE は自動的にプラグインを有効にします。手順については、Autopilot での NCCL Fast Socket のセクションをご覧ください。
Standard クラスタの場合は、NCCL Fast Socket プラグインを使用するノードプールを作成します。gcloud container node-pools update
を使用して既存のノードプールを更新することもできます。
gcloud container node-pools create NODEPOOL_NAME \
--accelerator type=ACCELERATOR_TYPE,count=ACCELERATOR_COUNT \
--machine-type=MACHINE_TYPE \
--cluster=CLUSTER_NAME \
--enable-fast-socket \
--enable-gvnic
次のように置き換えます。
NODEPOOL_NAME
: 新しいノードプールの名前。CLUSTER_NAME
: クラスタの名前。ACCELERATOR_TYPE
: 使用する GPU アクセラレータのタイプ。例:nvidia-tesla-t4
。ACCELERATOR_COUNT
: ノードあたりの GPU の数。MACHINE_TYPE
: 使用するマシンのタイプ。NCCL Fast Socket は、メモリ最適化マシンタイプではサポートされていません。
NVIDIA GPU デバイス ドライバをインストールする
Autopilot では、GPU デバイス ドライバが自動的にインストールされます。
Standard クラスタの場合は、NVIDIA GPU デバイス ドライバのインストールの手順に沿って、必要な NVIDIA デバイス ドライバをノードにインストールします。
Autopilot の NCCL Fast Socket
Autopilot クラスタでは、cloud.google.com/gke-nccl-fastsocket
ノードセレクタを使用してワークロードで NCCL Fast Socket をリクエストします。ワークロードで NCCL Fast Socket をリクエストすると、GKE は、GKE がワークロード用にプロビジョニングしたノードで gVNIC と NCCL Fast Socket を有効にします。NCCL Fast Socket は、Autopilot がサポートする任意の GPU タイプで使用できます。
次の Pod は NCCL Fast Socket をリクエストします。
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
nodeSelector:
cloud.google.com/gke-accelerator: GPU_TYPE
cloud.google.com/gke-nccl-fastsocket: "true"
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: GPU_QUANTITY
次のように置き換えます。
GPU_TYPE
: GPU ハードウェアのタイプ。使用できる値は次のとおりです。nvidia-h100-mega-80gb
: NVIDIA H100 Mega(80 GB)nvidia-h100-80gb
: NVIDIA H100(80 GB)nvidia-a100-80gb
: NVIDIA A100(80 GB)nvidia-tesla-a100
: NVIDIA A100(40 GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
GPU_QUANTITY
: コンテナに割り当てる GPU の数。
NCCL Fast Socket が有効になっていることを確認する
NCCL Fast Socket が有効になっていることを確認するには、kube-system Pod を表示します。
kubectl get pods -n kube-system
出力は次のようになります。
NAME READY STATUS RESTARTS AGE
nccl-fastsocket-installer-qvfdw 2/2 Running 0 10m
nccl-fastsocket-installer-rtjs4 2/2 Running 0 10m
nccl-fastsocket-installer-tm294 2/2 Running 0 10m
この出力で、Pod の数はノードプール内のノードの数と等しくなります。
NCCL Fast Socket を無効にする
GKE Autopilot クラスタでは、NCCL Fast Socket プラグインはデフォルトで無効になっています。既存のワークロードでプラグインを無効にするには、NCCL Fast Socket ノードセレクタなしでワークロードを再デプロイします。
Standard クラスタのノードプールで NCCL Fast Socket を無効にするには、次のコマンドを実行します。
gcloud container node-pools update NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-fast-socket
既存のノードには引き続きプラグインがインストールされています。ワークロードを新しいノードに移行するには、手動でノードプールのサイズを変更する必要があります。
トラブルシューティング
gVNIC のトラブルシューティングについては、Google Virtual NIC のトラブルシューティングをご覧ください。
次のステップ
- ネットワーク ポリシー ロギングを使用して、クラスタのネットワーク ポリシーによって Pod への接続が許可または拒否される時間を記録する。