彈性RDMA(Elastic Remote Direct Memory Access,簡稱eRDMA),是阿里雲提供的低延遲、大吞吐、高彈性的高效能RDMA網路服務。eRDMA是基於第四代神龍系統架構和雲上VPC網路、100%相容RDMA生態、提供超大規模網路部署的ECS普惠RDMA服務。本文介紹如何在ACK叢集中配置和使用eRDMA。
操作步驟
步驟一:建立節點池
eRDMA的節點需要特殊的配置,您需要使用獨立的節點池來配置。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在節點池頁面,單擊右上方的建立節點池。
下表介紹主要配置項。關於其他配置項的詳細資料,請參見建立節點池。
配置項
說明
作業系統
配置為Alibaba Cloud Linux 3.x。
期望節點數
配置節點數量為0,後續手動添加節點。
(建議)CPU Policy
單擊顯示進階選項,選擇Static啟用CPU管理原則。
步驟二:添加eRDMA節點
配置eRDMA機器
不同機型物理網卡的配額不同,從而eRDMA的配額、頻寬和配置方式也不一樣。
機型的物理網卡配額可以通過執行個體規格類型系列文檔中找到,絕大多數機型無特殊標識的只有一張物理網卡。配置方式如下。
單物理網卡機型
建立ECS執行個體。
登入雲端服務器控制台,在左側導覽列選擇概覽。
在概覽頁面,單擊建立執行個體。
下表介紹主要配置項。關於其他配置項的詳細資料,請參見Elastic Compute Service快速入門。
配置項
說明
網路及可用性區域
需要選擇ACK叢集所在的專用網路。
執行個體
需要選擇支援eRDMA的執行個體規格類型系列。更多資訊,請參見執行個體規格類型系列。
彈性網卡
選中彈性RDMA介面。
多物理網卡機型
建立ECS執行個體。
登入雲端服務器控制台,在左側導覽列選擇概覽。
在概覽頁面,單擊建立執行個體。
下表介紹主要配置項。關於其他配置項的詳細資料,請參見Elastic Compute Service快速入門。
配置項
說明
網路及可用性區域
需要選擇ACK叢集所在的專用網路。
執行個體
需要選擇支援eRDMA的多物理網卡執行個體規格類型系列。更多資訊,請參見執行個體規格類型系列。
為節點額外建立和綁定多張eRDMA網卡。
如果叢集為Terway網路,需要配置Terway的網卡白名單,避免Terway組件修改eRDMA的網卡。配置方式,請參見為彈性網卡(ENI)配置白名單。
將eRDMA機器加入節點池
將建立的ECS執行個體添加到節點池中。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在節點池頁面,單擊目標節點池右側操作列下的更多,然後單擊添加已有節點。
在選擇已有雲端服務器執行個體配置項頁面,選擇手動添加已有雲端服務器執行個體。具體操作,請參見手動添加節點。
在每個節點上安裝最新版本的eRDMA驅動。
步驟三:運行應用
在Dockerfile中增加eRDMA庫安裝,並重新構建應用程式容器鏡像,以便鏡像中的應用能夠使用eRDMA,您可以使用如下命令進行操作。
# Debian或者Ubuntu: 注意sources.list中的OS名和版本與實際使用的版本設定為一致。 wget -qO - https://mirrors.aliyun.com/erdma/GPGKEY | apt-key add - && echo "deb [ arch=amd64 ] https://mirrors.aliyun.com/erdma/apt/{OS|ubuntu} {Version|focal}/erdma main" | tee /etc/apt/sources.list.d/erdma.list && apt update && apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1 # Alibaba Cloud Linux或者rhel:按照OS找到對應的repo目錄,配置到yum.repos.d目錄中。 cat > /etc/yum.repos.d/erdma.repo <<EOF [erdma] name = ERDMA Repository baseurl = http://mirrors.aliyun.com/erdma/yum/redhat/7/erdma/x86_64/ gpgcheck = 0 enabled = 1 EOF yum install -y ethtool groff-base hwdata libnl3 pciutils sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y --disablerepo=* --enablerepo="erdma"
設定應用運行模式。
您需要對Pod的相關參數進行設定。
Privileged:Pod需要使用Privileged運行來識別到eRDMA裝置。具體操作,請參見Alibaba Cloud Linux 3運行GPU容器出現Failed to initialize NVML: Unknown Error的問題怎麼辦?的情況一。
HostNetwork:Pod需要使用Host網路運行。具體操作,請參見使用Host網路。
使用如下YAML部署Tensorflow樣本應用。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: netperf name: netperf spec: replicas: 2 selector: matchLabels: app: netperf template: metadata: labels: app: netperf spec: hostNetwork: true containers: - command: - bash - -c - sleep 360000 image: registry-vpc.cn-beijing.aliyuncs.com/wangbs/tftest imagePullPolicy: Always name: netperf resources: limits: cpu: "10" requests: cpu: "10" securityContext: privileged: true
運行應用並進行測試。
執行如下命令,並記錄Pod的IP地址。
kubectl get pod -o wide
預期輸出:
建立兩個進程,其中一個為PS,一個為Worker。將記錄的IP填寫到命令列參數中。
PS:Worker:預期輸出如下,您可以看到Tensorflow樣本應用的計算速度。
# Worker CUDA_VISIBLE_DEVICES= python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --ps_hosts=172.18.XX.XX:9100\ --worker_hosts=172.18.XX.XX:9200 \ --job_name=worker \ --task_index=0 \ --server_protocol=grpc+verbs \ --variable_update=parameter_server \ --local_parameter_device=cpu \ --model=resnet50 \ --device=cpu \ --batch_size=16 \ --data_format=NHWC # PS CUDA_VISIBLE_DEVICES= python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --ps_hosts=172.18.XX.XX:9100\ --worker_hosts=172.18.XX.XX:9200 \ --job_name=ps \ --local_parameter_device=cpu \ --task_index=0 \ --device=cpu \ --data_format=NHWC \ --server_protocol=grpc+verbs