本頁說明如何建立 AI 最佳化的 Google Kubernetes Engine (GKE) 叢集,使用 A4 或 A3 Ultra 虛擬機器 (VM) 支援 AI 和機器學習工作負載。如要使用 A4X,請參閱建立使用 A4X 的自訂 AI 適用 GKE 叢集。
A4 和 A3 Ultra 系列機器的設計宗旨,是讓您能夠執行大規模 AI/ML 叢集,並提供目標工作負載放置、進階叢集維護控制項和拓撲感知排程等功能。詳情請參閱叢集管理總覽。
GKE 提供單一平台介面,可為貴機構執行各種工作負載,減少管理多個平台的營運負擔。您可以執行高效能分散式預先訓練、模型微調、模型推論、應用程式服務和支援服務等工作負載。
本頁面說明如何使用 Google Cloud CLI 建立 GKE 叢集,根據工作負載需求彈性設定叢集。或者,您也可以選擇使用 Cluster Toolkit,以預設設定快速部署叢集,這些設定反映了許多應用情境的最佳做法。如需相關操作說明,請參閱使用預設設定建立 AI 適用 GKE 叢集。
使用 GPUDirect RDMA 的叢集設定選項
如要使用 Google Cloud CLI 建立叢集,請選擇下列其中一個叢集設定選項:
- 如果您不打算執行分散式 AI 工作負載:請建立 GKE 叢集,但不要使用 GPUDirect RDMA。
- 如果您打算執行分散式 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) -
服務使用情形消費者 (
roles/serviceusage.serviceUsageConsumer) - 儲存空間管理員 (
roles/storage.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
選擇用量方案並取得容量
選擇使用選項。請根據您取得及使用 GPU 資源的方式做出選擇。詳情請參閱「選擇消耗選項」。
選擇 GKE 的用量方案時,請注意下列額外資訊:
- 如要進一步瞭解彈性啟動 (搶先版) 和 GKE,請參閱「About GPU obtainability with flex-start」(關於彈性啟動的 GPU 取得能力)。
- 彈性啟動會盡可能使用密集配置。如要檢查拓撲,請參閱查看 GKE 叢集中節點的實體拓撲。
- 使用 Spot VM 時,只有在設定密集配置時,才能取得拓撲資訊。
取得容量。瞭解如何為消費選項取得容量。
需求條件
AI 最佳化 GKE 叢集必須符合下列條件:
- 如要使用彈性啟動佈建模式,必須使用 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,您必須使用 GKE 1.31 版設定gpu-driver-version=latest欄位的值。如果是 GKE 1.31.5-gke.1169000 以上版本,GKE 預設會在 A3 Ultra 節點上自動安裝 R550 GPU 驅動程式版本,包括您省略gpu-driver-version旗標的情況。
如要使用 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 測試,您必須至少有
2的 VM 配額 (也就是說,如果您使用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 節點集區。
- 選擇驅動程式版本:
- 驅動程式版本可以是下列其中一個值:
- 如要進一步瞭解 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:新叢集的區域。 如果您打算建立區域叢集,請使用--zone標記,而非--region標記,例如:--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-8g和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:預訂中的特定區塊名稱。如要找出這個值,請參閱「查看未來預留項目要求」。
彈性啟動
如要彈性啟動佈建,請執行下列指令:
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-8g和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:整個節點集區可自動調度的節點數量上限。如要搭配排隊佈建使用彈性啟動,請加入
--enable-queued-provisioning旗標。如要進一步瞭解如何使用彈性啟動模式,請參閱「使用彈性啟動模式和排隊佈建功能執行大規模工作負載」。
Spot
如要佈建 Spot 執行個體,請執行下列指令:
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-8g和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 節點連結在一起,當做單一電腦運作。A4 VM 和 A3 Ultra VM 均搭載 Titanium ML 網路介面卡,該介面卡是以 NVIDIA ConnectX-7 (CX7) NIC 為基礎建構而成。A4 VM 和 A3 Ultra VM 皆使用 RDMA over Converged Ethernet (RoCE),提供無阻斷的 3.2 Tbps 節點間 GPU 對 GPU 流量。RoCE 可為 AI 工作負載提供高效能雲端體驗,在多個 GPU 之間進行擴充及協作。
如要進一步瞭解如何使用 Google Cloud CLI 和 GPUDirect TCPX (A3 High VM) 或 TCPXO (A3 Mega VM) 建立 GKE 叢集,請參閱在 Autopilot 模式叢集中盡量提高 GPU 網路頻寬,或在 Standard 模式叢集中盡量提高 GPU 網路頻寬。
如要在 Autopilot 或標準模式中建立 GKE 叢集,並使用 GPUDirect RDMA,請完成下列步驟,詳情請參閱下一節:
- 建立虛擬私有雲和子網路
- 建立具備多重網路功能的 GKE 叢集
- 建立 GKE 網路物件
- 安裝 RDMA 二進位檔並設定 NCCL
- 部署及執行 NCCL 測試
- 為 GPUDirect-RDMA 設定 Pod 資訊清單
建立虛擬私有雲和子網路
A4 VM 和 A3 Ultra VM 的設定如下:
- 每個虛擬機器連接八個 NVIDIA B200 (A4) 或 H200 (A3 Ultra) GPU,並使用 NVLink
- 兩顆 Intel Emerald Rapids CPU
- 八個 400 Gbps CX-7 網路介面卡,用於 GPU 對 GPU 的網路
- 兩個 200 Gbps 的 Google Titanium NIC,適用於外部服務
AI 和機器學習工作負載 (例如分散式訓練) 需要強大的加速功能,才能縮短作業完成時間,進而提升效能。對於需要高效能、高輸送量和低延遲的工作負載,GPUDirect RDMA 可減少將酬載傳輸至 GPU 和從 GPU 傳輸酬載所需的網路躍點,更有效率地使用可用網路頻寬。 與未使用 GPUDirect 的 GPU 相比,GPUDirect RDMA 的設計大幅提升了大規模處理的輸送量。
與 CPU 相關聯的其中一個 Google Titanium NIC 會使用 GKE 中的預設網路。如果預設網路有足夠的 IP 位址範圍,您就不需要為這個 NIC 建立新的 VPC。
您可以使用這些指令,為第二個 CPU Titanium NIC (gVNIC) 建立一個 VPC,並為八個 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。
建立兩個虛擬私有雲網路:
# 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 並設定叢集存取權」。
標準
使用多重網路建立 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:服務的次要 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-8g和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:節點集區的節點數量。如果是彈性開始時間,這個值必須設為0。RESERVATION_NAME:預訂名稱。如要找出這個值,請參閱「查看未來預留項目要求」。BLOCK_NAME:預訂中的特定區塊名稱。如要找出這個值,請參閱「查看未來預留項目要求」。
彈性啟動
如要彈性啟動佈建,請執行下列指令:
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-8g和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:節點集區的節點數量。如果是彈性開始時間,這個值必須設為0。TOTAL_MAX_NODES:整個節點集區可自動擴充的節點數量上限。
如要搭配排隊佈建使用彈性啟動,請加入
--enable-queued-provisioning旗標。如要進一步瞭解如何使用彈性啟動模式,請參閱「使用彈性啟動模式和排隊佈建功能執行大規模工作負載」。
連線至叢集,以便在下一節中執行
kubectl指令:gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION更改下列內容:
CLUSTER_NAME:叢集名稱。COMPUTE_REGION:運算區域的名稱。
詳情請參閱「安裝 kubectl 並設定叢集存取權」。
建立 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…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
標準
如果是 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 測試」。
設定 Pod 資訊清單以使用 GPUDirect RDMA
如要使用 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"} ]標準
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 (180GB)nvidia-h200-141gb:適用於 A3 Ultra VM 的 NVIDIA H200 (141 GB)
RESERVATION_NAME:Compute Engine 容量預留項目的名稱。
如要使用共用預留項目,或預留項目的特定區塊和子區塊,請參閱「使用預留區域路徑資源」一文中的相關章節。
在 Pod 規格中新增下列磁碟區:
spec: volumes: - name: library-dir-host hostPath: path: /home/kubernetes/bin/nvidia - name: gib hostPath: path: /home/kubernetes/bin/gib將下列磁碟區掛接點、環境變數和資源新增至要求 GPU 的容器。工作負載容器必須要求所有八個 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: 8標準
如果是 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
...
標準
如果是 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 的叢集網路效能
建議您驗證已佈建叢集的功能。如要執行這項操作,請使用 NCCL/gIB 測試,也就是針對 Google 環境最佳化的 NVIDIA Collective Communications Library (NCCL) 測試。
後續步驟
- 如要進一步瞭解如何使用 Topology Aware Scheduling (TAS) 和 Kueue,在 GKE 叢集上安排工作負載時程,請參閱「使用 Topology Aware Scheduling 安排 GKE 工作負載時程」。
- 如要進一步瞭解如何管理與 GKE 叢集和 AI 工作負載相關的常見事件,請參閱「管理 AI 適用 GKE 叢集」。
- 如要瞭解如何測試環境是否已正確設定及最佳化,請參閱「運用 NCCL/gIB 最佳化調整叢集網路」。