建立使用 A4 或 A3 Ultra 的自訂 AI 適用 GKE 叢集

本頁說明如何建立 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 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

選擇用量方案並取得容量

  1. 選擇使用選項。請根據您取得及使用 GPU 資源的方式做出選擇。詳情請參閱「選擇消耗選項」。

    選擇 GKE 的用量方案時,請注意下列額外資訊:

  2. 取得容量。瞭解如何為消費選項取得容量

需求條件

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-8ga3-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 旗標可採用 specificany 值。不過,對於高效能分散式 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 的額外節點集區。這種方法可讓預設節點集區執行其他服務。

  1. 建立叢集:

      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 替換為控制層的可用區。
  2. 使用下列其中一個指令,建立以 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_TYPEGPU 加速器類型:

      • A4 VM:輸入 nvidia-b200
      • A3 Ultra VM:輸入 nvidia-h200-141gb
    • AMOUNT:要附加至節點集區中節點的 GPU 數量。舉例來說,a4-highgpu-8ga3-ultragpu-8g VM 的 GPU 數量都是 8

    • DRIVER_VERSION:要安裝的 NVIDIA 驅動程式版本。可能的值包括:defaultlatestdisabled

    • 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_TYPEGPU 加速器類型:

      • A4 VM:輸入 nvidia-b200
      • A3 Ultra VM:輸入 nvidia-h200-141gb
    • AMOUNT:要附加至節點集區中節點的 GPU 數量。舉例來說,a4-highgpu-8ga3-ultragpu-8g VM 的 GPU 數量都是 8

    • DRIVER_VERSION:要安裝的 NVIDIA 驅動程式版本。可能的值包括:defaultlatestdisabled

    • 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_TYPEGPU 加速器類型:

      • A4 VM:輸入 nvidia-b200
      • A3 Ultra VM:輸入 nvidia-h200-141gb
    • AMOUNT:要附加至節點集區中節點的 GPU 數量。舉例來說,a4-highgpu-8ga3-ultragpu-8g VM 的 GPU 數量都是 8

    • DRIVER_VERSION:要安裝的 NVIDIA 驅動程式版本。可能的值包括:defaultlatestdisabled

    • MACHINE_TYPE:節點的 Compute Engine 機器類型。舉例來說,A4 VM 請使用 a4-highgpu-8g,A3 Ultra VM 則使用 a3-ultragpu-8g

    • NUM_NODES:節點集區的節點數量。

      如要進一步瞭解如何使用 Spot VM 建立叢集,請參閱「使用 Spot VM 以較低成本執行容錯工作負載」。

  3. 連線至叢集,以便在下一節中執行 kubectl 指令:

      gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION
    

    更改下列內容:

建立具有 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,請完成下列步驟,詳情請參閱下一節:

  1. 建立虛擬私有雲和子網路
  2. 建立具備多重網路功能的 GKE 叢集
  3. 建立 GKE 網路物件
  4. 安裝 RDMA 二進位檔並設定 NCCL
  5. 部署及執行 NCCL 測試
  6. 為 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。

  1. 設定環境變數,與部署作業相符:

    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. 建立兩個虛擬私有雲網路:

    # 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

  1. 建立具備多重網路功能的 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:運算區域的名稱。
  2. 連線至叢集,以便在下一節中執行 kubectl 指令:

    gcloud container clusters get-credentials CLUSTER_NAME --location=COMPUTE_REGION
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • COMPUTE_REGION:運算區域的名稱。

    詳情請參閱「安裝 kubectl 並設定叢集存取權」。

標準

使用多重網路建立 GKE Standard 叢集和 GPU 節點集區:

  1. 建立叢集:

    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/19POD_CIDR=10.64.0.0/19 值中的範圍不會互相重疊。詳情請參閱「新增 Pod IPv4 位址範圍」。

  2. 建立節點集區。您需要執行的指令取決於部署作業使用的消耗量選項。選取與用量選項的佈建模型對應的分頁。

    取決於預留項目

    如要進行受預訂項目限制的佈建,請執行下列指令:

    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_TYPEGPU 加速器類型:

      • A4 VM:輸入 nvidia-b200
      • A3 Ultra VM:輸入 nvidia-h200-141gb
    • AMOUNT:要附加至節點集區中節點的 GPU 數量。舉例來說,a4-highgpu-8ga3-ultragpu-8g VM 的 GPU 數量都是 8

    • DRIVER_VERSION:要安裝的 NVIDIA 驅動程式版本。可能的值包括:defaultlatestdisabled

    • 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_TYPEGPU 加速器類型:

      • A4 VM:輸入 nvidia-b200
      • A3 Ultra VM:輸入 nvidia-h200-141gb
    • AMOUNT:要附加至節點集區中節點的 GPU 數量。舉例來說,a4-highgpu-8ga3-ultragpu-8g VM 的 GPU 數量都是 8

    • DRIVER_VERSION:要安裝的 NVIDIA 驅動程式版本。可能的值包括:defaultlatestdisabled

    • 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 旗標。

    如要進一步瞭解如何使用彈性啟動模式,請參閱「使用彈性啟動模式和排隊佈建功能執行大規模工作負載」。

  3. 連線至叢集,以便在下一節中執行 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 資訊清單:

  1. 在 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"}
        ]
    
  2. 使用節點選取器指定所選的 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 容量預留項目的名稱。

    如要使用共用預留項目,或預留項目的特定區塊和子區塊,請參閱「使用預留區域路徑資源」一文中的相關章節。

  3. 在 Pod 規格中新增下列磁碟區:

    spec:
      volumes:
        - name: library-dir-host
          hostPath:
            path: /home/kubernetes/bin/nvidia
        - name: gib
          hostPath:
            path: /home/kubernetes/bin/gib
    
  4. 將下列磁碟區掛接點、環境變數和資源新增至要求 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
    
  5. 使用工作負載容器中的下列殼層指令碼,設定所有必要的環境變數來設定 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) 測試

後續步驟