涂晓军 孙 权,2 蔡立志
1(中国银联股份有限公司 上海 201201)
2(复旦大学 上海 200433)
3(上海计算机软件技术开发中心上海市计算机软件评测重点实验室 上海 201112)
RDMA即远程DMA,是最早脱胎于InfiniBand网络[1-3]的技术,主要应用于高性能科学计算中。随着云计算的兴起,RDMA技术也逐渐被应用到云数据中心具有高性能要求的场景中。
当前RDMA的使用案例主要集中于互联网企业,尤其是高性能计算领域,相应的标准组织也在积极推动,同时也出现了提供RDMA专用技术服务的公司。
国际上,微软是在数据中心大规模部署RDMA的第一家超大规模公司[4]。FaceBook主导的OCP(Open Computing Project)对于推动网络的开放解耦与RDMA的应用也做了许多的工作。
国内来看,从2016年开始,阿里巴巴就投入专项研究,以改造RDMA,提高传输性能,从网卡底层开始设计满足大规模应用的网络,基于RDMA网络技术的云存储和电商数据库服务器可以从容地应对峰值流量考验[5]。百度在2014年前后开始引入RDMA网络,先后部署了lnfinband集群和RoCEv1集群。2015年,百度分别在SZWG机房和YQ01机房大规模部署了RoCEv2集群,分别承载了深度学习、语音识别和自然语言处理等相关的机器学习任务。目前RDMA集群总体规模为600台左右,这是国内比较大的一个RoCEv2网络。京东人工智能研发团队在分布式的模型训练场景中,也使用了RDMA技术,针对模型文件的高性能传输,满足了分布式训练的需求。
RDMA对于端到端的网络传输做了多重的优化,其定位是高性能的网络技术,所带来的效果主要体现在如下几个方面:
(1) 减轻CPU负荷:通过主机侧内核旁路零拷贝以及网络对于传输控制协议的卸载,可以极大地解放主机的CPU,从侧面提升计算效率。
(2) 拥塞快速处理:除了端侧外,网络侧也直接参与拥塞处理,可以第一时间检测到报文的拥塞堆积,并且及时有效地进行反馈,避免报文大规模的重传。
(3) 低延时:低延时是RDMA最显著的特征,主机侧的精简处理以及网络侧的拥塞及时反馈,可以有效确保时延的可预期性,提升通信的效率。
RDMA在网络技术中主要解决的是拥塞控制的问题,在主机侧采用了内核旁路与网卡卸载等方法降低网络通信的开销。以下是其适用的数据中心场景:
(1) 高性能MPI计算。并行编程结构MPI计算是最早使用RDMA的应用场景,通常应用在大型科研机构的超算中心。其程序通常使用MPI框架进行开发,MPI的底层调用RDMA的API进行网络通信。MPI计算通常在天文气象、流体力学等科学计算领域有大量的使用,但在企业级市场中普及度不高。
(2) 大数据/AI类的应用。大数据/AI类的应用通常涉及到海量数据的搬运与交互,兼具计算密集、网络密集与I/O密集的特征,因此非常适合通过RDMA技术进行集群优化。大数据/AI领域常见的项目,例如Hadoop、Spark[6]、TensorFlow[7]、Pythorch等都已经加入了对于RDMA通信接口的支持。
(3) 分布式存储/数据库。分布式存储或者分布式数据库也是高吞吐数据密集型的应用。随着SSD以及NVMe技术的引入,I/O的速度也大幅增长。Samba文件共享系统、Ceph分布式存储等都加入了对于RDMA通信接口的支持。在分布式数据库领域,有些数据库采用了计算存储分离的设计,在存储部分也会用RDMA进行加速,例如阿里巴巴的PolarDB。内存数据库方面,也有相应的采用RDMA进行网络设计的研究,甚至是对Redis的RDMA化改造。
在网络架构上,SDN通常能够实现更灵活的选路控制,而RDMA主要处理网络的拥塞流控,两者此前一般都独立存在。RDMA把端到端的网络通信做到了极致,如果能结合上整体的网络视图,两者就能够实现更好的网络优化,如图1所示。
图1 SDN与RDMA的联合优化
在图1的Leaf-Spine的网络通信场景中,当一个Spine的出端口出现拥塞时有两种解决方法:一种是通过拥塞控制降低Leaf服务的发送速率;另一种是通过SDN控制器流量调度,将部分的Leaf流量切换到另一个空闲的Spine中,实现整个网络的吞吐最优。
如果以更高的视野来看,除了网络侧的高性能网络优化外,在应用方面也需要从源头对集群应用的通信结构进行优化。
例如在当前的分布式学习计算中,比较常用的是如图2所示的PS-Worker式的汇总型通信[8]。这种通信结构会出现多对一的网络流,对PS节点将会造成一定的压力,即使网络层面能够很好地处理拥塞,但整体的吞吐量仍然会有所限制。另外一种是Horovod的分布式训练,将通信结构更改为环状的通信,以避免出现多对一的网络流,造成单一节点拥塞瓶颈的出现,但会出现单点失效或者跳数增多与时延加长的性能损失。分布式的AllReduce的方式则是结合了汇总型与环状处理两者各自的优势,对模型进行了综合的优化[9],如图3所示。
图2 分布式AI任务的通信结构
图3 集中与环状通信结构的融合
为了更好地将RDMA网络技术应用于金融人工智能的场景,本文设计并构建了基于GPU虚拟化与RDMA加速的云原生大算力网络集群。该系统的底层基于异构的GPU芯片进行算力加速,以及RDMA高性能网络进行数据端到端的低延时高吞吐传输。虚拟化层对GPU以及RDMA网卡的资源进行池化与虚拟化。平台层采用Kubernetes容器云平台,提供轻量级弹性的资源编排,为租户动态分配所需的GPU算力以及RDMA网络资源。框架层集成常用的人工智能框架与分布式的模型通信,为上层应用提供高效的建模支撑。整个平台结合了轻量级云原生平台、GPU算力虚拟化、高性能RDMA网络,实现了一个面向多租户超高性能的大数据算力集群,如图4所示。
图4 基于GPU与RDMA的大算力集群
RDMA对网络的流量与拥塞控制主要采用PFC以及ECN两种机制。
PFC主要是流量控制,当交换机的入口队列出现拥塞时,它会向上游的端口发送PFC帧,以短暂地阻塞上游端口的发送;ECN则是拥塞控制,在交换机的出口端打上标记,这样当接收端收到带ECN标记的报文时,就可以向源节点反向发送控制报文,以调整源端的发送速率。相关的关键参数为:
1) PFC的触发阈值以及收到PFC帧后端口暂停的时间间隔。
2) ECN的触发与恢复门限值,标记概率。
3) 此外为了保证非RDMA流量的吞吐,也需要对交换芯片的缓存分配设置合适的比例。
上述参数的设置,将会对整个网络产生的影响。通常门限值设置低,时延低,吞吐低;门限设置高,时延高,吞吐高。
对于这些参数的设置,通常需要一些经验式的参数调优,比如Mellanox的推荐设置便是一些静态的参数,而华为则采用了一种叫作AIECN或者动态ECN的方式,动态地根据当前的流量状况,对这些参数进行调优。
RDMA的目标是实现高性能的网络传输,其中需要避免因为网络丢包而引起的大规模重传,重传会导致很严重的性能损耗与开销。因此为了配合RDMA,通常在网络侧需要做到无损不丢包。在RoCE具体的实现中,主要是利用了PFC的流量控制机制和ECN的拥塞控制机制。
但实现网络的无损与网络的高吞吐存在一定的矛盾,尤其是PFC的机制,一旦出现拥塞,它会短暂地阻塞端口的传输,并且在稍微大一些的网络中还会出现PFC的头端死锁,大大降低网络的吞吐。
在允许少量的丢包的实际网络中,则可以发挥网络的高吞吐能力。另一方面,在重传的机制上以及拥测控制的机制上的改进,能够尽量减少丢包,并且当丢包出现的时候,也能够以很小的代价对网络进行恢复。
即使在无损网络的实现中,通常也是尽量减少PFC的出现,以防止其对网络的吞吐造成阻塞,这对于PFC与ECN的参数设置就提出了很高的要求。更多的是希望当网络出现拥塞时,ECN的机制首先发挥作用,而PFC只是作为紧急情况下的一个补充手段。
RDMA的网络技术具有超低延时、高吞吐的特性。但RDMA在支持大规模可扩展网络上存在一些瓶颈。其最主要的原因是RDMA将所有的传输层逻辑都卸载到硬件网卡上进行维护,从而大大降低主机CPU的处理负担,并降低了时延。但是硬件RDMA有连接数量的限制,通常在千量级,这对整个RDMA网络的可扩展规模有较大的影响,很难与大型数据中心上万量级的服务器规模相匹配。这也是为何当前最大规模的RDMA集群也只能在1 000台物理服务器左右,通常适用于机器学习训练以及分布式存储等专用集群。与之相对应,TCP的传输状态通常都是靠CPU和内存进行维系的,因此只要内存足够大,其连接数可以扩展到百万级别,非常适合大规模云数据中心场景。
RDMA对于网络侧的主要要求便是流量与拥塞的控制。从控制论的角度而言,无非就是一个负反馈的控制系统。而在具体实现中,主要涉及到三点:(1) 如何有效地检测到拥塞。拥塞的检测通常发生在交换机芯片的缓存管理中,交换芯片一般都能够有效通过当前队列中的报文数量来判断是否有拥塞发生。(2) 如何将拥塞信息有效地传播到上下游的链路上。一种方法是发送标准的PFC以及ECN的帧。另外像阿里的HPCC还采用了当前比较流行的INT技术来对当前的拥塞状态进行记录与传输,除了简单的标记拥塞事件外,INT所携带的信息还可以包括拥塞的比例以及来回RTT的测量等,以便于上下游节点做更好的决策。(3) 各端点收到拥塞信息后如何进行调整,并且能最好地做到全局最优。根据所测量到的拥塞信息,能够及时有效地调整源端的发送速率,最理想的情况是调整到全局最优的速率,既不造成丢包,也不浪费带宽,另外还要能够保证流量的公平性,尤其是在多对一的网络场景中。
本文采用了业界常用的benchmark模型AlexNet和VGG16作为测试用例,在基于GPU与RDMA的大算力集群平台之上,结合两种主流的分布式参数聚合策略PS-worker及Ring Allreduce,对传统的TCP以及RDMA通信模式下的模型训练进行了相关性能测试。按照测试组合,分别构建8个镜像,根据不同的测试场景,利用构建好的8个镜像发起多次训练任务,训练过程中查看集群pod的创建情况以及GPU的利用率。参与测试的深度学习模型和参数聚合方法组合如表1所示。
表1 不同的AI模型与参数聚合方法组合
图5为不同网络模式下的机器学习训练速度的对比。对于RDMA,本文主要对比g与d两组实验结果(g代表普通的grpc,d代表gdr,即GPU Direct RDMA,它在GPU与RDMA层面做了联合的优化,数据从一个GPU的显存直接RDMA到另一个节点的GPU显存上)。对于AlexNet模型,1acd与1apd的处理帧速均比1acg和1apg提升了2倍以上;对于Vgg模型,GDR的加速也有一定的提升效果,2vcd比2vcg提升了2倍以上,2vpd比2vpg提升了0.3~0.4倍。
图5 TCP与RDMA通信模式下的性能对比
RDMA将端到端的网络通信做到了极致,目标上是为了实现快速的远程数据传输,技术上是多重优化的结合体(涉及到主机侧的内核旁路、传输层网卡卸载、网络侧的拥塞流控),达到的效果是低时延、高吞吐、低CPU损耗。同时,当前RDMA的实现也存在组网规模受限、配置与改造难度大等局限性。
随着数据中心数据量的巨量增长与算力密集度的提升,RDMA流量在数据中心中的比重将逐步上升。它的出现具有重大意义,也对高性能的计算集群的演进具有一定的启发性。它是大数据与智能计算大规模普及的必然结果,也将成为数据智能时代的网络利器。RDMA技术实现方面,技术复杂度与配置便捷性仍有可改进的空间。