このドキュメントでは、A4X Max Compute Engine インスタンスを使用して AI と ML のワークロードをサポートする、AI 最適化された Google Kubernetes Engine(GKE)クラスタを作成する方法について説明します。
A4X Max シリーズと A4X シリーズでは、NVIDIA Multi-Node NVLink(MNNVL)システム(GPU の電力とパフォーマンスを向上させるラック規模のソリューション)を使用して、大規模な AI/ML クラスタを実行できます。これらのマシンは、ターゲットを絞ったワークロード配置、トポロジーを考慮したスケジューリング、高度なクラスタ メンテナンス制御などの機能を提供します。詳細については、クラスタ管理機能をご覧ください。A4X Max を使用すると、GKE は自動ネットワーキング設定も提供し、クラスタ構成を簡素化します。
分散トレーニングなどの AI ワークロードと ML ワークロードでは、ジョブの完了時間を短縮してパフォーマンスを最適化するために、強力なアクセラレーションが必要となります。GKE は、組織の多様なワークロードを実行するための単一のプラットフォーム サーフェスを提供し、複数のプラットフォームを管理する運用上の負担を軽減します。高パフォーマンスの分散事前トレーニング、モデルのファインチューニング、モデル推論、アプリケーション サービング、サポート サービスなどのワークロードを実行できます。高性能、高スループット、低レイテンシを必要とするワークロードの場合、GPUDirect RDMA は、GPU 間でペイロードを転送するために必要なネットワーク ホップを削減します。このアプローチでは、利用可能なネットワーク帯域幅をより効率的に使用します。詳細については、GPU ネットワーキング スタックをご覧ください。
このドキュメントでは、ワークロードのニーズに基づいてクラスタを構成する際に最大限の柔軟性を確保するために、Google Cloud CLI を使用して GKE クラスタを作成する方法について説明します。gcloud CLI を使用して他のマシンタイプでクラスタを作成するには、以下をご覧ください。
- A4X: A4X を使用する AI によって最適化されたカスタム GKE クラスタを作成します。
- A4 または A3 Ultra: A4 または A3 Ultra を使用するクラスタを作成するには、A4 または A3 Ultra を使用する AI によって最適化されたカスタム GKE クラスタを作成するをご覧ください。これらのマシンシリーズは、GPUDirect RDMA の有無にかかわらず、ワークロードの実行に使用できます。
また、Cluster Toolkit を使用して、多くのユースケースのベスト プラクティスを反映したデフォルト設定でクラスタをすばやくデプロイすることもできます。詳細については、デフォルト構成で AI に最適化された GKE クラスタを作成するをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
容量を取得する
将来の予約を作成することで、A4X Max コンピューティング インスタンスの容量を取得できます。将来の予約の詳細については、使用オプションを選択するの表の AI Hypercomputer の将来の予約の列をご覧ください。
将来の予約で容量を取得するには、容量を取得する方法の表の AI Hypercomputer の将来の予約の行をご覧ください。
要件
A4X Max コンピューティング インスタンスを使用する AI 最適化 GKE クラスタには、次の要件が適用されます。
A4X Max の場合は、次のいずれかのバージョンを使用する必要があります。
- 1.35 以降の場合は、GKE バージョン 1.35.0-gke.2745000 以降を使用します。
- 1.34 の場合は、GKE バージョン 1.34.3-gke.1318000 以降を使用します。
これらのバージョンにより、A4X Max で次のものが使用されるようになります。
- R580.95.05(A4X Max の最小 GPU ドライバ バージョン)。デフォルトで有効になっています。
- デフォルトで有効になっている Coherent Driver-based Memory Management(CDMM)。NVIDIA は、メモリの過剰なレポートを解決するために、Kubernetes クラスタでこのモードを有効にすることを推奨しています。CDMM を使用すると、オペレーティング システム(OS)ではなくドライバを介して GPU メモリを管理できます。このアプローチにより、GPU メモリの OS オンライン化を回避し、GPU メモリを不均一メモリアクセス(NUMA)ノードとして OS に公開できます。CDMM が有効になっている場合、マルチインスタンス GPU はサポートされていません。CDMM について詳しくは、ハードウェアとソフトウェアのサポートをご覧ください。
- GPUDirect RDMA と MNNVL。A4X Max ノードプールで A4X Max のネットワーキング機能を使用できるようにするために有効にすることをおすすめします。
GKE ノードで Container-Optimized OS ノードイメージが使用されている必要があります。Ubuntu と Windows のノードイメージはサポートされません。
GKE ワークロードでは、使用可能なすべての GPU を使用し、Pod では単一の GKE ノードで使用可能なすべてのセカンダリ NIC を使用する必要があります。複数の Pod が単一の GKE ノードで RDMA を共有することはできません。
A4X Max を使用してクラスタを作成するには、予約バインド プロビジョニング モデルを使用する必要があります。他のプロビジョニング モデルはサポートされていません。
次の手順では、DRANET を使用して、A4X Max で AI 最適化 GKE クラスタを構成します。
a4x-maxgpu-4g-metalマシンタイプではマルチ ネットワーキングはサポートされていません。
クラスタの作成に関する考慮事項
クラスタを作成する際は、次の情報を考慮してください。
- クラスタのロケーションを選択する:
- 選択したマシンタイプが利用可能なロケーションを使用していることを確認します。詳細については、アクセラレータの可用性をご覧ください。
- 本番環境のワークロードに推奨されるリージョン クラスタにノードプールを作成する場合は、
--node-locationsフラグを使用して GKE ノードのゾーンを指定できます。
- ドライバのバージョンを選択する:
- ドライバのバージョンは、次のいずれかの値になります。
default: GKE ノード バージョンのデフォルト ドライバ バージョンをインストールします。デフォルトのドライバ バージョンの要件について詳しくは、要件セクションをご覧ください。latest: GKE バージョンに対応する最新のドライバ バージョンをインストールします。このオプションは、Container-Optimized OS を使用するノードでのみ使用できます。disabled: ドライバの自動インストールをスキップします。ノードプールの作成後に、ドライバを手動でインストールする必要があります。
- GKE ノード バージョンのデフォルトの GPU ドライバ バージョンと最新の 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: 予約内の特定のブロックの名前。
また、コンピューティング インスタンスが
BLOCK_NAME内の単一のサブブロックに配置されるように、サブブロックをターゲットとする予約を使用することをおすすめします。パスの末尾に以下を追加します。/reservationSubBlocks/SUB_BLOCK_NAMESUB_BLOCK_NAMEは、サブブロックの名前に置き換えます。
A4X Max と GPUDirect RDMA を使用する AI 最適化 GKE クラスタを作成する
分散 AI ワークロードの場合、複数の GPU ノードがリンクされて 1 台のコンピュータとして動作することがよくあります。A4X Max は、NVIDIA GB300 NVL72 ラックスケール アーキテクチャに基づくエクサスケール プラットフォームです。A4X Max コンピューティング インスタンスは、レール整列型の設計による階層型ネットワーキング アーキテクチャを使用して、さまざまな通信タイプのパフォーマンスを最適化します。このマシンタイプは、AI ワークロードに高性能なクラウド エクスペリエンスを提供することで、複数の GPU 間でのスケーリングとコラボレーションを可能にします。ネットワーク帯域幅や NIC の配置など、A4X Max のネットワーク アーキテクチャの詳細については、A4X Max マシンタイプ(ベアメタル)をご覧ください。
GPUDirect RDMA と MNNVL を使用する A4X Max を使用して GKE Standard クラスタを作成するには、次のセクションで説明する手順を完了します。
- GKE クラスタを作成する
- ワークロード ポリシーを作成する
- A4X Max を使用してノードプールを作成する
asapd-liteを使用して MRDMA NIC を構成する- NVIDIA コンピューティング ドメイン CRD と DRA ドライバをインストールする
- RDMA と IMEX ドメイン用にワークロード マニフェストを構成する
この手順では、アクセラレータ ネットワーク プロファイルを使用して、A4X Max ノードの VPC ネットワークとサブネットを自動的に構成します。または、VPC ネットワークとサブネットを明示的に指定することもできます。
GKE クラスタを作成する
GKE Standard クラスタを作成します。
gcloud container clusters create CLUSTER_NAME \ --enable-dataplane-v2 \ --enable-ip-alias \ --location=COMPUTE_REGION \ --cluster-version=CLUSTER_VERSION \ --no-enable-shielded-nodes [\ --services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR \ --addons=GcpFilestoreCsiDriver=ENABLED]次のように置き換えます。
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 アドレス範囲を追加するをご覧ください。
次のセクションで
kubectlコマンドを実行するには、クラスタに接続します。gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION次のように置き換えます。
CLUSTER_NAME: クラスタの名前。COMPUTE_REGION: コンピューティング リージョンの名前。
詳細については、kubectl をインストールしてクラスタ アクセスを構成するをご覧ください。
ワークロード ポリシーの作成
パーティションを作成するには、ワークロード ポリシーが必要です。詳細については、MIG のワークロード ポリシーをご覧ください。
accelerator_topology フィールドが 1x72 に設定された HIGH_THROUGHPUT ワークロード ポリシーを作成します。
gcloud beta compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
--type HIGH_THROUGHPUT \
--accelerator-topology 1x72 \
--project PROJECT \
--region COMPUTE_REGION
次のように置き換えます。
WORKLOAD_POLICY_NAME: ワークロード ポリシーの名前。PROJECT: プロジェクトの名前。COMPUTE_REGION: コンピューティング リージョンの名前。
A4X Max を使用してノードプールを作成する
次の構成ファイルを作成して、ノードプールで hugepage を事前割り当てします。
cat > node_custom.yaml <<EOF linuxConfig: hugepageConfig: hugepage_size2m: 4096 EOF export NODE_CUSTOM=node_custom.yamlA4X Max ノードプールを作成します。
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=COMPUTE_REGION \ --node-locations=COMPUTE_ZONE \ --num-nodes=NODE_COUNT \ --placement-policy=WORKLOAD_POLICY_NAME \ --machine-type=a4x-maxgpu-4g-metal \ --accelerator=type=nvidia-gb300,count=4,gpu-driver-version=latest \ --system-config-from-file=${NODE_CUSTOM} \ --accelerator-network-profile=auto \ --node-labels=cloud.google.com/gke-networking-dra-driver=true,cloud.google.com/gke-dpv2-unified-cni=cni-migration \ --reservation-affinity=specific \ --reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUB_BLOCK_NAME次のように置き換えます。
NODE_POOL_NAME: ノードプールの名前。CLUSTER_NAME: クラスタの名前。COMPUTE_REGION: クラスタのコンピューティング リージョン。COMPUTE_ZONE: ノードプールのゾーン。NODE_COUNT: ノードプールのノード数。18 個以下のノードにする必要があります。NVLink ドメインを使用して 1 つのサブブロックで1x72の GPU トポロジを取得するには、18 個のノードを使用することをおすすめします。WORKLOAD_POLICY_NAME: 以前に作成したワークロード ポリシーの名前。RESERVATION_NAME: 予約の名前。この値を確認するには、将来の予約リクエストを表示するをご覧ください。BLOCK_NAME: 予約内の特定のブロックの名前。この値を確認するには、将来の予約リクエストを表示するをご覧ください。
このコマンドは、
autoアクセラレータ ネットワーク プロファイルを使用して、単一ゾーン内のすべての A4X Max ノードを接続するネットワークを自動的に作成します。--accelerator-network-profile=autoフラグを使用してノードプールを作成すると、GKE はノードにgke.networks.io/accelerator-network-profile: autoラベルを自動的に追加します。これらのノードでワークロードをスケジュールするには、ワークロードのnodeSelectorフィールドにこのラベルを含める必要があります。
asapd-lite を使用して MRDMA NIC を構成する
asapd-lite DaemonSet は MRDMA NIC を構成します。asapd-lite DaemonSet が異常な場合は、RDMA 接続がない可能性があります。
DaemonSet をインストールします。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/asapd-lite-installer/asapd-lite-installer-a4x-max-bm-cos.yamlasapd-liteDaemonSet のレプリカを検証します。kubectl get daemonset -n kube-system asapd-lite出力は次のようになります。
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE asapd-lite 18 18 18 18 18 <none> 5mREADYレプリカの数は、ノードプールで作成され、正常な状態のノードの数と一致している必要があります。
NVIDIA コンピューティング ドメイン CRD と DRA ドライバをインストールする
次の手順では、NVIDIA Compute Domain CRD と DRA ドライバをインストールして、MNNVL を使用できるようにします。詳細については、GPU 用の NVIDIA DRA ドライバをご覧ください。
開発環境に Helm がインストールされていることを確認します。Helm は Cloud Shell に事前にインストールされています。
特定の Helm バージョンの要件はありませんが、次のコマンドを使用すると、Helm がインストールされていることを確認できます。
helm version出力が
Command helm not foundのようになる場合は、Helm CLI をインストールできます。curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \ && chmod 700 get_helm.sh \ && ./get_helm.shNVIDIA Helm リポジトリを追加します。
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateDRA ドライバの
ResourceQuotaオブジェクトを作成します。export POD_QUOTA=POD_QUOTA kubectl create ns nvidia-dra-driver-gpu kubectl apply -n nvidia-dra-driver-gpu -f - << EOF apiVersion: v1 kind: ResourceQuota metadata: name: nvidia-dra-driver-gpu-quota spec: hard: pods: ${POD_QUOTA} scopeSelector: matchExpressions: - operator: In scopeName: PriorityClass values: - system-node-critical - system-cluster-critical EOFPOD_QUOTAは、クラスタ内の A4X Max ノード数の 2 倍に 1 を加えた数以上に置き換えます。たとえば、クラスタに 18 個の A4X Max ノードがある場合は、変数を 37 以上に設定する必要があります。ComputeDomain CRD と DRA ドライバをインストールします。
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --set controller.args.v=4 --set kubeletPlugin.args.v=4 \ --version="25.8.0" \ --create-namespace \ --namespace nvidia-dra-driver-gpu \ -f <(cat <<EOF nvidiaDriverRoot: /home/kubernetes/bin/nvidia resources: gpus: enabled: false controller: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "nvidia.com/gpu" operator: "DoesNotExist" kubeletPlugin: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-accelerator operator: In values: - nvidia-gb300 - key: kubernetes.io/arch operator: In values: - arm64 tolerations: - key: nvidia.com/gpu operator: Equal value: present effect: NoSchedule - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule EOF )
RDMA と IMEX ドメイン用にワークロード マニフェストを構成する
Arm ノードでワークロードをスケジュールするノード アフィニティ ルールを追加します。
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: - arm64次の Volume を Pod 仕様に追加します。
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidiaGPU をリクエストするコンテナに、次のボリューム マウント、環境変数、リソースを追加します。ワークロード コンテナは、4 つの GPU すべてをリクエストする必要があります。
containers: - name: my-container volumeMounts: - name: library-dir-host mountPath: /usr/local/nvidia env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 resources: limits: nvidia.com/gpu: 4ワークロードの
ComputeDomainリソースを作成します。apiVersion: resource.nvidia.com/v1beta1 kind: ComputeDomain metadata: name: a4x-max-compute-domain spec: numNodes: NUM_NODES channel: resourceClaimTemplate: name: a4x-max-compute-domain-channelNUM_NODESは、ワークロードに必要なノードの数に置き換えます。DRANET を使用してネットワーク リソースを割り当て、Pod の RDMA デバイスをリクエストする ResourceClaimTemplate を作成します。
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-mrdma spec: spec: devices: requests: - name: req-mrdma exactly: deviceClassName: mrdma.google.com allocationMode: ExactCount count: 8Pod が使用する ResourceClaimTemplate を指定します。
spec: ... volumes: ... containers: - name: my-container ... resources: limits: nvidia.com/gpu: 4 claims: - name: compute-domain-channel - name: rdma ... resourceClaims: - name: compute-domain-channel resourceClaimTemplateName: a4x-max-compute-domain-channel - name: rdma resourceClaimTemplateName: all-mrdmaユーザー コンテナ イメージに userspace ライブラリと libnccl パッケージがインストールされていることを確認します。
apt update -y apt install -y curl export DOCA_URL="https://linux.mellanox.com/public/repo/doca/3.1.0/ubuntu22.04/arm64-sbsa/" BASE_URL=$([ "${DOCA_PREPUBLISH:-false}" = "true" ] && echo https://doca-repo-prod.nvidia.com/public/repo/doca || echo https://linux.mellanox.com/public/repo/doca) DOCA_SUFFIX=${DOCA_URL#*public/repo/doca/}; DOCA_URL="$BASE_URL/$DOCA_SUFFIX" curl $BASE_URL/GPG-KEY-Mellanox.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/GPG-KEY-Mellanox.pub echo "deb [signed-by=/etc/apt/trusted.gpg.d/GPG-KEY-Mellanox.pub] $DOCA_URL ./" > /etc/apt/sources.list.d/doca.list apt update apt -y install doca-ofed-userspace # The installed libnccl2 is 2.27.7, to upgrade to 2.28.9 as we recommend apt install --only-upgrade --allow-change-held-packages -y libnccl2 libnccl-dev
完成した Pod 仕様は次のようになります。
apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
name: a4x-max-compute-domain
spec:
numNodes: NUM_NODES
channel:
resourceClaimTemplate:
name: a4x-max-compute-domain-channel
---
apiVersion: apps/v1
kind: Pod
metadata:
name: my-pod
labels:
k8s-app: my-pod
spec:
...
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
volumes:
- name: library-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
hostNetwork: true
containers:
- name: my-container
volumeMounts:
- name: library-dir-host
mountPath: /usr/local/nvidia
env:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
resources:
limits:
nvidia.com/gpu: 4
claims:
- name: compute-domain-channel
- name: rdma
...
resourceClaims:
- name: compute-domain-channel
resourceClaimTemplateName: a4x-max-compute-domain-channel
- name: rdma
resourceClaimTemplateName: all-mrdma
ネットワーク パフォーマンスをテストする
プロビジョニングされたクラスタの機能を検証することをおすすめします。これを行うには、Google 環境向けに最適化された NVIDIA Collective Communications Library(NCCL)テストである NCCL/gIB テストを使用します。
詳細については、A4X Max を使用するカスタム GKE クラスタで NCCL を実行するをご覧ください。
次のステップ
- TAS と Kueue を使用して GKE クラスタでワークロードをスケジュールする方法については、トポロジ対応スケジューリングで GKE ワークロードをスケジュールするをご覧ください。
- GKE クラスタと AI ワークロードに関連する一般的なイベントの管理については、AI 最適化 GKE クラスタを管理するをご覧ください。