本頁面說明如何建立 AI 最佳化的 Google Kubernetes Engine (GKE) 叢集,使用 A4X 虛擬機器 (VM) 支援 AI 和 ML 工作負載。如要進一步瞭解 A4X,請參閱 A4X 系列。
A4X 機器系列專為執行大規模 AI/機器學習叢集而設計,提供目標工作負載放置、進階叢集維護控制項和拓撲感知排程等功能。詳情請參閱叢集管理總覽。
GKE 提供單一平台介面,可為貴機構執行各種工作負載,減少管理多個平台的營運負擔。您可以執行高效能分散式預先訓練、模型微調、模型推論、應用程式服務和支援服務等工作負載。
本頁面說明如何使用 Google Cloud CLI 建立 GKE 叢集,根據工作負載需求彈性設定叢集。或者,您也可以選擇使用 Cluster Toolkit,以預設設定快速部署叢集,這些設定反映了許多應用情境的最佳做法。
- 詳情請參閱「使用預設設定建立 AI 適用 GKE 叢集」。
- 如要建立使用 A4 或 A3 Ultra 的叢集,請參閱「建立使用 A4 或 A3 Ultra 的自訂 AI 最佳化 GKE 叢集」。
使用 GPUDirect RDMA 的叢集設定選項
如要使用 Google Cloud CLI 建立叢集,請選擇下列其中一個叢集設定選項:
- 如果您打算執行分散式 AI 工作負載:請按照本頁的操作說明,使用 GPUDirect RDMA 建立 GKE 叢集。
- 如果您不打算執行分散式 AI 工作負載:請建立 GKE 叢集,但不要使用 GPUDirect RDMA。詳情請參閱「建立不含 GPUDirect RDMA 的叢集」。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 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) -
服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer) - 儲存空間管理員 (
roles/storage.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
取得容量
您可以建立未來預留項目,取得 A4X VM 的容量。如要進一步瞭解未來預留項目,請參閱「選擇用量方案」表格中的「AI Hypercomputer 未來預留項目」欄。
如要透過未來預留項目取得容量,請參閱「如何取得容量」表格中的「AI Hypercomputer 中的未來預留項目」列。
需求條件
使用 A4X VM 的 AI 最佳化 GKE 叢集必須符合下列條件:
如果是 A4X,請務必使用 GKE 1.33.4-gke.1036000 以上版本 (適用於 1.33 以上版本)。如果是 1.32,請使用 GKE 1.32.8-gke.1108000 以上版本。這些版本可確保 A4X 使用下列項目:
- R580,這是 A4X 的最低 GPU 驅動程式版本。
- 預設啟用的「以驅動程式為基礎的連貫記憶體管理」(CDMM)。NVIDIA 建議 Kubernetes 叢集啟用這個模式,以解決記憶體過度回報的問題。CDMM 可讓驅動程式管理 GPU 記憶體,而非作業系統 (OS)。這種做法可協助您避免 OS 線上化 GPU 記憶體,並將 GPU 記憶體公開為 OS 的非統一記憶體存取 (NUMA) 節點。啟用 CDMM 時,系統不支援多執行個體 GPU。如要進一步瞭解 CDMM,請參閱「硬體和軟體支援」。
- 建議啟用 GPUDirect RDMA,讓 A4X 節點集區使用 A4X 的網路功能。
GKE 節點必須使用 Container-Optimized OS 節點映像檔。系統不支援 Ubuntu 和 Windows 節點映像檔。
GKE 工作負載必須使用所有可用的 GPU,且 Pod 必須使用單一 GKE 節點上的所有可用次要 NIC。多個 Pod 無法在單一 GKE 節點上共用 RDMA。
這項設定會執行 NCCL 測試。如要執行這項 NCCL 測試,您必須至少有 2 個 VM 配額 (使用
a4x-highgpu-4g或a4x-highgpu-4g-nolssd時,每個 VM 配備 4 個 GPU)。您必須使用取決於預留項目的佈建模式,才能建立搭載 A4X 的叢集。系統不支援其他佈建模型。
GPUDirect RDMA 與 NCCL Fast Socket 或 GPUDirect TCPX/TCPXO 不相容。如果叢集使用 GPUDirect RDMA,請勿啟用 NCCL Fast Socket,也不要在叢集上安裝 TCPX/TCPXO 外掛程式。
建立叢集時的注意事項
建立叢集時,請注意下列資訊:
- 選擇叢集位置:
- 確認您使用的位置可提供所選機器類型。詳情請參閱「GPU 位置」。
- 如要使用密集預留項目,可以建立可用區叢集。在本例中,請將
--region標記替換為--zone=COMPUTE_ZONE標記,其中COMPUTE_ZONE是控制層的區域。 - 在地區叢集中建立節點集區時,您可以使用
--node-locations標記指定 GKE 節點的區域。
- 選擇驅動程式版本:
- 驅動程式版本可以是下列其中一個值:
- 如要進一步瞭解 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:預訂中的特定區塊名稱。
如要使用以子區塊為目標的預留項目,讓 VM 放置在
BLOCK_NAME內的單一子區塊中,請在路徑結尾新增下列內容:/reservationSubBlocks/SUB_BLOCK_NAME將
SUB_BLOCK_NAME替換為子區塊的名稱。
建立使用 A4X 和 GPUDirect RDMA 的 AI 適用 GKE 叢集
對於分散式 AI 工作負載,通常會將多個 GPU 節點連結在一起,當做單一電腦運作。A4X 是以 NVIDIA GB200 NVL72 機架式架構為基礎的百億級平台。這種機器類型可為 AI 工作負載提供高效能雲端體驗,讓您在多個 GPU 之間進行擴充及協作。如要進一步瞭解 A4X 的網路架構,包括網路頻寬和 NIC 配置,請參閱 A4X 機器類型。
如要使用 A4X 和 GPUDirect RDMA 建立 GKE Standard 叢集,請完成下列步驟 (詳情請參閱下幾節):
- 建立虛擬私有雲和子網路
- 建立具備多重網路功能的 GKE 叢集
- 建立 GKE 網路物件
- 建立工作負載政策
- 建立具有 A4X 的節點集區
- 安裝 RDMA 二進位檔並設定 NCCL
- 安裝 NVIDIA Compute Domain CRD 和 DRA 驅動程式
建立虛擬私有雲和子網路
A4X VM 的設定如下:
- 每個虛擬機器有四個 NVIDIA B200 GPU,並透過 NVLink 連線
- 兩個以 Arm 為基礎的 NVIDIA Grace CPU
- 四張 400 Gbps CX-7 網路介面卡 (NIC),用於 GPU 對 GPU 的網路
- 兩張 200 Gbps 的 Google Titanium 網路介面卡 (NIC),適用於外部服務
AI 和機器學習工作負載 (例如分散式訓練) 需要強大的加速功能,才能縮短作業完成時間,進而提升效能。對於需要高效能、高處理量和低延遲的工作負載,GPUDirect RDMA 可減少將酬載傳輸至 GPU 和從 GPU 傳輸酬載時所需的網路躍點。這種做法可更有效率地使用可用網路頻寬。
與 CPU 相關聯的其中一個 Google Titanium NIC 會使用 GKE 中的預設網路,因此只要預設網路有足夠的 IP 位址範圍,您就不必為這個 NIC 建立新的 VPC。
您可以使用下列指令,為第二個 CPU Titanium NIC (gVNIC) 建立一個 VPC,並為四個 CX-7 RDMA NIC 建立另一個 VPC。
為盡量提高網路頻寬,建立額外 GVNIC 的虛擬私有雲指令會將最大傳輸單元 (MTU) 設為 8896。RDMA 虛擬私有雲預設為建議設定 8896。詳情請參閱「MTU 設定和 GPU 機器類型」。
設定環境變數,與部署作業相符:
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:GVNIC 網路前置字串 (例如a4x-gvnic)。RDMA_NETWORK_PREFIX:RDMA 網路前置字串 (例如a4x-rdma)。
建立兩個虛擬私有雲網路:
# Create a VPC for the additional GVNIC gcloud compute --project=${PROJECT} \ networks create \ GVNIC_NETWORK_PREFIX-net \ --subnet-mode=custom \ --mtu=8896 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 4 subnets. gcloud 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 3); 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 叢集
建立具備多重網路功能的 GKE Standard 叢集:
gcloud container clusters create CLUSTER_NAME \ --enable-dataplane-v2 --enable-ip-alias --location=COMPUTE_REGION \ --enable-multi-networking --cluster-version=CLUSTER_VERSION \ --enable-kubernetes-unstable-apis=resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices \ [--services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]準備這項指令時,請執行下列操作:
- 建立執行 GKE 1.34 以上版本的叢集時,請移除
--enable-kubernetes-unstable-apis旗標,這個旗標用於啟用 DRA。只有在建立執行 1.32 或 1.33 版的叢集時,才需要使用這個旗標。啟用 Beta 版 API 後,您必須在 Beta 版 API 淘汰並隨後續 Kubernetes 次要版本移除時,從 Beta 版 API 遷移。詳情請參閱「Beta 版 API 淘汰」一文。 更改下列內容:
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 位址範圍」。
- 建立執行 GKE 1.34 以上版本的叢集時,請移除
建立 GKE 網路物件
您必須透過 GKE 網路參數集,設定上一節中建立的虛擬私有雲網路。具體來說,第二個 CPU Titanium NIC (gVNIC) 必須以 NetDevice 模式設定,而四個 CX-7 RDMA NIC 則必須以 RDMA 模式設定。
這個指令會使用下列名稱:
- CPU Titanium NIC (gVNIC) 虛擬私有雲命名為
GVNIC_NETWORK_PREFIX-net,子網路命名為GVNIC_NETWORK_PREFIX-sub - CX-7 RDMA NIC 的虛擬私有雲名為
RDMA_NETWORK_PREFIX-net,子網路名為RDMA_NETWORK_PREFIX-sub-[0…3]
執行下列指令,建立 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
EOF
建立工作負載政策
您必須先建立工作負載政策,才能建立分區。詳情請參閱「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 建立節點集區
建議您建立使用 GKE GPU 裝置外掛程式的節點集區。這個外掛程式提供 GKE 代管的 GPU 資源管理功能。這種做法有以下優點:
- 輕鬆部署及升級
- 自動安裝驅動程式
- GKE 管理的 GPU 功能,例如指標和分割 GPU
- 修正重大安全漏洞
或者,如果您的用途需要,也可以使用 NVIDIA GPU 運算子。詳情請參閱「為何要使用 NVIDIA GPU 運算子?」。
使用 GKE GPU 裝置外掛程式建立 A4X 節點集區
建立使用 GKE GPU 裝置外掛程式的 A4X 節點集區:
gcloud container node-pools create NODE_POOL_NAME \
--location COMPUTE_REGION \
--node-locations COMPUTE_ZONE \
--cluster CLUSTER_NAME \
--num-nodes=NODE_COUNT \
--machine-type MACHINE_TYPE \
--accelerator type=nvidia-gb200,count=4,gpu-driver-version=DRIVER_VERSION \
--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 \
--scopes "https://www.googleapis.com/auth/cloud-platform" \
--reservation-affinity=specific \
--reservation=RESERVATION_NAME/reservationBlocks/BLOCK_NAME \
--placement-policy=WORKLOAD_POLICY_NAME
更改下列內容:
NODE_POOL_NAME:節點集區的名稱。COMPUTE_REGION:叢集所在的區域。COMPUTE_ZONE:節點集區的可用區。CLUSTER_NAME:叢集名稱。NODE_COUNT:節點集區的節點數量,必須為 18 個節點以下。建議使用 18 個節點,透過 NVLink 網域在一個子區塊中取得 GPU 拓撲。1x72MACHINE_TYPE:a4x-highgpu-4g或a4x-highgpu-4g-nolssd,視您是否需要本機 SSD 而定。DRIVER_VERSION:要安裝的 NVIDIA 驅動程式版本。可能的值包括:default、latest或disabled。RESERVATION_NAME:預訂名稱。如要找出這個值,請參閱「查看未來預留項目要求」。BLOCK_NAME:預訂中的特定區塊名稱。如要找出這個值,請參閱「查看未來預留項目要求」。WORKLOAD_POLICY_NAME:先前建立的工作負載政策名稱。
使用 NVIDIA GPU 運算子建立 A4X 節點集區
或者,如要使用 NVIDIA GPU Operator,請執行下列步驟:
執行上一節中的
gcloud container node-pools create指令,並進行下列變更:- 將
gpu-driver-version=latest變更為gpu-driver-version=disabled。 這項修改會略過自動安裝 GPU 驅動程式的程序,因為使用 NVIDIA GPU 運算子時,系統不支援這項功能。 - 將
--node-labels="gke-no-default-nvidia-gpu-device-plugin=true"設為停用 GKE 代管的 GPU 裝置外掛程式 DaemonSet。
- 將
套用 GKE GPU 驅動程式安裝程式 DaemonSet 資訊清單。這份資訊清單會在每個 A4X 節點上部署 GPU 驅動程式安裝程式 Pod:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/refs/heads/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml使用 NVIDIA GPU 運算子在 Google Kubernetes Engine (GKE) 上管理 GPU 堆疊:
- 在「建立及設定 GPU 節點集區」部分中,按照操作說明從取得驗證憑證的步驟開始操作。
安裝 NVIDIA GPU 運算子。 完成所有步驟,但請使用下列指令取代參考章節中,透過 Helm 安裝 NVIDIA GPU 運算子的指令。請改用下列指令:
helm install --wait --generate-name \ -n gpu-operator \ nvidia/gpu-operator \ --version="25.3.0" \ -f <(cat <<EOF hostPaths: driverInstallDir: /home/kubernetes/bin/nvidia toolkit: installDir: /home/kubernetes/bin/nvidia cdi: enabled: true default: true driver: enabled: false daemonsets: tolerations: - key: nvidia.com/gpu operator: Equal value: present effect: NoSchedule - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule node-feature-discovery: worker: tolerations: - key: kubernetes.io/arch operator: Equal value: arm64 effect: NoSchedule - key: "node-role.kubernetes.io/master" operator: "Equal" value: "" effect: "NoSchedule" - key: "node-role.kubernetes.io/control-plane" operator: "Equal" value: "" effect: "NoSchedule" - key: nvidia.com/gpu operator: Exists effect: NoSchedule EOF )
安裝 RDMA 二進位檔並設定 NCCL
套用下列 DaemonSet,在每個節點上安裝 RDMA 二進位檔和 NCCL 程式庫。在每個基礎 VM 上,RDMA 二進位檔會安裝在 /home/kubernetes/bin/gib 目錄中,NCCL 程式庫則會安裝在 /home/kubernetes/bin/nvidia/lib64 目錄中。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-rdma/nccl-rdma-installer-a4x.yaml
安裝 NVIDIA Compute Domain CRD 和 DRA 驅動程式
安裝 NVIDIA Compute Domain CRD 和 DRA 驅動程式。詳情請參閱「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 節點數量的 2 倍加 1。舉例來說,如果叢集有 18 個 A4X 節點,您必須將變數設為至少 37。安裝 DRA 驅動程式:
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="DRA_DRIVER_VERSION" \ --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-gb200 - 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 )將
DRA_DRIVER_VERSION替換為 25.3.1 以上版本。如要查看可用的 NVIDIA DRA 驅動程式版本清單,請執行helm search repo nvidia/nvidia-dra-driver-gpu --versions指令。或者,查看 GitHub 版本資訊,瞭解可用的版本。
設定工作負載資訊清單,以支援多重網路、RDMA 和 IMEX 網域
在 Pod 中繼資料中新增下列註解:
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"} ]新增節點相依性規則,在 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 - name: gib hostPath: path: /home/kubernetes/bin/gib將下列磁碟區掛接、環境變數和資源新增至要求 GPU 的容器。工作負載容器必須要求所有四個 GPU:
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: 4為工作負載建立 ComputeDomain 資源:
apiVersion: resource.nvidia.com/v1beta1 kind: ComputeDomain metadata: name: a4x-compute-domain spec: numNodes: NUM_NODES channel: resourceClaimTemplate: name: a4x-compute-domain-channel請將
NUM_NODES改成工作負載所需的節點數量。指定 Pod 要使用的 resourceClaimTemplate:
spec: ... volumes: ... containers: - name: my-container ... resources: limits: nvidia.com/gpu: 4 claims: - name: compute-domain-channel ... resourceClaims: - name: compute-domain-channel resourceClaimTemplateName: a4x-compute-domain-channel設定所有必要的環境變數,以設定 NCCL。從工作負載容器使用下列殼層指令碼:
source /usr/local/gib/scripts/set_nccl_env.sh
完成的 Pod 規格如下所示:
apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
name: a4x-compute-domain
spec:
numNodes: NUM_NODES
channel:
resourceClaimTemplate:
name: a4x-compute-domain-channel
---
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"},
]
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
- 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: 4
claims:
- name: compute-domain-channel
...
resourceClaims:
- name: compute-domain-channel
resourceClaimTemplateName: a4x-compute-domain-channel
測試網路效能
建議您驗證已佈建叢集的功能。如要執行這項操作,請使用 NCCL/gIB 測試,也就是針對 Google 環境最佳化的 NVIDIA Collective Communications Library (NCCL) 測試。
後續步驟
- 如要瞭解如何使用 TAS 和 Kueue,在 GKE 叢集上安排工作負載時程,請參閱「使用 Topology Aware Scheduling 安排 GKE 工作負載時程」。
- 如要瞭解如何管理與 GKE 叢集和 AI 工作負載相關的常見事件,請參閱「管理 AI 適用 GKE 叢集」。