首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI 技术讲座精选:ChainerMN 分布式深度学习的性能

AI 技术讲座精选:ChainerMN 分布式深度学习的性能

作者头像
AI科技大本营
发布2018-04-26 11:01:53
8070
发布2018-04-26 11:01:53
举报

2017深度学习峰会于今年1月在旧金山落下帷幕。会上,PFN 发布了其在多节点环境下使用 Chainer 的分布式深度学习所取得的进展。在今天的这篇文章中,我会对 PFN 发布的这份报告作出详细的解释。

尽管 GPU 的性能正在不断提升,为了实现更高精度而使用更大的训练数据集,导致神经网络模型的参数和训练模型的计算成本也在不断的上升。在单 GPU上,若是使用包含 Chainer 的框架来训练模型,可能会花费一周多的时间。为了处理大型训练数据集,也为了提高迭代试错的效率,将多个 GPU 整合到一起来加速训练过程尤为重要。鉴于此,PFN 开发了一个名为 ChainerMN(Chainer Multi-Node)的程序包,在 Chainer 中增加了分布式训练的功能。

ChainerMN 的实现本质

现行的分布式训练的实现方式借助的是数据并行计算的方法,特别是模型同步更新。在这种方法中,每个工作单元都含有现行的模型,所有工作单元共同作用于某个小型数据集,将其分解为一个个更小的子集,随着每次的迭代过程而进行梯度计算。

ChainerMN 运用 MPI 进行节点间的通信,网路基础架构(如 Infiniband 等)的速度越快,对其越有利。而 GPU 之间的结点内通信运用的则是 Nvidia 的 NCCL。

性能评估结果

我们在 ImageNet 分类数据集上对 ChinerMN 的性能进行了评估,选用的是 CNN 模型(ResNet-50)。所有实验的运行环境,均由 Sakura 网络提供。更多细节请参考文章底部附件所示的试验设定。

请注意:在下文的评估中,我们会努力做到公平比较,如有偏颇,敬请谅解。首先,ChainerMN 对于实验环境已经做出了高度的优化,因为 ChainerMN 就是基于环境而开发的。其次,在后面的对比中,针对于其他架构的调试工作可能会不足,但我们已经尽力了。我们仔细地阅读了官方的文档和教程,甚至也包括 Github 上出现的问题。为了鼓励更多的人参与我们的实验,我们计划公开此次实验的代码以及其他相关框架的代码。

ChainerMN 的性能

下图表示的是,GPU 个数的增加量与训练时间缩短量之间的关系。当达到相同的点的时候,训练结束。当 GPU 的数量为4个时,只需要使用一个节点;而当其数量变为8个或者更多时,则需要多个节点。当设定使用128个 GPU 且对训练过程加速100倍时,训练的结果非常接近理想加速曲线。

下图展示的是学习曲线,横轴和纵轴分别代表计算时间和确认准确率。曲线中不是很平滑的部分是学习率乘以0.1的结果(每30个点之后),是 ImageNet 任务在初始阶段的常见现象。

对比其他框架

下图展现的是不同的框架结构使用128个 GPU 时的计算时间。让我们感到惊奇的是(PFN 开发团队同样感到惊奇),ChainerMN 是同类产品中计算速度最快的!接下来,我们会通过其他实验研究该结果出现的原因。

接下来的这张图片展示的是,当改变 GPU 的数量时,不同框架的生产能力的变化。由于迭代次数比较少,测试得到的框架的生产力看起来有些不稳定,但其变化趋势是非常明显的。当 GPU 的数量为1时,MXNet 和 CNTK 的速度比 ChainerMN 要快,主要原因是前两个框架是用 C++ 实现的,而 Chainer 是用 Python 实现的。当 GPU 的数量为4时,只有 MXNet 的速度稍有下降。这是因为,CNTK 和 ChainerMN 在不同 GPU 之间通过 Nvida 的 NCCL 而收集信息。另一方面,在多节点设置中,MXNet 和 ChainerMN 展现出了比 CNTK 更好的可扩展性。在节点间和节点内通信的速度性能的比拼结果中,当 GPU 的数量为128时,ChainerMN 的生产能力最好,速度最快。

