弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA),是阿里云提供的低延迟、大吞吐、高弹性的高性能RDMA网络服务。eRDMA是基于第四代神龙系统架构和云上VPC网络、100%兼容RDMA生态、提供超大规模网络部署的ECS普惠RDMA服务。本文介绍如何在ACK集群中配置和使用eRDMA。
操作步骤
步骤一:创建节点池
eRDMA的节点需要特殊的配置,您需要使用独立的节点池来配置。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池页面,单击右上角的创建节点池。
下表介绍主要配置项。关于其他配置项的详细信息,请参见创建节点池。
配置项
说明
操作系统
配置为Alibaba Cloud Linux 3.x。
期望节点数
配置节点数量为0,后续手动添加节点。
(建议)CPU Policy
单击显示高级选项,选择Static启用CPU管理策略。
步骤二:添加eRDMA节点
配置eRDMA机器
不同机型物理网卡的配额不同,从而eRDMA的配额、带宽和配置方式也不一样。
机型的物理网卡配额可以通过实例规格族文档中找到,绝大多数机型无特殊标识的只有一张物理网卡。配置方式如下。
单物理网卡机型
创建ECS实例。
登录云服务器控制台,在左侧导航栏选择概览。
在概览页面,单击创建实例。
下表介绍主要配置项。关于其他配置项的详细信息,请参见云服务器ECS快速入门。
配置项
说明
网络及可用区
需要选择ACK集群所在的专有网络。
实例
需要选择支持eRDMA的实例规格族。更多信息,请参见实例规格族。
弹性网卡
选中弹性RDMA接口。
多物理网卡机型
创建ECS实例。
登录云服务器控制台,在左侧导航栏选择概览。
在概览页面,单击创建实例。
下表介绍主要配置项。关于其他配置项的详细信息,请参见云服务器ECS快速入门。
配置项
说明
网络及可用区
需要选择ACK集群所在的专有网络。
实例
需要选择支持eRDMA的多物理网卡实例规格族。更多信息,请参见实例规格族。
为节点额外创建和绑定多张eRDMA网卡。
如果集群为Terway网络,需要配置Terway的网卡白名单,避免Terway组件修改eRDMA的网卡。配置方式,请参见为弹性网卡(ENI)配置白名单。
将eRDMA机器加入节点池
将创建的ECS实例添加到节点池中。
在每个节点上安装最新版本的eRDMA驱动。
ECS实例(企业级x86规格)上配置eRDMA的方法,请参见在企业级实例上配置eRDMA。
GPU实例上配置eRDMA的方法,请参见在GPU实例上配置eRDMA。
当运行tensorflow等RDMA带外建联的程序时,安装eRDMA驱动需配置为compat模式:
rmmod erdma insmod /var/lib/dkms/erdma/1.0.1/`uname -r`/x86_64/module/erdma.ko compat_mode=1
步骤三:运行应用
在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