没有最快,只有更快!富士通74.7秒在ImageNet上训练完ResNet-50
https://www.toutiao.com/a6675198538592289288/
大数据文摘出品
编译:林安安、蒋宝尚
74.7秒!
根据日本富士通实验室最新研究。他们应用了一种优化方法,在ABCI 集群上,实现了74.7秒的训练时间。训练吞吐量为173万图像/秒,top-1验证准确率为75.08%。
当然,如此快的速度也依赖于巨量的算力——使用了2,048个GPU。
目前此论文已经放在了arxiv上面供大家免费下载。
论文下载地址:
https://arxiv.org/abs/1903.12650
论文中提到,深度学习在过去的两年内迅速发展,发展速度加快了三十倍,人们对于能够高效执行机器学习的算法的需求越来越大。使用大规模mini batch的分布式深度学习是解决这个需求的关键技术,但很难准确地在大型集群上实现很高的可扩展性。
在大型数据集上训练的深度神经网络(DNN)模型在各领域(如物体检测,语言翻译等)都取得了令人瞩目的成果。然而,随着DNN模型和数据集的增多,DNN训练的计算成本也增加了。
众所周知,具有数据并行性的分布式深度学习能快速进行群集训练。此方法中,在群集上进行的所有进程都具有相同的DNN模型和权重。每个进程使用不同的mini batch训练模型,但是所有进程的权重梯度通过组合来更新。
这种通信开销(communication overhead)成为大型集群的重要问题。为了减少大型集群的开销,研究团队增加了DNN的mini batch并且同时进行DNN训练。然而,使用大型mini-batch训练通常会导致DNN模型的验证准确性更差。因此,他们使用几种方法来增加mini-batch的大小,这代表在迭代中计算的输入图像的数量,而且不会影响验证准确性。
关于使用的计算资源,他们在ABCI 集群和优化的MXNet深度学习框架上使用2,048个GPU。在ImageNet上使用81,920 mini-batch,74.7秒内就训练好 ResNet-50,达到了75.08%验证准确度。
具体方法
根据论文介绍,具体的研究方法分为3个部分,准确率提升、框架优化以及通信优化(Communication Optimizations)
关于准确率提升,其使用了通常用于深度学习优化的随机梯度下降(SGD)。当使用 large mini-batch 训练时,SGD 更新数量会随着小批量的增加而减少。所以,提高 large mini-batch 上最终验证准确率是一个很大的挑战,他们采用了学习速率控制:由于更新次数少,需要使用较高的学习速度来加速训练。然而,高的学习率使模型的训练在早期阶段变得不稳定。因此,我们通过使用热身(warmup)来稳定SGD,从而逐渐提高学习率。此外,对于某些层次来说,所有层的学习速度都太高,使用分层自适应率来稳定训练。
ImageNet 上 ResNet-50 的训练时间和 top-1 验证准确率。
关于框架。其使用了MXNet,这是一个用C ++和CUDA C语言编写的开源深度学习框架。MXNet具有灵活性和可扩展性,可以在集群上高效地训练模型。然而,在中小型集群环境中只占总时间的一小部分的处理可能成为大规模集群环境中的瓶颈。他们分析了CPU和GPU的性能,并找出了瓶颈。 优化了瓶颈,提高训练吞吐量如下。采用的方法包括:并行DNN模型初始化( Parallel DNN model initialization)、在GPU上的批量规范计算(Batched norm computations on the GPU)
分布式并行深度学习需要所有减少通信以在所有进程之间交换每层的梯度,由于每个GPU的batch规模小,因此通信时间变长,而计算时间变短,所以减少通信开销在大型集群环境中是不可忽略的。 为了克服这些问题,他们采用的方法包括:调节通信的数据大小(Adjusting data size of communication),即研究人员收集了各层的梯度,然后将 allreduce 的数据大小调整为几兆字节;最佳的通信调度(Optimal scheduling of communications)即预先以统计的方式将所有层分为好几组。一旦每个进程完成一组中所有层的反向处理,就计划开始 allreduce 操作。
最后,训练准确度以及验证准确度结果如下
没有最快,只有更快!富士通74.7秒在ImageNet上训练完ResNet-50相关推荐
- 读的, 且经过美化, 能在所有 JavaScript 环境中运行, 并且应该和对应手写的 JavaScript 一样快或者更快.
目录 试一试 CoffeeScript 代码和注释 CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的 ...
- 透澈心灵的清泉——中台赋能让快鱼更快
摘要:在2018云栖大会上海峰会中,快鱼服饰有限公司信息中心总经理沈胜军为现场的听众带来了<中台赋能业务-让快鱼更快>的精彩分享.在本次分享中,他重点介绍了企业互联网架构,系统架构的整体解 ...
- 矩阵乘法为什么快怎么更快
为什么快 已知矩阵乘法较正常乘法而言,在步骤上并没有碾压性的先天优势 在起初,它的创造目的是给线性方程式提供简写形式 但矩阵乘法自带局部缓存的性质, 与正常乘法的跳跃计算而言, 显然更胜一筹 换言之, ...
- 居然还有比快排更快的排序
前言 快速排序(Quick Sort)是目前应用最广泛的排序算法,因其时间复杂度低和内循环较小,而且不需要太多的额外空间,广泛应用于工业界.比如JDK源码中的排序算法就是使用的快速排序. ...
- 比快排更快的排序 ——桶排序
桶排序利用了"空间换时间的思想"和标记的技巧 原题 1.https://www.luogu.org/problemnew/show/P1059 2.https://www.luog ...
- ShuffleNetV2-Yolov5 更轻更快易于部署的yolov5
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 毕设的一部分,前段时间,在yolov5上进行一系列的消融实验,让他更轻(Flops更小,内存占用更低, ...
- YOLOv5-Lite:更轻更快易于部署的YOLOv5
QQ交流群:993965802 本文版权属于GiantPandaCV,未经允许请勿转载 前言: 毕设的一部分,前段时间,在yolov5上进行一系列的消融实验,让他更轻(Flops更小,内存占用更低,参 ...
- 哪个更快:堆栈分配或堆分配
这个问题听起来很基础,但这是我与另一位与我合作的开发人员进行的辩论. 我一直在小心翼翼地在可能的地方分配东西,而不是堆分配东西. 他在和我说话,看着我的肩膀,并评论说这是不必要的,因为它们是相同的表现 ...
- php ajax加载,php – 什么更快? Ajax加载JSON或Ajax加载完整输出
有很多变数. #1可能更快,只要您的 JavaScript不是零件组装结果,并假定数据显着小于等效标记.如果您的结果是零碎的,或者数据不是比标记小得多,可能会更慢.它还取决于用户网络连接的速度与CPU ...
最新文章
- go语言笔记——go是有虚拟机runtime的,不然谁来做GC呢,总不会让用户自己来new和delete进行内存管理吧,还有反射!Go 的 runtime 嵌入到了每一个可执行文件当中...
- 复制本张表数据并插入本张表中
- 学习笔记(21):Python网络编程并发编程-队列的使用
- what??|诞生才一年的BCH竟面临硬分叉的抉择
- 10个有关String的面试问题
- 微信发布新版本SDK 开发者需尽快升级
- VMware vSAN 7.0 发行说明
- VXLAN配置实例(三)——VXLAN集中式双活网关
- cs服务器搭建(cobaltstrike)
- unity怎么显示骨骼_Unity3D 骨骼动画原理学习笔记
- Android 猜歌曲游戏开发
- android 多个sdcard路径,Android中访问sdcard路径的几种方式
- Restricted cubic splines
- Kali安装VirtualBox增强功能
- Linux ❉ Chronyd时间同步服务器详解
- 使用roolup构建你的lib
- 山东大学 计算机人工智能2019级 认知科学与类脑计算 期末考试
- 重装win7系统并激活
- 前端get,post、pul、deletec请求方式相关传参总结
- linux命令——查找文件大小大于1M的文件
热门文章
- 二条件if else语句可以用离散二分布概率函数实现
- js RegExp用法
- 表格(增加行号) http://www.blogjava.net/zeyuphoenix/archive/2010/04/19/318788.html
- SUN 论坛http://forums.sun.com/forum.jspa?forumID=840
- 作为程序员,你是否曾经想过写一本书?
- 随机器学习兴起的Julia编程语言
- 如何看待机器视觉的“对抗样本”问题,其原理是什么?
- 构建可以查找相似图像的图像搜索引擎的深度学习技术详解
- Transformer 架构逐层功能介绍和详细解释
- 近期活动盘点:​年末必学课程《社会网络分析》