但是通过观察Adam的优化算法,我们可以看到β
和β
都是常量,且蓝色高亮的部分都是相对独立的计算过程,各个PS之间可以独立完成 。基于这样的发现,优化的方法也就非常直观了,我们为每一个PS上的Adam优化器冗余创建了β参数,并在本地计算t和alpha值,去除了因此负载不均导致的PS热点问题 。
该优化所带来的提升具备普适性且效果明显,在美团内部某业务模型上,通过β热点去除可以带来9%左右的性能提升 。此外,由于摆脱了对β的全局依赖,该优化还能提高PS架构的可扩展性,在扩增Worker数量的时候相比之前会带来更好的加速比 。
3.3 通信优化
通过2.2章节的分析可知,系统的通信压力也非常大,我们主要基于RDMA做了通信优化的工作 。首先简单介绍一下RDMA,相比较于传统基于套接字TCP/IP协议栈的通信过程,RDMA具有零拷贝、内核旁路的优势,不仅降低了网络的延迟,同时也降低了CPU的占用率,RDMA更适合深度学习模型的相关通信过程 。
RDMA主要包括三种协议Infiniband、RoCE(V1, V2)、iWARP 。在美团内部的深度学习场景中,RDMA通信协议使用的是RoCE V2协议 。目前在深度学习训练领域,尤其是在稠密模型训练场景(NLP、CV等),RDMA已经是大规模分布式训练的标配 。然而,在大规模稀疏模型的训练中,开源系统对于RDMA的支持非常有限,TensorFlow Verbs[4]通信模块已经很长时间没有更新了,通信效果也并不理想,我们基于此之上进行了很多的改进工作 。
经过优化后的版本,在1TB Click Logs[5]公开数据集、DLRM[6]模型、100个Worker以上的训练,性能提升了20%~40% 。在美团的多个业务模型上,对比TensorFlow Seastar[7]改造的通信层实现也有10%~60%的速度提升 。同时也把我们的工作回馈给了社区 。
3.3.1 Memory Registration优化
RDMA有三种数据传输的方式SEND/RECV、WRITE、READ,其中WRITE、READ类似于数据发送方直接在远程Memory进行读写,Receiver无法感知,WRITE和READ适用于批量数据传输 。在TensorFlow内部,基于RDMA的数据传输方式使用的是WRITE单边通信模式 。
文章插图
文章插图
3.3.2 RDMA静态分配器
RDMA静态分配器是上一个MR注册优化的延伸 。通过Memory Registration优化,去除非传输Tensor的MR注册,我们降低了MR注册数量 。但是在稀疏场景大规模的训练下,并行训练的Worker常有几百上千个,这会带来新的问题:
PS架构中的PS和Worker互为Client-Server,这里以PS端为例,当Worker数目增加到上千个时,Worker数目的增多,造成PS端MR注册频次还是非常高,增加了内存分配注册的耗时 。由于稀疏场景不同Step之间同一个算子输出Tensor的形状可能发生变化,导致了创建的MR可复用性较差,带来了较高的内存碎片和重复注册MR开销 。
针对上面的问题,我们引入了MR静态分配器的策略 。
文章插图
虽然稀疏场景同一个算子输出Tensor的Shape存在变化的可能,但是整体变化幅度可控,通过监控与分析,是可以找到一个较为稳定的内存大小,满足多Step间Tensor的存储需求 。基于上面的信息,我们修改了原有逐Tensor(Request)的MR申请策略,通过一次性预申请一块较大的空间并注册到网卡端,后续通过自己维护的分配策略进行空间的分配,大大降低了MR申请的频率,绝大多数情况下,训练全过程中只需要一次MR注册申请即可 。我们引入了一种简单的交换协议,将传输Tensor的Shape,Data打包到一起,写到Client端 。Client端根据协议,解析出Tensor大小,并最终读取Data,避免了原生实现中因Tensor的Shape变化而产生的多次协商过程 。
- 核桃冰糖粥该怎么熬
- 老年患者在春季应该如何护心
- 你知道几个 中国古典音乐十大名曲
- 苹果xr现在价格多少钱 iphonexr上市时间是发售价
- 在钉钉群里直接考试?“群考试”全新上线!
- 在所有注入北冰洋的河流中,哪一条河流的流程最长?
- 汽车迎宾灯有哪些作用
- 如何清理地上的头发
- 水龙头怎样选购
- 水龙头安装要注意什么