このページでは、AI と ML のワークロードをサポートするために A4 または A3 Ultra 仮想マシン(VM)を使用する AI 最適化 Google Kubernetes Engine(GKE)クラスタを作成する方法について説明します。A4X の場合は、A4X を使用するカスタム AI 最適化 GKE クラスタを作成するをご覧ください。
A4 マシンシリーズと A3 Ultra マシンシリーズは、ターゲットを絞ったワークロード配置、高度なクラスタ メンテナンス制御、トポロジーを考慮したスケジューリングなどの機能を備えた大規模な AI / ML クラスタを実行できるように設計されています。詳細については、クラスタ管理の概要をご覧ください。
GKE は、組織の多様なワークロードを実行するための単一のプラットフォーム サーフェスを提供し、複数のプラットフォームを管理する運用上の負担を軽減します。高性能な分散型事前トレーニング、モデルのファインチューニング、モデルの推論、アプリケーションのサービング、サポート サービスなどのワークロードを実行できます。
このページでは、ワークロードのニーズに基づいてクラスタを構成する際に最大限の柔軟性を確保するために、Google Cloud CLI を使用して GKE クラスタを作成する方法について説明します。または、Cluster Toolkit を使用して、多くのユースケースのベスト プラクティスを反映したデフォルト設定でクラスタを迅速にデプロイすることもできます。この操作を行う手順については、デフォルト構成で AI に最適化された GKE クラスタを作成するをご覧ください。
GPUDirect RDMA を使用したクラスタ構成オプション
Google Cloud CLI を使用してクラスタを作成するには、次のクラスタ構成オプションのいずれかを選択します。
- 分散 AI ワークロードを実行する予定がない場合: GPUDirect RDMA を使用せずに GKE クラスタを作成します。
- 分散 AI ワークロードを実行する予定がある場合: GPUDirect RDMA を使用して GKE クラスタを作成します。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
必要なロール
GKE クラスタの作成と管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。
-
Kubernetes Engine 管理者(
roles/container.admin) -
Cloud Build 編集者(
roles/cloudbuild.builds.editor) -
Compute 管理者(
roles/compute.admin) -
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin) -
サービス アカウント管理者(
roles/iam.serviceAccountAdmin) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser) -
Service Usage ユーザー(
roles/serviceusage.serviceUsageConsumer) -
ストレージ管理者(
roles/storage.admin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
使用オプションを選択して容量を取得する
使用オプションを選択します。GPU リソースの取得方法と使用方法に基づいて選択します。詳細については、消費オプションを選択するをご覧ください。
GKE の場合、消費オプションを選択する際は、次の追加情報を考慮してください。
- Flex Start(プレビュー)と GKE の詳細については、Flex Start での GPU の取得可能性についてをご覧ください。
- Flex Start はベスト エフォートのコンパクト プレースメントを使用します。トポロジを確認するには、GKE クラスタ内のノードの物理トポロジを表示するをご覧ください。
- Spot VM を使用している場合にトポロジ情報を取得できるのは、コンパクト プレースメントを構成した場合のみです。
容量を取得する。使用オプションの容量を取得する方法を学習する。
要件
AI 最適化 GKE クラスタには、次の要件が適用されます。
- Flex Start プロビジョニング モデルを使用するには、GKE バージョン 1.32.2-gke.1652000 以降を使用する必要があります。
マシンタイプに応じて、最小 GPU ドライバ バージョンを使用していることを確認します。
- A4: A4 VM の B200 GPU には、R570 GPU ドライバ バージョン以上が必要です。GKE は、デフォルトで、A4 の最小バージョン(1.32.1-gke.1729000 以降)を実行するすべての A4 ノードにこのドライバ バージョンを自動的にインストールします。
- A3 Ultra: A3 Ultra VM の H200 GPU には、R550 GPU ドライバ バージョン以上が必要です。これは、GKE バージョン 1.31 で
latestドライバ バージョンとして使用できます。A3 Ultra VM の場合、gpu-driver-version=latestフィールドの値を GKE バージョン 1.31 で設定する必要があります。GKE バージョン 1.31.5-gke.1169000 以降では、gpu-driver-versionフラグを省略した場合を含め、デフォルトで R550 GPU ドライバ バージョンが A3 Ultra ノードに自動的にインストールされます。
GPUDirect RDMA を使用するには、次の追加要件が適用されます。
- マシンタイプに応じて、次の最小バージョンを使用します。
- A4: バージョン 1.32.2-gke.1475000 以降を使用します。
- A3 Ultra: バージョン 1.31.4-gke.1183000 以降を使用します。
- GKE ノードでは Container-Optimized OS ノードイメージを使用する必要があります。Ubuntu と Windows のノードイメージはサポートされません。
- GKE ワークロードは使用可能なすべての GPU を使用し、Pod は単一の GKE ノードで使用可能なすべてのセカンダリ ネットワーク インターフェース カード(NIC)を使用する必要があります。複数の Pod が単一の GKE ノードで RDMA を共有することはできません。
- この設定では、NCCL テストが実行されます。この NCCL テストを実行するには、最小 VM 割り当てが
2である必要があります(a4-highgpu-8gまたはa3-ultragpu-8gマシンタイプを使用する場合は 16 個の GPU)。 - GPUDirect RDMA は、NCCL Fast Socket または GPUDirect TCPX/TCPXO と互換性がありません。GPUDirect RDMA を使用するクラスタで、NCCL Fast Socket を有効にしたり、TCPX/TCPXO プラグインをインストールしたりしないでください。
- マシンタイプに応じて、次の最小バージョンを使用します。
選択したマシンタイプを使用できるロケーションを使用していることを確認します。詳細については、GPU のロケーションをご覧ください。
AI 最適化 GKE クラスタを作成する
このセクションの手順に沿って、AI 最適化 GKE クラスタの要件を満たす GKE クラスタを作成します。GPUDirect RDMA を使用するクラスタを作成するか、使用しないクラスタを作成するかを選択できます。
クラスタの作成に関する考慮事項
クラスタを作成する際は、次の情報を考慮してください。
- クラスタのロケーションを選択する:
- 選択したマシンタイプが利用可能なロケーションを使用していることを確認します。詳細については、GPU のロケーションをご覧ください。
- 高密度予約の場合は、ゾーンクラスタを作成できます。この場合は、
--regionフラグを--zone=COMPUTE_ZONEフラグに置き換えます。ここで、COMPUTE_ZONEはコントロール プレーンのゾーンです。 - 1,000 個を超えるノードで実行され、ノード間のネットワーク レイテンシが低いワークロードの場合は、リージョン クラスタを作成できます。パフォーマンスに影響を受けやすいノードを物理的にコロケーションするには、
--node-locationsフラグを使用して、単一のゾーン内に GPU ノードプールを作成します。
- ドライバのバージョンを選択する:
- ドライバのバージョンは、次のいずれかの値になります。
default: GKE ノード バージョンのデフォルトのドライバ バージョンをインストールします。デフォルトのドライバ バージョンの要件について詳しくは、要件セクションをご覧ください。latest: GKE バージョンに対応する最新のドライバ バージョンをインストールします。このオプションは、Container-Optimized OS を使用するノードでのみ使用できます。disabled: ドライバの自動インストールをスキップします。ノードプールの作成後に、手動でドライバをインストールする必要があります。
- GKE ノード バージョンのデフォルトと最新の GPU ドライバ バージョンの詳細については、NVIDIA GPU ドライバを手動でインストールするをご覧ください。
- ドライバのバージョンは、次のいずれかの値になります。
予約アフィニティを選択する:
- 予約の名前や予約内の特定のブロックの名前など、予約に関する情報を確認できます。これらの値を確認するには、将来の予約リクエストを表示するをご覧ください。
--reservation-affinityフラグは、specificまたはanyの値を取ることができます。ただし、高パフォーマンスの分散 AI ワークロードには、特定の予約を使用することをおすすめします。共有予約などの特定の予約を使用する場合は、
--reservationフラグの値を次の形式で指定します。projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。RESERVATION_NAME: 予約の名前。BLOCK_NAME: 予約内の特定のブロックの名前。
GPUDirect RDMA を使用せずにクラスタを作成する
GPUDirect RDMA を使用しないクラスタを作成するには、次の手順に沿って、CPU ベースのデフォルト ノードプールと GPU を搭載した追加のノードプールを含むクラスタを作成します。このアプローチにより、デフォルトのノードプールで他のサービスを実行できます。
クラスタを作成します。
gcloud container clusters create CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGION次のように置き換えます。
CLUSTER_NAME: 新しいクラスタの名前。CLUSTER_VERSION: 新しいクラスタのバージョン。構成をサポートする GKE のバージョンについては、要件をご覧ください。COMPUTE_REGION: 新しいクラスタのリージョン。ゾーンクラスタを作成する場合は、--regionフラグではなく--zoneフラグを使用します。例:--zone=COMPUTE_ZONE。COMPUTE_ZONEは、コントロール プレーンのゾーンに置き換えます。
次のいずれかのコマンドを使用して、GPU ベースのノードプールを作成します。実行する必要があるコマンドは、デプロイで使用する使用オプションによって異なります。使用オプションのプロビジョニング モデルに対応するタブを選択します。
予約で制限
予約バインド プロビジョニングの場合は、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME次のように置き換えます。
NODE_POOL_NAME: ノードプールの名前。COMPUTE_REGION: 新しいクラスタのリージョン。CLUSTER_NAME: 新しいクラスタの名前。COMPUTE_ZONE: ノードプールのゾーン。GPU_TYPE: GPU アクセラレータのタイプ。- A4 VM:
nvidia-b200と入力します。 - A3 Ultra VM:
nvidia-h200-141gbと入力します。
- A4 VM:
AMOUNT: ノードプール内のノードに接続する GPU の数。たとえば、a4-highgpu-8gVM とa3-ultragpu-8gVM はどちらも、GPU の数は8です。DRIVER_VERSION: インストールする NVIDIA ドライバのバージョン。default、latest、disabledのいずれかの値になります。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。NUM_NODES: ノードプールのノード数。RESERVATION_NAME: 予約の名前。この値を確認するには、将来の予約リクエストを表示するをご覧ください。BLOCK_NAME: 予約内の特定のブロックの名前。この値を確認するには、将来の予約リクエストを表示するをご覧ください。
Flex Start
Flex Start プロビジョニングの場合は、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --flex-start --enable-autoscaling --num-nodes=0 \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none [\ --enable-queued-provisioning]次のように置き換えます。
NODE_POOL_NAME: ノードプールの名前。COMPUTE_REGION: 新しいクラスタのリージョン。CLUSTER_NAME: 新しいクラスタの名前。COMPUTE_ZONE: ノードプールのゾーン。GPU_TYPE: GPU アクセラレータのタイプ。- A4 VM:
nvidia-b200と入力します。 - A3 Ultra VM:
nvidia-h200-141gbと入力します。
- A4 VM:
AMOUNT: ノードプール内のノードに接続する GPU の数。たとえば、a4-highgpu-8gVM とa3-ultragpu-8gVM はどちらも、GPU の数は8です。DRIVER_VERSION: インストールする NVIDIA ドライバのバージョン。default、latest、disabledのいずれかの値になります。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。TOTAL_MAX_NODES: ノードプール全体で自動的にスケーリングするノードの最大数。キューに格納されたプロビジョニングで Flex Start を使用する場合は、
--enable-queued-provisioningフラグを含めます。Flex Start の使用方法については、キューに格納されたプロビジョニングで Flex Start を使用して大規模なワークロードを実行するをご覧ください。
スポット
スポット プロビジョニングの場合は、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --spot次のように置き換えます。
NODE_POOL_NAME: ノードプールの名前。COMPUTE_REGION: 新しいクラスタのリージョン。CLUSTER_NAME: 新しいクラスタの名前。COMPUTE_ZONE: ノードプールのゾーン。GPU_TYPE: GPU アクセラレータのタイプ。- A4 VM:
nvidia-b200と入力します。 - A3 Ultra VM:
nvidia-h200-141gbと入力します。
- A4 VM:
AMOUNT: ノードプール内のノードに接続する GPU の数。たとえば、a4-highgpu-8gVM とa3-ultragpu-8gVM はどちらも、GPU の数は8です。DRIVER_VERSION: インストールする NVIDIA ドライバのバージョン。default、latest、disabledのいずれかの値になります。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。NUM_NODES: ノードプールのノード数。Spot VM を使用してクラスタを作成する方法については、Spot VM を使用して低コストでフォールト トレラントなワークロードを実行するをご覧ください。
次のセクションで
kubectlコマンドを実行できるように、クラスタに接続します。gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION次のように置き換えます。
CLUSTER_NAME: クラスタの名前。COMPUTE_REGION: コンピューティング リージョンの名前。詳細については、kubectl をインストールしてクラスタ アクセスを構成するをご覧ください。
GPUDirect RDMA を使用してクラスタを作成する
分散 AI ワークロードの場合、複数の GPU ノードがリンクされて 1 台のコンピュータとして動作することがよくあります。A4 VM と A3 Ultra VM には、NVIDIA ConnectX-7(CX7)NIC を基盤とする Titanium ML ネットワーク アダプタが付属しています。A4 VM と A3 Ultra VM はどちらも、RDMA over Converged Ethernet(RoCE)を使用して、ノード間の GPU 間トラフィックで 3.2 Tbps の非ブロッキングを実現します。RoCE は、AI ワークロードに高性能なクラウド エクスペリエンスを提供することで、複数の GPU 間でのスケーリングとコラボレーションを可能にします。
Google Cloud CLI と GPUDirect TCPX(A3 High VM)または TCPXO(A3 Mega VM)を使用して GKE クラスタを作成する方法については、Autopilot モードのクラスタで GPU ネットワーク帯域幅を最大にするまたは Standard モードのクラスタで GPU ネットワーク帯域幅を最大にするをご覧ください。
GPUDirect RDMA を使用して Autopilot モードまたは Standard モードで GKE クラスタを作成するには、次の手順を行います。これらの手順については、次のセクションで説明します。
- VPC とサブネットを作成する
- マルチネットワーキングを使用して GKE クラスタを作成する
- GKE ネットワーク オブジェクトを作成する
- RDMA バイナリをインストールして NCCL を構成する
- NCCL テストをデプロイして実行する
- GPUDirect-RDMA 用に Pod マニフェストを構成する
VPC とサブネットを作成する
A4 VM と A3 Ultra VM の両方に次の構成があります。
- NVLink で接続された仮想マシンあたり 8 個の NVIDIA B200(A4)または H200(A3 Ultra)GPU
- 2 つの Intel Emerald Rapids CPU
- GPU 間ネットワーキング用の 8 個の 400 Gbps CX-7 NIC
- 外部サービス用の 2 つの 200 Gbps Google Titanium NIC
分散トレーニングなどの AI ワークロードと ML ワークロードでは、ジョブの完了時間を短縮してパフォーマンスを最適化するために、強力なアクセラレーションが必要となります。高性能、高スループット、低レイテンシを必要とするワークロードの場合、GPUDirect RDMA は GPU との間のペイロードの転送に必要なネットワーク ホップを削減し、利用可能なネットワーク帯域幅をより効率的に使用します。GPUDirect RDMA は、GPUDirect を使用しない GPU と比較して、スループットを大幅に向上させるように設計されています。
CPU に関連付けられている Google Titanium NIC の 1 つが、GKE のデフォルト ネットワークを使用します。デフォルト ネットワークに十分な IP アドレス範囲がある場合は、この NIC 用に新しい VPC を作成する必要はありません。
これらのコマンドを使用すると、2 番目の CPU Titanium NIC(gVNIC)用に 1 つの VPC を作成し、8 つの CX-7 RDMA NIC 用に別の VPC を作成できます。
デプロイに合わせて環境変数を設定します。
export REGION="COMPUTE_REGION" export ZONE="COMPUTE_ZONE" export PROJECT="PROJECT_ID" export GVNIC_NETWORK_PREFIX="GVNIC_NETWORK_PREFIX" export RDMA_NETWORK_PREFIX="RDMA_NETWORK_PREFIX"次の変数を置き換えます。
COMPUTE_REGION: クラスタのリージョン。COMPUTE_ZONE: ノードプールのゾーン。PROJECT_ID: 実際の Google Cloud プロジェクト ID。GVNIC_NETWORK_PREFIX: A4 VM の場合はa4high-gvnic、A3 Ultra VM の場合はa3ultra-gvnic。RDMA_NETWORK_PREFIX: A4 VM の場合はa4high-rdma、A3 Ultra VM の場合はa3ultra-rdma。
2 つの VPC ネットワークを作成します。
# Create a VPC for the additional Google Titanium CPU NIC gcloud compute --project=${PROJECT} \ networks create \ ${GVNIC_NETWORK_PREFIX}-net \ --subnet-mode=custom gcloud compute --project=${PROJECT} \ networks subnets create \ ${GVNIC_NETWORK_PREFIX}-sub \ --network=${GVNIC_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.0.0/24 gcloud compute --project=${PROJECT} \ firewall-rules create \ ${GVNIC_NETWORK_PREFIX}-internal \ --network=${GVNIC_NETWORK_PREFIX}-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16 # Create HPC VPC for the RDMA NICs with 8 subnets. gcloud beta compute --project=${PROJECT} \ networks create ${RDMA_NETWORK_PREFIX}-net \ --network-profile=${ZONE}-vpc-roce \ --subnet-mode=custom # Create subnets for the HPC VPC. for N in $(seq 0 7); do gcloud compute --project=${PROJECT} \ networks subnets create \ ${RDMA_NETWORK_PREFIX}-sub-$N \ --network=${RDMA_NETWORK_PREFIX}-net \ --region=${REGION} \ --range=192.168.$((N+1)).0/24 & # offset to avoid overlap with gvnics done
マルチネットワーキングを使用して GKE クラスタを作成する
Autopilot
マルチネットワーキングを使用して GKE Autopilot クラスタを作成します。
gcloud container clusters create-auto CLUSTER_NAME \ --enable-multi-networking \ --cluster-version=CLUSTER_VERSION \ --region=COMPUTE_REGION次のように置き換えます。
CLUSTER_NAME: クラスタの名前。CLUSTER_VERSION: 新しいクラスタのバージョン。構成をサポートする GKE のバージョンを確認するには、要件セクションをご覧ください。COMPUTE_REGION: コンピューティング リージョンの名前。
次のセクションで
kubectlコマンドを実行できるように、クラスタに接続します。gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION次のように置き換えます。
CLUSTER_NAME: クラスタの名前。COMPUTE_REGION: コンピューティング リージョンの名前。
詳細については、kubectl をインストールしてクラスタ アクセスを構成するをご覧ください。
Standard
マルチネットワーキングを使用して GKE Standard クラスタと GPU ノードプールを作成します。
クラスタを作成します。
gcloud container clusters create CLUSTER_NAME \ --region=COMPUTE_REGION \ --cluster-version=CLUSTER_VERSION \ --enable-dataplane-v2 --enable-ip-alias --enable-multi-networking [\ --services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]次のように置き換えます。
CLUSTER_NAME: クラスタの名前。CLUSTER_VERSION: 新しいクラスタのバージョン。構成をサポートする GKE のバージョンを確認するには、要件セクションをご覧ください。COMPUTE_REGION: コンピューティング リージョンの名前。
必要に応じて、サービスと Pod のセカンダリ CIDR 範囲を明示的に指定できます。これらのオプション フラグを使用する場合は、次の変数を置き換えます。
SERVICE_CIDR: Service のセカンダリ CIDR の範囲。POD_CIDR: Pod のセカンダリ CIDR の範囲。
これらのフラグを使用する場合は、CIDR の範囲が追加のノード ネットワークのサブネット範囲と重複してないことを確認する必要があります。たとえば、
SERVICE_CIDR=10.65.0.0/19値とPOD_CIDR=10.64.0.0/19値の範囲が重複しないようにします。詳細については、Pod の IPv4 アドレス範囲を追加するをご覧ください。ノードプールを作成します。実行する必要があるコマンドは、デプロイで使用する使用オプションによって異なります。使用オプションのプロビジョニング モデルに対応するタブを選択します。
予約で制限
予約バインド プロビジョニングの場合は、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME \ --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7次のように置き換えます。
NODE_POOL_NAME: ノードプールの名前。COMPUTE_REGION: 新しいクラスタのリージョン。CLUSTER_NAME: 新しいクラスタの名前。COMPUTE_ZONE: ノードプールのゾーン。GPU_TYPE: GPU アクセラレータのタイプ。- A4 VM:
nvidia-b200と入力します。 - A3 Ultra VM:
nvidia-h200-141gbと入力します。
- A4 VM:
AMOUNT: ノードプール内のノードに接続する GPU の数。たとえば、a4-highgpu-8gVM とa3-ultragpu-8gVM はどちらも、GPU の数は8です。DRIVER_VERSION: インストールする NVIDIA ドライバのバージョン。default、latest、disabledのいずれかの値になります。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。NUM_NODES: ノードプールのノード数。Flex Start の場合、この値は0に設定する必要があります。RESERVATION_NAME: 予約の名前。この値を確認するには、将来の予約リクエストを表示するをご覧ください。BLOCK_NAME: 予約内の特定のブロックの名前。この値を確認するには、将来の予約リクエストを表示するをご覧ください。
Flex Start
Flex Start プロビジョニングの場合は、次のコマンドを実行します。
gcloud container node-pools create NODE_POOL_NAME \ --region COMPUTE_REGION --cluster CLUSTER_NAME \ --node-locations COMPUTE_ZONE \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \ --machine-type MACHINE_TYPE \ --num-nodes=NUM_NODES \ --flex-start --num-nodes=0 --enable-autoscaling \ --total-max-nodes TOTAL_MAX_NODES \ --no-enable-autorepair --location-policy=ANY \ --reservation-affinity=none \ [--enable-queued-provisioning \] --additional-node-network network=${GVNIC_NETWORK_PREFIX}-net,subnetwork=${GVNIC_NETWORK_PREFIX}-sub \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-0 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-1 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-2 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-3 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-4 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-5 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-6 \ --additional-node-network network=${RDMA_NETWORK_PREFIX}-net,subnetwork=${RDMA_NETWORK_PREFIX}-sub-7次のように置き換えます。
NODE_POOL_NAME: ノードプールの名前。COMPUTE_REGION: 新しいクラスタのリージョン。CLUSTER_NAME: 新しいクラスタの名前。COMPUTE_ZONE: ノードプールのゾーン。GPU_TYPE: GPU アクセラレータのタイプ。- A4 VM:
nvidia-b200と入力します。 - A3 Ultra VM:
nvidia-h200-141gbと入力します。
- A4 VM:
AMOUNT: ノードプール内のノードに接続する GPU の数。たとえば、a4-highgpu-8gVM とa3-ultragpu-8gVM はどちらも、GPU の数は8です。DRIVER_VERSION: インストールする NVIDIA ドライバのバージョン。default、latest、disabledのいずれかの値になります。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。MACHINE_TYPE: ノードの Compute Engine マシンタイプ。たとえば、A4 VM にはa4-highgpu-8gを使用し、A3 Ultra VM にはa3-ultragpu-8gを使用します。NUM_NODES: ノードプールのノード数。Flex Start の場合、この値は0に設定する必要があります。TOTAL_MAX_NODES: ノードプール全体における、ノードが自動スケーリングする最大数。
キューに格納されたプロビジョニングで Flex Start を使用する場合は、
--enable-queued-provisioningフラグを含めます。Flex Start の使用方法については、キューに格納されたプロビジョニングで Flex Start を使用して大規模なワークロードを実行するをご覧ください。
次のセクションで
kubectlコマンドを実行できるように、クラスタに接続します。gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION次のように置き換えます。
CLUSTER_NAME: クラスタの名前。COMPUTE_REGION: コンピューティング リージョンの名前。
詳細については、kubectl をインストールしてクラスタ アクセスを構成するをご覧ください。
GKE ネットワーク オブジェクトを作成する
前のセクションで作成した VPC ネットワークは、GKE ネットワーク パラメータ セットを使用して構成する必要があります。具体的には、2 番目の CPU Titanium NIC(gVNIC)を NetDevice モードで構成し、8 つの CX-7 RDMA NIC をそれぞれ RDMA モードで構成する必要があります。
このコマンドでは、次の名前を使用します。
- CPU Titanium NIC(gVNIC)VPC の名前は
${GVNIC_NETWORK_PREFIX}-netで、サブネットの名前は${GVNIC_NETWORK_PREFIX}-subです。 - CX-7 RDMA NIC の VPC の名前は
${RDMA_NETWORK_PREFIX}-netで、サブネットの名前は${RDMA_NETWORK_PREFIX}-sub-[0…7]です。
次のコマンドを実行して、GKE ネットワーク オブジェクトを作成します。
kubectl apply -f - <<EOF
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: gvnic-1
spec:
vpc: ${GVNIC_NETWORK_PREFIX}-net
vpcSubnet: ${GVNIC_NETWORK_PREFIX}-sub
deviceMode: NetDevice
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: gvnic-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: gvnic-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-0
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-0
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-0
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-0
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-1
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-1
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-1
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-1
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-2
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-2
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-2
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-2
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-3
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-3
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-3
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-3
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-4
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-4
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-4
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-4
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-5
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-5
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-5
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-5
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-6
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-6
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-6
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-6
---
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: rdma-7
spec:
vpc: ${RDMA_NETWORK_PREFIX}-net
vpcSubnet: ${RDMA_NETWORK_PREFIX}-sub-7
deviceMode: RDMA
---
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: rdma-7
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: rdma-7
EOF
RDMA バイナリをインストールして NCCL を構成する
次の DaemonSet を適用して、各ノードに RDMA バイナリと NCCL ライブラリをインストールします。基盤となる各 VM に、RDMA バイナリは /home/kubernetes/bin/gib ディレクトリにインストールされ、NCCL ライブラリは /home/kubernetes/bin/nvidia/lib64 ディレクトリにインストールされます。
Autopilot
GKE Autopilot モードの場合は、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer-autopilot.yaml
Standard
GKE Standard モードの場合は、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/gpudirect-rdma/nccl-rdma-installer.yaml
NCCL テストを実行する
プロビジョニングされたクラスタの機能を検証するには、NCCL テストを実行します。手順については、NCCL テストをデプロイして実行するをご覧ください。
GPUDirect RDMA 用に Pod マニフェストを構成する
GPUDirect RDMA を使用してワークロードを実行するには、次の手順で Pod マニフェストを構成します。
Pod メタデータに次のアノテーションを追加します。
Autopilot
GKE Autopilot モードでは、次のアノテーションを使用します。
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"gvnic-1"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]Standard
GKE Standard モードの次のアノテーションには
gvnic-1仕様が含まれていませんが、ワークロードで必要な場合は追加できます。GKE Standard モードでは、次のアノテーションを使用します。
metadata: annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth2","network":"rdma-0"}, {"interfaceName":"eth3","network":"rdma-1"}, {"interfaceName":"eth4","network":"rdma-2"}, {"interfaceName":"eth5","network":"rdma-3"}, {"interfaceName":"eth6","network":"rdma-4"}, {"interfaceName":"eth7","network":"rdma-5"}, {"interfaceName":"eth8","network":"rdma-6"}, {"interfaceName":"eth9","network":"rdma-7"} ]ノードセレクタを使用して、選択した GPU タイプと特定の予約を指定します。
spec: nodeSelector: cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific"次のように置き換えます。
ACCELERATOR: Compute Engine の容量予約で予約したアクセラレータ。次のいずれかの値を使用する必要があります。nvidia-b200: A4 VM 用 NVIDIA B200(180 GB)nvidia-h200-141gb: A3 Ultra VM 用の NVIDIA H200(141 GB)
RESERVATION_NAME: Compute Engine の容量予約の名前。
共有予約、または予約の特定のブロックとサブブロックを使用するには、予約済みゾーンパスリソースを使用するの該当するセクションをご覧ください。
次の Volume を Pod 仕様に追加します。
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia - name: gib hostPath: path: /home/kubernetes/bin/gibGPU をリクエストするコンテナに、次のボリューム マウント、環境変数、リソースを追加します。ワークロード コンテナは、8 個の GPU すべてをリクエストする必要があります。
Autopilot
GKE Autopilot モードの場合は、次のリソースを構成します。
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia readOnly: true - name: gib mountPath: /usr/local/gib readOnly: true env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8Standard
GKE Standard モードの場合は、次のリソースを構成します。
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia - name: gib mountPath: /usr/local/gib env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 8ワークロード コンテナから次のシェル スクリプトを使用して、NCCL を構成するために必要なすべての環境変数を設定します。
source /usr/local/gib/scripts/set_nccl_env.sh
次のタブに、完成した Pod マニフェストの例を示します。
Autopilot
GKE Autopilot モードの場合、完成した Pod マニフェストは次のようになります。
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"gvnic-1"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
readOnly: true
- name: gib
mountPath: /usr/local/gib
readOnly: true
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
Standard
GKE Standard モードの場合、完成した Pod マニフェストは次のようになります。
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth2","network":"rdma-0"},
{"interfaceName":"eth3","network":"rdma-1"},
{"interfaceName":"eth4","network":"rdma-2"},
{"interfaceName":"eth5","network":"rdma-3"},
{"interfaceName":"eth6","network":"rdma-4"},
{"interfaceName":"eth7","network":"rdma-5"},
{"interfaceName":"eth8","network":"rdma-6"},
{"interfaceName":"eth9","network":"rdma-7"}
]
spec:
...
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: gib
hostPath:
path: /home/kubernetes/bin/gib
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
- name: gib
mountPath: /usr/local/gib
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 8
...
GPUDirect RDMA を使用するクラスタのネットワーク パフォーマンスをテストする
プロビジョニングされたクラスタの機能を検証することをおすすめします。これを行うには、Google 環境向けに最適化された NVIDIA Collective Communications Library(NCCL)テストである NCCL/gIB テストを使用します。
次のステップ
- トポロジ対応スケジューリング(TAS)と Kueue を使用して GKE クラスタでワークロードをスケジュールする方法については、トポロジ対応スケジューリングで GKE ワークロードをスケジュールするをご覧ください。
- GKE クラスタと AI ワークロードに関連する一般的なイベントの管理の詳細については、AI 最適化 GKE クラスタを管理するをご覧ください。
- 環境をテストして適切な設定と最適化を行う方法については、NCCL/gIB を使用してクラスタ ネットワーキングを最適化するをご覧ください。