『量子位』推理性能比第二名快5倍,阿里公开核心技术:如何摘下4项世界冠军( 二 )


此前的世界纪录所采用的集群规模也是128张V100 , 网络通信则为100GInfiniBand网络 , 是本次打破世界纪录的32GVPC的3倍的带宽 。 异构计算云服务的典型网络配置为32Gbps带宽的VPC网络 , 为了更贴近最终用户的场景 , 阿里选择的是VPC网络 。
32GVPC网络与前世界纪录的网络物理带宽上的巨大差距是团队面临的重大挑战 , 我们从两个大的方向作了深入的优化:
第一个方向是从模型本身的优化上 , 进行超参的调整以及optimizer的改进 , 减少达到93%精度情况下所需要进行的迭代数 , 同时也要尽力提升单机的性能 。
第二个方向是分布式性能优化 , 我们采用团队自研的飞天AI加速引擎AIACC-Training(原Ali-Perseus-Training)作为分布式的通信库 , 充分挖掘32GVPC的所有潜力 。
最终两个方向的极致优化相叠加 , 超越了一个看似不可能达到的性能屏障 , 以较低的网络带宽 , 创造了新的世界纪录 。
同时 , 因为分布式训练部署本身的复杂性 , 为了提高效率 , 也为了方便外部用户重现结果 , 阿里团队使用了之前开发的即刻构建的工具FastGPU , 将集群的创建和分布式训练的调度全部以脚本的方式完成 , 可以一键启动 , 大大加快了优化工作的效率 。
未来 , 我们会开源基于AIACC的benchmark代码 , 方便外部用户一键复现结果 。
分布式训练领域近年来发展迅猛 , 有多种可供选择的解决方案 , 对于Tensorflow而言 , 框架本身支持PS模式以及Ringallreduce风格的分布式通信 , 第三方的支持有Horovod 。
对于ResNet50的分布式训练 , 开源方案中Horovod依然是相对最优的解决方案 , 因此 , 阿里以Horovod作为对比的baseline 。
分布式训练的逻辑框图如下图所示:
『量子位』推理性能比第二名快5倍,阿里公开核心技术:如何摘下4项世界冠军
文章图片
最小计算节点为单张GPU卡 , 每个计算节点都会从总的数据集中划分一份数据作为本节点的训练数据 , 然后开始前向和后向的计算 , 在后向计算结束后会得到当前batch所产生的梯度 。
然后在更新参数之前 , 需要在整个集群上进行梯度通信 。 HorovodAPI就是在梯度更新之前 , 在optimizer这个环节插入了一段多节点间的通信的流程 。
AIACC-TrainingAIACC-Training是阿里云自研的深度学习分布式训练通信引擎 , 统一支持Tensorflow、PyTorch、MxNet和Caffe , 从IaaS层面提供可被集成且兼容开源的加速库 。
现在已经有多家AI和互联网客户在生产环境中大量部署使用 , 显著提升异构计算产品的性价比 , 从软件层面为客户提供差异化的计算服务 , 架构如下图所示 。
『量子位』推理性能比第二名快5倍,阿里公开核心技术:如何摘下4项世界冠军
文章图片
AIACC-Training作为此次Dawnbench记录的分布式后端 , 发挥了至关重要的作用 。 以下是我们对AIACC-Training背后的分布式优化作详细的解析 。
去中心化梯度协商分布式性能的关键就是如何优化这个通信环节的效率 , 对于ResNet50而言 , 我们需要通信的梯度数据大约是170个 , 而通信的总量大约是50MB 。
这些梯度的产生时机依赖于它们各自在计算图中的位置 , 计算图中存在依赖关系的部分梯度决定了这一部分梯度被计算出来的时间先后顺序 。
而在计算图中处于相互之间完全无依赖的算子的 , 它们在每次计算发生的时机具有一定的随机性 。 在多节点间通信要解决的第一个问题就是需要协商梯度的同步顺序 。
Horovod中所采用的的方法是以0号节点为中心 , 与所有其它节点进行点对点的通信确定当前所有节点上都已经就绪的梯度 , 然后再0号节点上确定这些就绪梯度上如何去通信 , 最后将通信策略点对点的发送到每一个其它节点 , 之后根据通信策略开始进行多机通信 。


推荐阅读