本文檔介紹如何在ACK託管叢集Pro版的靈駿節點中配置和使用RDMA(RemoteDirect Memory Access)技術,實現高效能容器網路通訊。RDMA技術可顯著降低網路延遲並提升輸送量,適用於Alibaba Cloud HPC、AI訓練、分布式儲存等對網路效能要求嚴苛的情境。
RDMA介紹
RDMA(Remote Direct Memory Access,遠端直接記憶體存取)是一種高效能網路通訊技術,旨在解決傳統網路傳輸中伺服器端資料處理的延遲問題。RDMA允許資料直接從一台電腦的記憶體傳輸到另一台電腦,無需雙方作業系統的介入。這種機制實現了高輸送量、低延遲的網路通訊,尤其適合在大規模並行電腦叢集中使用。
RDMA通過網路將資料直接傳入目標電腦的儲存區,實現從一個系統到遠程系統儲存空間的快速資料移動。整個傳輸過程不對作業系統造成任何影響,因此幾乎不消耗電腦的處理能力,繼而減少外部儲存空間複製和環境切換的開銷,節省記憶體頻寬和CPU周期,以提升應用系統效能。
前提條件
在Kubernetes中,Pod支援兩種網路模式:
獨立IP模式:Pod擁有獨立的IP地址(非hostNetwork模式)
共用網路模式:Pod直接使用宿主節點網路(hostNetwork模式)
非hostNetwork模式的Pod使用RDMA功能時,需滿足以下條件:
靈駿節點所在的靈駿裸金屬叢集的計算網路IP版本須為IPv6
建立靈駿裸金屬叢集時必須選擇IPv6模式
操作步驟
安裝RDMA Device Plugin組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在組件管理頁面,單擊其他頁簽,定位ack-rdma-device-plugin組件,按照頁面提示配置組件並完成安裝。
配置項
說明
開啟支援非 hostNetwork 的 RDMA 網路
選擇非hostNetwork模式的Pod的RDMA使用開關。可選值:
False(不勾選):僅允許hostNetwork模式的Pod使用RDMA網路。True(勾選):允許非hostNetwork模式的Pod使用RDMA網路。開啟前,請確認ACK叢集關聯的靈駿裸金屬叢集使用的網路版本為IPv6,否則RDMA配置不生效。
確認RDMA Device Plugin已正常運行,且在每個有RDMA的靈駿節點都已啟動。
kubectl get ds ack-rdma-dp-ds -n kube-system預期輸出:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ack-rdma-dp-ds 2 2 2 2 2 <none> xxh檢查節點是否擁有資源
rdma/hca。kubectl get node e01-cn-xxxx -oyaml預期輸出:
... allocatable: cpu: 189280m ephemeral-storage: "3401372677838" hugepages-1Gi: "0" hugepages-2Mi: "0" memory: 2063229768Ki nvidia.com/gpu: "8" pods: "64" rdma/hca: 1k capacity: cpu: "192" ephemeral-storage: 3690725568Ki hugepages-1Gi: "0" hugepages-2Mi: "0" memory: 2112881480Ki nvidia.com/gpu: "8" pods: "64" rdma/hca: 1k ...執行以下YAML檔案,為Pod使用RDMA功能申請
rdma/hca資源。申請量為
rdma/hca:1即可。如果RDMA Device Plugin組件未開啟非hostNetwork模式的Pod允許使用RDMA的開關,則需配置
hostNetwork: true的Pod才可使用RDMA功能。
apiVersion: batch/v1 kind: Job metadata: name: hps-benchmark spec: parallelism: 1 template: spec: containers: - name: hps-benchmark image: "****" command: - sh - -c - | python /workspace/wdl_8gpu_outbrain.py resources: limits: nvidia.com/gpu: 8 rdma/hca: 1 workingDir: /root volumeMounts: - name: shm mountPath: /dev/shm securityContext: capabilities: add: - SYS_RESOURCE - IPC_LOCK restartPolicy: Never volumes: - name: shm emptyDir: medium: Memory sizeLimit: 8Gi hostNetwork: true tolerations: - operator: Exists