NCCL Fast Socket を使用してワークロードの効率を向上させる


このページでは、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 を実行して最新のバージョンを取得する。

制限事項

要件

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 L4
    • nvidia-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 のトラブルシューティングをご覧ください。

次のステップ