本文說明如何建立 AI 最佳化的 Google Kubernetes Engine (GKE) 叢集,使用 A4X Max Compute Engine 執行個體支援 AI 和 ML 工作負載。
A4X Max 和 A4X 系列可透過 NVIDIA 多節點 NVLink (MNNVL) 系統執行大規模 AI/ML 集群,這項機架規模的解決方案可提升 GPU 效能和效力。這些機器提供目標工作負載放置、拓撲感知排程和進階叢集維護控制等功能。詳情請參閱「叢集管理功能」。透過 A4X Max,GKE 還能自動設定網路,簡化叢集設定。
AI 和機器學習工作負載 (例如分散式訓練) 需要強大的加速功能,才能縮短作業完成時間,進而提升效能。GKE 提供單一平台介面,可為貴機構執行各種工作負載,減少管理多個平台的營運負擔。您可以執行高效能分散式預先訓練、模型微調、模型推論、應用程式服務和支援服務等工作負載。對於需要高效能、高處理量和低延遲的工作負載,GPUDirect RDMA 可減少將酬載傳輸至 GPU 和從 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 驅動程式版本,預設為啟用。
- 預設啟用的「以驅動程式為基礎的連貫記憶體管理」(CDMM)。NVIDIA 建議 Kubernetes 叢集啟用這個模式,解決記憶體過度回報的問題。CDMM 可讓驅動程式管理 GPU 記憶體,而非作業系統 (OS)。這種做法可協助您避免 OS 線上處理 GPU 記憶體,並將 GPU 記憶體公開為 OS 的非統一記憶體存取 (NUMA) 節點。啟用 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機型不支援多重網路。
建立叢集時的注意事項
建立叢集時,請注意下列事項:
- 選擇叢集位置:
- 選擇驅動程式版本:
- 驅動程式版本可以是下列其中一個值:
- 如要進一步瞭解 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:預訂中的特定區塊名稱。
此外,我們也建議使用以子區塊為目標的預留資源,將運算執行個體放置在
BLOCK_NAME內的單一子區塊中。在路徑結尾新增下列內容:/reservationSubBlocks/SUB_BLOCK_NAME將
SUB_BLOCK_NAME替換為子區塊的名稱。
建立使用 A4X Max 和 GPUDirect RDMA 的 AI 適用 GKE 叢集
對於分散式 AI 工作負載,通常會將多個 GPU 節點連結在一起,當做單一電腦運作。A4X Max 是以 NVIDIA GB300 NVL72 機架式架構為基礎的百億級平台。A4X Max 運算執行個體採用多層次、階層式網路架構,並以符合軌道 (rail-aligned) 設計為基礎,可針對各種通訊類型最佳化效能。這個機型可為 AI 工作負載提供高效能雲端體驗,讓您在多個 GPU 之間進行擴充及協作。如要進一步瞭解 A4X Max 的網路架構,包括網路頻寬和 NIC 配置,請參閱A4X Max 機型 (裸機)。
如要建立使用 GPUDirect RDMA 和 MNNVL 的 A4X Max GKE Standard 叢集,請完成下列各節所述的步驟:
- 建立 GKE 叢集
- 建立工作負載政策
- 使用 A4X Max 建立節點集區
- 使用
asapd-lite設定 MRDMA NIC - 安裝 NVIDIA Compute Domain CRD 和 DRA 驅動程式
- 為 RDMA 和 IMEX 網域設定工作負載資訊清單
這些操作說明會使用加速器網路設定檔,為 A4X Max 節點自動設定虛擬私有雲網路和子網路。或者,您也可以明確指定虛擬私有雲網路和子網路。
建立 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:服務的次要 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 的工作負載政策。
建立 HIGH_THROUGHPUT 工作負載政策,並將 accelerator_topology 欄位設為 1x72。
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 建立節點集區
建立下列設定檔,以便使用節點集區預先配置巨頁:
cat > node_custom.yaml <<EOF linuxConfig: hugepageConfig: hugepage_size2m: 4096 EOF export NODE_CUSTOM=node_custom.yaml建立 A4X 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 個節點以下。建議使用 18 個節點,透過 NVLink 網域取得一個子區塊中1x72的 GPU 拓撲。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.yaml驗證
asapd-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 Compute Domain CRD 和 DRA 驅動程式
下列步驟會安裝 NVIDIA Compute Domain CRD 和 DRA 驅動程式,以啟用 MNNVL。詳情請參閱「NVIDIA DRA Driver for GPUs」。
確認您已在開發環境中安裝 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.sh新增 NVIDIA Helm 存放區:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update為 DRA 驅動程式建立
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 EOF請將
POD_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在 Pod 規格中新增下列磁碟區:
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia將下列磁碟區掛接、環境變數和資源新增至要求 GPU 的容器。工作負載容器必須要求所有四個 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-channel請將
NUM_NODES改成工作負載所需的節點數量。建立 ResourceClaimTemplate,透過 DRANET 分配網路資源,並為 Pod 要求 RDMA 裝置:
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: 8指定 Pod 使用的 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在容器映像檔中安裝最新的使用者空間程式庫:
Debian 12 以上版本/Ubuntu 20.04 以上版本 (.deb 封裝)
apt update apt install curl # Fetch DOCA OFED userspace libraries export DOCA_URL="https://linux.mellanox.com/public/repo/doca/latest/ubuntu22.04/arm64-sbsa/" export BASE_URL="https://linux.mellanox.com/public/repo/doca" curl "${BASE_URL}/GPG-KEY-Mellanox.pub" | gpg --dearmor -o /etc/apt/trusted.gpg.d/GPG-KEY-Mellanox.pub echo "deb [signed-by=/etc/apt/trusted.gpg.d/GPG-KEY-Mellanox.pub] ${DOCA_URL} ./" | tee /etc/apt/sources.list.d/doca.list apt update apt install doca-ofed-userspace # Upgrade to latest NCCL for best compatibility apt install --only-upgrade --allow-change-held-packages 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
測試網路效能
建議您驗證已佈建叢集的功能。如要進行這項操作,請使用 NCCL/gIB 測試,也就是針對 Google 環境最佳化的 NVIDIA Collective Communications Library (NCCL) 測試。
詳情請參閱「在採用 A4X Max 的自訂 GKE 叢集上執行 NCCL」。
後續步驟
- 如要瞭解如何使用 TAS 和 Kueue,在 GKE 叢集上安排工作負載時程,請參閱「使用 Topology Aware Scheduling 安排 GKE 工作負載時程」。
- 如要瞭解如何管理與 GKE 叢集和 AI 工作負載相關的常見事件,請參閱「管理 AI 最佳化 GKE 叢集」。