请注意:在分析 TensorFlow 结果的时候,我们必须非常小心,因为 TensorFlow 在单机模式下已经足够快了。当 GPU 的数量为1时,TensorFlow 的性能表现的不是很好,这是因为它和其他的框架一样用的是分布式。由于使用 gRPC 框架在工作处理器和独立参数服务器间进行通讯,很可能带来了巨大的损耗。即便是在使用1个 GPU 的情况下,分布式 TensorFlow 的性能与其独立模式下的性能也是不一样的。这个结果与先前某些第三方针对分布式与多 GPU TensorFlow 性能测试的报告不谋而合,参见:

  • [1] “BenchmarkingState-of-the-Art Deep Learning Software Tools”(https://arxiv.org/abs/1608.07249v6), Shaohuai Shi etal., arXiv 2017.
  • [2] “Deep Learning Performance with P100 GPUs”(http://en.community.dell.com/techcenter/high-performance-computing/b/general_hpc/archive/2016/11/11/deep-learning-performance-with-p100-gpus), Rengan Xu and Nishanth Dandapanthu. Dell EMC HPC Innovation Lab.October 2016.

分布式深度学习所遇到的困难和挑战

分布式深度学习其中一个主要困难就是,较高的生产能力并不意味着更好的学习效率。例如,在数据并行方法中,如果增加 GPU 的数量,相应微型数据集的大小也会增加。然而,当微型数据集的大小超过某个特定的阈值时,就会严重影响到模型的升级,同时也会降低确认准确率。这是因为,训练的点数虽然相同,但迭代的次数却会依次减少,模型的成熟度难以达到。另外,随着梯度偏差变得越来越小,众所周知,模型很容易陷入局部最小值(极小值),使得最终模型的泛化能力不强。

不考虑环境而只考虑生产力的基准测试结果是没有意义的。如果仅仅通过相对大型的数据集活着降低了的模型同步频率,来猜测模型拥有很高的生产能力,毫无意义。因此,尽管 GPU 有足够的存储能力,我们仍会选取相对小的数据集来获得相对可靠的准确性。

未来

从二月开始,通过在 Preferred Networks 进行的内部测试,根据测试反馈回来的结果,我们对 ChainerMN 进行了完善,计划在未来几个月内发布这款开源的软件——ChainerMN。

附件:性能评估的部分细节

实验环境:

  • 32 nodes,128 GPUs in total
  • 节点

1) GPU:4*GeForce GTX TITIAN X(Maxwell)

2) CPU:2*Intel(R) Xeon(R) CPU E5-2623 v3 @3.00GHz

3) Network: InfiniBand FDR 4X

实验设定:

  • Dataset: ImageNet-1k (1,281,158 images,already resized to 256x256 pixels before training)
  • Model: ResNet-50 (input image size: 224x224)
  • Training

1) Batch size: 32 per GPU (32 x #GPU is thetotal batch size)

2) Learning rate: multipy 0.1 after every 30epochs

3) Optimizer: Mometum SGD (momentum=0.9)

4) Weight decay: 0.0001

5) Training epoch: 100

请注意:以上设定根据的是原始文档 ResNet Paper[3]。然而,在训练的过程中我们既没有用到颜色扩充,也没有用到范围扩充,在确认的时候我们也没有用到 10-crop 预测和全卷积预测。即便是在这样的情况下,ChainerMN 的准确率依然达到了71%-72%,居于首位。该结果看起来非常合乎情理,也是已知的当下的最好结果。

  • [3] “Deep Residual Learning for ImageRecognition”(https://arxiv.org/abs/1512.03385),Kaiming He et al., CVPR 2016.

本文由 AI100 编译,转载需得到本公众号同意。


编译:AI100

原文链接:http://chainer.org/general/2017/02/08/Performance-of-Distributed-Deep-Learning-Using-ChainerMN.html


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档