Google Kubernetes Engine (GKE) DRANET 是代管 GKE 功能,以開放原始碼 DRANET 專案為基礎,為網路資源實作 Kubernetes DRA API。DRANET 可讓您為 Pod 要求及分配高效能網路資源,包括支援遠端直接記憶體存取 (RDMA) 的網路介面。這種方法提供可攜式、與上游一致的 API,用於管理網路資源。
本文提供 GKE DRANET 的概念總覽,並說明如何將網路資源分配給 GKE 叢集中的工作負載。
本文適用對象為雲端架構師和網路專家,他們負責為組織設計網路。如需所有 GKE 說明文件的總覽,請參閱「探索 GKE 說明文件」。如要瞭解 Google Cloud 內容中提及的常見角色和工作,請參閱「常見的 GKE 使用者角色和工作」。
閱讀本文前,請先熟悉下列概念:
GKE 代管 DRANET 的運作方式
GKE 代管的 DRANET 是透過 networking-dra-driver DaemonSet 實作。這個 DaemonSet 會在具備 GPU、TPU 或儲存空間最佳化 VM 的節點上執行,且這些 VM 已啟用 GKE DRANET。
這個外掛程式會做為節點層級代理,透過 Kubernetes 動態資源分配 (DRA) API,讓網路介面可供偵測及分配給 Pod。
在 GKE 1.34.1-gke.1829001 以上版本中,GKE 會自動安裝網路的 DeviceClass 資源。這些類別定義了您可以要求的網路裝置類型。舉例來說,GKE 會為 GPU VM 建立 mrdma.google.com 類別、為 TPU 和其他網路裝置建立 netdev.google.com 類別,以及為儲存空間最佳化 VM (例如 Z4M) 建立 irdma.google.com 類別。
如要使用 GKE DRANET,請先在具備 GPU、TPU 或儲存空間最佳化 VM 的節點集區上,啟用 GKE DRANET 驅動程式。
如要為工作負載要求網路裝置,請定義 ResourceClaimTemplate。這個範本會指定 DeviceClass 和分配模式,例如要求節點上的所有可用裝置。在 Pod 規格中,請在 resourceClaims 欄位中參照這個範本,授予 Pod 存取節點上所要求網路介面的權限。
使用 GKE 代管 DRANET 的時機
GKE DRANET 提供標準化方式,可管理能感知拓撲和依附元件的網路資源。這項標準化作業使 RoCE 成為 AI 和機器學習、大型平行檔案系統,以及其他需要高效能網路的資料密集型儲存工作負載的合適解決方案。
為 Pod 要求網路介面的常見用途包括:
- 正在要求所有支援 RDMA 的可用介面。
- 要求特定數量的 RDMA 介面。
- 正在要求所有可用的非 RDMA 介面。
- 要求特定數量的非 RDMA 介面。
使用 GKE 代管 DRANET 網路的考量重點
使用 GKE DRANET 建立網路時,請考量下列事項:
專屬網路介面
使用 GKE DRANET 為 Pod 宣告網路介面時,該介面會專屬於該 Pod。同一節點上的其他 Pod 無法共用。這種做法可確保 Pod 獨占該介面的完整頻寬和資源,對於效能敏感的工作負載來說,這是一項關鍵優勢。
獨立使用 GKE 代管的 DRANET 驅動程式
您可以啟用 GKE DRA 驅動程式來管理網路資源,而不啟用其他 GKE DRANET 驅動程式。如要這麼做,請將
cloud.google.com/gke-networking-dra-driver=true標籤新增至具有 GPU、TPU 或儲存空間最佳化 VM 的節點集區。使用其他 GKE DRA 驅動程式
如要在高需求 AI/機器學習工作負載中提高處理量,請將加速器 (例如 GPU 和 TPU) 的 DRA API 與 GKE DRANET 代管網路搭配使用。這種結合方法可改善資源對齊和拓撲感知。如要進一步瞭解如何將 DRA 用於其他資源,請參閱「為 DRA 工作負載準備 GKE 基礎架構」。
避免設定衝突
GKE DRANET 驅動程式會管理 RDMA 介面和 gVNIC,這些介面和 gVNIC 未設定任何次要 IP 位址範圍。請勿在同一個叢集中,同時使用 GKE DRANET 驅動程式和 GKE 多網路 API,搭配
Device類型的網路資源。不支援同時使用驅動程式和 API,因為這兩個 API 會嘗試管理同一組 NIC,可能導致設定錯誤和無法預測的行為。DRANET 驅動程式的受管理生命週期
在 GKE 1.34 以上版本中,GKE 會自動在叢集中建立代管
gke-managed-networking-dra-driver命名空間。與其他幾項 GKE 系統工作負載類似,DRANET 驅動程式的 Pod 只會在相關節點上執行 (例如具備 GPU、TPU 和其他特殊硬體的節點)。在與驅動程式無關的節點上,不會執行這個驅動程式的 Pod。請勿手動修改networking-dra-driverDaemonSet。手動變更 (例如更新nodeAffinity欄位) 可能會干擾 GKE 管理 DRANET 功能,導致 DRANET Daemon Pod 排定在不支援的節點上。
需求條件
如要使用 GKE 代管的 DRANET,環境必須符合下列需求:
- Standard:1.34.1-gke.1829001 以上版本 (Z4M VM 則為 1.36.3-gke.1767000 以上版本)。
- Autopilot:1.35.2-gke.1842000 以上版本 (Z4M VM 則為 1.37.0-gke.4713000 以上版本)。
- 叢集已啟用 GKE Dataplane V2。
此外,您必須使用下列其中一種加速器最佳化或儲存空間最佳化機型:
| 機器系列 | 機型 | 加速器模型 | 網路技術 | DeviceClass |
|---|---|---|---|---|
| A3 Ultra | a3-ultragpu-8g |
NVIDIA H200 GPU | RDMA | mrdma.google.com |
| A4 | a4-highgpu-8g |
NVIDIA B200 GPU | RDMA | mrdma.google.com |
| A4X | a4x-highgpu-4g |
NVIDIA GB200 GPU | RDMA | mrdma.google.com |
| A4X Max | a4x-maxgpu-4g-metal |
NVIDIA B300 GPU | RDMA | mrdma.google.com |
| TPU v7 | tpu7x-standard-4t |
TPU v7 | NetDevice | netdev.google.com |
| TPU v6e | ct6e-standard-8t |
Trillium TPU | NetDevice | netdev.google.com |
| TPU v6e | ct6e-standard-4t |
Trillium TPU | NetDevice | netdev.google.com |
| TPU v6e | ct6e-standard-1t |
Trillium TPU | NetDevice | netdev.google.com |
| Z4M | 任何支援 IRDMA 的 Z4M 機型 | 不適用 (儲存空間最佳化) | RDMA | irdma.google.com |
限制
GKE DRANET 有下列限制:
- 您無法使用 GKE DRANET 分配預設網路介面卡 (NIC) 或虛擬 NIC (例如 veth)。
- 某些執行個體類型 (尤其是
a4x-max等裸機節點) 與自動調度資源和 Autopilot 叢集不相容。
機器專屬注意事項
視節點的基礎硬體架構而定,部分機器系列需要額外的節點集區旗標、容器映像檔套件或系統 DaemonSet,才能使用 GKE DRANET 設定 RDMA 介面。
A4X Max 裸機
- 部署 asapd-lite:使用裸機 GPU 節點 (例如 A4X Max) 時,必須將
asapd-liteDaemonSet 部署至叢集。asapd-liteDaemonSet 會設定 RDMA 網路介面卡 (NIC)。如果沒有這個值,系統就不會建立子介面,且dranet驅動程式會篩除 RDMA NIC,導致 Pod 內無法使用 RDMA 功能。如需完整的設定操作說明,請參閱「使用 asapd-lite 設定 MRDMA NIC」。
Z4M 儲存空間最佳化 VM
- 容器映像檔需求:如要在 Z4M 執行個體上使用 RDMA,必須使用 Rocky Linux 8 容器映像檔,並設定必要的使用者空間 RDMA 套件。不支援 Ubuntu 或 Debian 等其他發行版本。這些發行版本的標準上游套件缺少 IRDMA 驅動程式所需的自訂 ABI 擴充功能。如果沒有這些擴充功能,套件會在執行階段失敗,並顯示
-ENOSPC錯誤。如需設定操作說明,請參閱「在儲存空間最佳化節點集區中使用 RDMA 介面」。
事前準備
開始之前,請確認您已執行下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
必要的角色
如要取得建立節點集區及分配網路資源所需的權限,請要求管理員授予您專案的 Kubernetes Engine 管理員 (roles/container.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立叢集
建立使用 GKE Dataplane V2 的 GKE Standard 叢集:
gcloud container clusters create CLUSTER_NAME \
--enable-dataplane-v2 \
--region=CONTROL_PLANE_LOCATION \
--project=PROJECT_ID \
--cluster-version=CLUSTER_VERSION
更改下列內容:
CLUSTER_NAME:新叢集的名稱。CONTROL_PLANE_LOCATION:叢集控制層的區域或可用區,例如us-central1或us-central1-a。PROJECT_ID:您的 Google Cloud 專案 ID。CLUSTER_VERSION:叢集的 GKE 版本:- Z4M VM:
1.36.3-gke.1767000以上版本 - 所有其他支援的 VM 或裸機執行個體:
1.34.1-gke.1829001以上版本
- Z4M VM:
使用 GPU 節點集區的 RDMA 介面
下列各節說明如何設定 GPU 節點集區和工作負載,以便透過 GKE DRANET 使用 RDMA 網路介面。
在 GPU 節點集區啟用 GKE 代管的 DRANET 驅動程式
如要在支援 RDMA 的 GPU 節點集區上啟用 GKE DRANET 驅動程式,請在建立節點集區時新增 cloud.google.com/gke-networking-dra-driver=true 標籤。
gcloud beta container node-pools create NODE_POOL_NAME \
--region=REGION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_LOCATIONS \
--accelerator type=ACCELERATOR_TYPE,count=ACCELERATOR_COUNT,gpu-driver-version=DRIVER_VERSION \
--machine-type=MACHINE_TYPE \
--num-nodes=NUM_NODES \
--reservation-affinity=specific \
--reservation=projects/RESERVATION_PROJECT/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK \
--accelerator-network-profile=auto \
--node-labels=cloud.google.com/gke-networking-dra-driver=true
更改下列內容:
NODE_POOL_NAME:新節點集區的名稱。REGION:叢集的 Google Cloud 區域。CLUSTER_NAME:叢集名稱。ACCELERATOR_TYPE:GPU 加速器類型:例如:
- A4 VM:輸入
nvidia-b200。 - A3 Ultra VM:輸入
nvidia-h200-141gb。
- A4 VM:輸入
ACCELERATOR_COUNT:要附加至節點集區中節點的 GPU 數量。舉例來說,a4-highgpu-8g 和 a3-ultragpu-8g VM 的 GPU 數量都是 8。DRIVER_VERSION:要使用的 GPU 驅動程式版本。例如:default或latest。MACHINE_TYPE:節點集區的機型,例如a3-ultragpu-8g。NUM_NODES:節點集區的節點數量。如要使用 flex-start,這個值必須設為 0。RESERVATION_PROJECT:預留項目的專案 ID。RESERVATION_NAME:預留項目名稱。如要查看這個值,請參閱「查看未來預留項目要求」。RESERVATION_BLOCK:預留項目中特定區塊的名稱。如要查看這個值,請參閱「查看未來預留項目要求」。
這個指令會使用加速晶片 VM 網路設定檔,自動為加速晶片 VM 設定虛擬私有雲網路和子網路。或者,您也可以明確指定虛擬私有雲網路和子網路。
部署工作負載 RDMA 資源
如要為 Pod 分配 RDMA 資源,請指定 ResourceClaimTemplate。
建立
ResourceClaimTemplate,定義如何分配 RDMA 裝置。下列資訊清單會要求節點上所有可用的mrdma裝置。將資訊清單儲存為all-mrdma-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-mrdma spec: spec: devices: requests: - name: req-mrdma exactly: deviceClassName: mrdma.google.com allocationMode: All套用資訊清單:
kubectl apply -f all-mrdma-template.yaml部署工作負載並參照
ResourceClaimTemplate。下列資訊清單會部署參照all-mrdma範本的 Pod,該範本會授予 Pod 存取節點上 RDMA 介面的權限。將資訊清單儲存為agnhost-rdma-pod.yaml:apiVersion: v1 kind: Pod metadata: name: agnhost-rdma namespace: default labels: app: agnhost spec: containers: - name: agnhost image: registry.k8s.io/e2e-test-images/agnhost:2.39 args: ["netexec", "--http-port", "80"] ports: - name: agnhost-port containerPort: 80 resources: claims: - name: rdma limits: nvidia.com/gpu: 1 resourceClaims: - name: rdma resourceClaimTemplateName: all-mrdma套用資訊清單:
kubectl apply -f agnhost-rdma-pod.yaml確認 Pod 內顯示額外分配的網路介面。
kubectl exec agnhost-rdma -- ls /sys/class/net以下範例輸出內容顯示預設的
eth0和lo介面,以及分配的 RDMA 介面,例如gpu0rdma0。網路介面 (NIC) 的數量和名稱會因 GKE 節點的機型而異。eth0 gpu0rdma0 gpu1rdma0 gpu2rdma0 gpu3rdma0 lo
在 TPU 節點集區中使用非 RDMA 網路介面
下列各節說明如何設定 TPU 節點集區和工作負載,以便透過 GKE DRANET 使用非 RDMA 網路介面。
驗證網路 DeviceClasses
確認叢集中有網路的 DeviceClass 資源。
kubectl get deviceclass netdev.google.com
輸出結果會與下列內容相似:
NAME AGE
netdev.google.com 2d22h
在 TPU 切片節點集區啟用 GKE 代管的 DRANET 驅動程式
如要在建立 TPU 配量節點集區時啟用 GKE DRANET 驅動程式,請新增 cloud.google.com/gke-networking-dra-driver=true 標籤。
gcloud beta container node-pools create NODE_POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_LOCATIONS \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--num-nodes=NUM_NODES \
--accelerator-network-profile=auto \
--node-labels=cloud.google.com/gke-networking-dra-driver=true
更改下列內容:
NODE_POOL_NAME:新節點集區的名稱。LOCATION:叢集所在的 Google Cloud 區域或可用區。CLUSTER_NAME:叢集名稱。NODE_LOCATIONS:節點集區中節點的 Google Cloud 可用區。MACHINE_TYPE:節點使用的機器類型。 如要進一步瞭解與 TPU 相容的機型,請參閱「選擇 TPU 版本」。TPU_TOPOLOGY:TPU 拓撲,例如2x4x4。拓撲格式取決於 TPU 版本。如要進一步瞭解 TPU 拓撲,請參閱「選擇拓撲」。NUM_NODES:節點集區中的節點數量。
詳情請參閱「建立單一主機 TPU slice 節點集區」。
部署工作負載,宣告所有網路裝置
如要為 Pod 分配非 RDMA 網路裝置,請指定 ResourceClaimTemplate。
建立參照
netdev.google.comDeviceClass的ResourceClaimTemplate。下列資訊清單會要求節點上所有可用的非 RDMA 網路裝置。將資訊清單儲存為
all-netdev-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: all-netdev spec: spec: devices: requests: - name: req-netdev exactly: deviceClassName: netdev.google.com allocationMode: All套用資訊清單:
kubectl apply -f all-netdev-template.yaml部署工作負載並參照
ResourceClaimTemplate。下列資訊清單會部署使用all-netdev範本的 Pod,將 Pod 存取權授予節點上的所有非 RDMA 網路裝置。將資訊清單儲存為netdev-pod.yaml:apiVersion: v1 kind: Pod metadata: name: agnhost-netdev namespace: default labels: app: agnhost spec: containers: - name: agnhost image: registry.k8s.io/e2e-test-images/agnhost:2.39 args: ["netexec", "--http-port", "80"] ports: - name: agnhost-port containerPort: 80 resources: claims: - name: netdev limits: google.com/tpu: 4 nodeSelector: cloud.google.com/gke-tpu-accelerator: TPU_ACCELERATOR cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY resourceClaims: - name: netdev resourceClaimTemplateName: all-netdev更改下列內容:
TPU_ACCELERATOR:TPU 加速器類型,例如tpu-v5p-slice。TPU_TOPOLOGY:TPU 拓撲,例如2x4x4。
套用資訊清單:
kubectl apply -f netdev-pod.yaml確認 Pod 內顯示額外分配的網路介面。
kubectl exec agnhost-netdev -- ls /sys/class/net以下範例輸出內容顯示預設的
eth0和lo介面,以及分配的網路裝置,名稱類似eth1和eth2。NIC 的數量和名稱會因 GKE 節點的機器類型而異。eth0 eth1 eth2 lo
在儲存空間最佳化節點集區中使用 RDMA 介面
以下各節說明如何設定儲存空間最佳化節點集區和工作負載,以便透過 Z4M (z4m-highmem-192) VM,搭配 GKE DRANET 使用 RDMA 網路介面。
建立儲存空間最佳化節點集區
使用 --accelerator-network-profile=auto 旗標建立儲存空間最佳化節點集區,讓 GKE 自動佈建及連結基礎 Falcon 虛擬私有雲網路、子網路和次要網路介面。在 Z4M 節點集區中,GKE 預設會啟用 DRANET,因此建立節點集區時,不必指定 cloud.google.com/gke-networking-dra-driver=true 節點標籤。這個範例使用 z4m-highmem-192 機型,該機型具有雙實體 Titanium NIC,並提供兩個 RDMA 介面。如需支援的機器類型清單,請參閱「需求條件」。
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--project=PROJECT_ID \
--zone=ZONE \
--machine-type=z4m-highmem-192 \
--num-nodes=NUM_NODES \
--accelerator-network-profile=auto
更改下列內容:
NODE_POOL_NAME:新節點集區的名稱。CLUSTER_NAME:叢集名稱。PROJECT_ID:您的 Google Cloud 專案 ID。ZONE:節點集區的 Google Cloud 可用區。NUM_NODES:節點集區中的節點數量。如要使用範例rdma-server和rdma-clientPod 測試跨節點的 RDMA 流量,請至少指定2。
準備儲存空間最佳化工作負載容器映像檔
如果工作負載在儲存空間最佳化節點上使用 Cloud RDMA,則須使用 Rocky Linux 8 容器映像檔,並安裝 Cloud RDMA 的自訂使用者空間 RDMA 程式庫 (rdma-core)。請勿使用預設上游套件,因為這些套件缺少主機 IRDMA 驅動程式所需的自訂 ABI 擴充功能,且會在執行階段失敗並顯示 -ENOSPC 錯誤。如要驗證 IP 位址指派作業並測試 RDMA 連線能力,請一併安裝 iproute、libibverbs-utils、librdmacm-utils、infiniband-diags 和 perftest。
如需設定必要 Package Repository 的 Dockerfile 範例,請參閱「準備 Docker 映像檔」。在 dnf install 指令中加入 iproute,以便使用 ip 指令檢查 IP 指派作業。如要進一步瞭解必要套件,請參閱「Cloud RDMA RPM」。
部署具備 RDMA 資源的工作負載
如要將 RDMA 介面分配給儲存空間最佳化節點上的 Pod,請建立要求 irdma.google.com DeviceClass 的 ResourceClaimTemplate:
建立
ResourceClaimTemplate資訊清單,並儲存為irdma-template.yaml:apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: irdma-template spec: spec: devices: requests: - name: irdma exactly: deviceClassName: irdma.google.com allocationMode: ExactCount count: 2在這個資訊清單中:
deviceClassName: irdma.google.com:要求儲存空間最佳化節點上,由 GKE DRANET 管理的 IRDMA 網路介面。allocationMode: ExactCount和count: 2:要求z4m-highmem-192節點上可用的兩個 IRDMA 介面。如果工作負載只需要一個 RDMA 介面,或您使用的 Z4M 機型提供一個 IRDMA 介面,請指定1。
套用資訊清單:
kubectl apply -f irdma-template.yaml建立資訊清單,定義
rdma-server和rdma-client這兩個 Pod,以便測試節點之間的 RDMA 流量。每個 Pod 都會新增IPC_LOCK功能,並參照irdma-templateResourceClaimTemplate。將資訊清單儲存為irdma-pods.yaml:apiVersion: v1 kind: Pod metadata: name: rdma-server labels: app: perftest role: server spec: restartPolicy: Never affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: ["perftest"] topologyKey: "kubernetes.io/hostname" containers: - name: perftest image: IMAGE_URI command: ["sleep", "infinity"] securityContext: capabilities: add: ["IPC_LOCK"] resources: claims: - name: irdma resourceClaims: - name: irdma resourceClaimTemplateName: irdma-template --- apiVersion: v1 kind: Pod metadata: name: rdma-client labels: app: perftest role: client spec: restartPolicy: Never affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: ["perftest"] topologyKey: "kubernetes.io/hostname" containers: - name: perftest image: IMAGE_URI command: ["sleep", "infinity"] securityContext: capabilities: add: ["IPC_LOCK"] resources: claims: - name: irdma resourceClaims: - name: irdma resourceClaimTemplateName: irdma-template將兩個
IMAGE_URI執行個體替換為 Rocky Linux 8 RDMA 容器映像檔的 URI。在這個資訊清單中:
metadata.labels:使用app: perftest和role標籤為每個 Pod 加上標籤。兩個 Pod 都共用app: perftest標籤,因此反親和性規則會套用至這兩個 Pod。role標籤可區分rdma-serverPod (role: server) 和rdma-clientPod (role: client),以便測試跨節點的 Pod 對 Pod RDMA 連線。affinity.podAntiAffinity:防止 Kubernetes 將共用app: perftest標籤的 Pod 排定在同一個節點上。由於兩個 Pod 都有這個標籤,因此即使ResourceClaimTemplate只要求一個介面 (count: 1),它們也會在不同的實體主機上執行,以進行跨節點 RDMA 測試。節點集區必須至少有兩個節點,才能排定兩個 Pod。securityContext.capabilities.add: ["IPC_LOCK"]:允許容器鎖定記憶體頁面,這是 RDMA 使用者空間程式庫註冊記憶體區域,以便直接存取記憶體時所需的權限。spec.resourceClaims:從irdma-templateResourceClaimTemplate產生 Pod 專屬的ResourceClaim(名為irdma)。containers.resources.claims:將irdma宣告分配的介面存取權授予perftest容器。
套用資訊清單:
kubectl apply -f irdma-pods.yaml確認伺服器 Pod 中可看到分配的 RDMA 介面 (
rdma0和rdma1):kubectl exec rdma-server -- ip -br addr show輸出結果會與下列內容相似:
lo UNKNOWN 127.0.0.1/8 rdma1 UP 10.5.0.3/32 rdma0 UP 10.31.0.3/32 eth0@if18 UP 10.120.2.6/32
如要驗證兩個 Pod 之間的 RDMA 流量,請在 rdma-server 和 rdma-client 之間執行 rping:
在伺服器 Pod 上啟動
rping伺服器:kubectl exec -it rdma-server -- rping -s -a RDMA_IP -v -d將
RDMA_IP替換為伺服器 Pod 的rdma0或rdma1IP 位址,例如10.31.0.3。在第二個終端機中,在用戶端 Pod 上執行
rping用戶端:kubectl exec -it rdma-client -- rping -c -a RDMA_IP -C 5 -v -d在用戶端輸出內容中,確認下列指標是否顯示 RDMA 連線成功:
RDMA_CM_EVENT_ADDR_RESOLVED和RDMA_CM_EVENT_ROUTE_RESOLVED:確認 RDMA 通訊管理員已解析目標 RDMA IP 位址和路徑。ESTABLISHED和rdma_connect successful:確認用戶端已建立佇列配對 (qp)、完成佇列 (cq) 和保護網域 (pd),並建立 RDMA 連線。- 五個
send completion、recv completion和ping data: rdma-ping-項目:確認在關閉連線 (destroy cm_id) 之前,RDMA 介面上已完成五次 RDMA 讀取和寫入來回疊代。
使用自訂 ComputeClass 啟用 DRANET
如要在 Autopilot 叢集,或在 Standard 叢集搭配自動佈建節點使用 GKE 代管 DRANET,必須使用自訂 ComputeClass 資源選擇加入這項功能。
建立 ComputeClass 資訊清單,啟用 DRANET 驅動程式,並將加速晶片 VM 網路設定檔設為
auto:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: dranet-compute-class spec: nodePoolAutoCreation: enabled: true nodePoolConfig: dra: networking: enabled: true priorities: - machineType: MACHINE_TYPE # Omit the gpu section for storage-optimized VMs (such as Z4M). gpu: count: GPU_COUNT type: GPU_TYPE acceleratorNetworkProfile: auto更改下列內容:
MACHINE_TYPE:節點集區的機器類型,例如a3-ultragpu-8g或z4m-highmem-192。GPU_COUNT:機器類型的 GPU 數量。GPU_TYPE:GPU 類型,例如nvidia-h200。
套用資訊清單:
kubectl apply -f COMPUTE_CLASS_FILENAME.yaml在 Pod 規格中,使用
cloud.google.com/compute-class節點選取器參照 ComputeClass:apiVersion: v1 kind: Pod metadata: name: dranet-pod spec: nodeSelector: cloud.google.com/compute-class: "dranet-compute-class" ...
要求特定數量的網路裝置
上述 GPU 和 TPU 範例說明如何將 allocationMode 設為 All,要求特定類型的所有可用網路裝置。如要改為要求特定數量的裝置,請在 ResourceClaimTemplate 中將 allocationMode 設為 ExactCount,如「部署具備 RDMA 資源的工作負載」所示。
以下範例會要求兩個 RDMA 網路裝置:
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
name: two-mrdma
spec:
spec:
devices:
requests:
- name: req-mrdma
exactly:
deviceClassName: mrdma.google.com
allocationMode: ExactCount
count: 2
後續步驟
- 進一步瞭解動態資源分配。
- 進一步瞭解如何設定加速器 VM 的自動化網路功能。