博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个用于分布式DNN训练加速的通用通信调度器
阅读量:5171 次
发布时间:2019-06-13

本文共 1284 字,大约阅读时间需要 4 分钟。

论文:

译文:一个用于分布式DNN训练加速的通用通信调度器

摘要

我们提出ByteScheduler,一个用于分布式DNN训练加速的通用通信调度器。ByteScheduler基于我们最基本的分析:通过张量切分和重组来进行传输,可以得到理论上的最优结果,即使真实环境中有调度代价,性能表现也很不错。为了让ByteScheduler适用于各种DNN训练框架,我们介绍一种统一的抽象和一种依赖代理机制,使得可以在不破坏框架引擎原有依赖的基础上进行通信调度(注:这是什么东西?)。我们进一步介绍一种贝叶斯优化方法,可以在各种网络环境下,针对不同训练模型,来自动调整张量划分的尺寸,以及其他参数。ByteScheduler目前支持TensorFlow、PyTorch和MXNet,并且不用修改源码,兼容Parameter Server和all-reduce架构的梯度同步,TCP和RDMA网络都行。我们的实验证明,ByteScheduler训练的加速比是2.96。

介绍

深度神经网络(DNN)被广泛运用于各个领域,例如计算机视觉和自然语言处理等等。但是,训练DNN很耗时,主要是因为训练数据多,以及DNN模型的尺寸越来越大。加速DNN训练最常用的方法是数据并行。不幸的是,因为通信开销,它的性能常常比线性加速比差很远。作为一个大型在线服务提供商,在很多我们内部和公开训练任务中,通信通常占总训练时间的很大一部分。因此,很多通信加速方法被提出并且集成到

背景和动机

DNN训练和数据并行:

在深度学习中,DNN模型是通过迭代一个大数据集来训练的(也叫epoch),以最小化损失函数。 

正向和反向传播:

在每个epoch期间,数据集被划分成mini-batch。在每次iteration,一个mini-batch逐层经过DNN并产生一个损失,这个过程叫正向传播(FP)。

张量划分:

 

实现细节 

ByteScheduler是用C++11和Python实现的。核心是一个通用Python库,用于所有ML框架。对于每个框架,都需要一个插件,用于PS或者all-reduce架构。插件通常用C++和Python混编。

ByteScheduler Core:

MXNet plugin:

PyTorch plugin:

TensorFlow plugin:

 

评估

 

讨论和未来方向

 

相关工作 

加速DNN训练的通信:

加速DNN训练的通信:

加速DNN训练的通信: 

结论

ByteScheduler是一个用于分布式DNN训练加速的通用通信调度器。我们的实现,支持很多ML框架,包括MXNet、PyTorch和TensorFlow,兼容PS和all-reduce梯度同步,TCP和RDMA网络都行。ByteScheduler端到端可以加速196%。主要的设计思想包括:通信操作的统一抽象、依赖代理和系统参数自动调整。我们已经开源我们的实现,期待社区可以加入更多对已有和未来框架的支持。

 

转载于:https://www.cnblogs.com/yangwenhuan/p/11599258.html

你可能感兴趣的文章
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
获取国内随机IP的函数
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>