网站首页 > 技术文章 正文
【新智元导读】加速DNN模型训练速度方法中,数据并行受到单个加速器可支持模型大小的限制;而模型并行因为DNN顺序性导致大量算力浪费。目前Google推出GPipe,将两种方法的优势进行结合,解决了两者的劣势,成功提升训练速度。
深度神经网络(DNN)已经推动了许多机器学习任务,比如语音识别,视觉识别和语言处理。
BigGan、Bert和GPT2.0的最新进展表明,越大的DNN模型,越能带来更好的性能。
而视觉识别任务的过去进展也表明,模型大小和分类准确性之间,存在很强的相关性。
例如2014年ImageNet视觉识别挑战赛中,获胜者GoogleNet使用400万参数,精确度达到了74.8%。
而2017年ImageNet挑战赛的获胜者Squeeze-and-Excitation Networks,使用1.5亿参数,精确度达到了82.7%。
仅仅3年,数据处理能力翻了36番。而在同一时期,GPU内存仅增加了约3倍。
当前最先进的图像模型,已经达到了云TPUv2内存的可用上限。因此,迫切需要一种更高效、可扩展的基础设施,以实现大规模深度学习,并克服当前加速器的内存限制。
ImageNet精度和模型大小之间的强相关性
基于以上目的,Google推出了GPipe。
GPipe是什么,效果如何?
GPipe是一个分布式机器学习、可扩展的管道并行库,可以学习巨型深度神经网络。
使用同步随机梯度下降和管道并行性进行训练,适用于由多个连续层组成的任何DNN。
GPipe允许研究人员轻松部署更多加速器来训练更大的模型,并在不调整超参数的情况下,达到提升性能的效果。
GPipe将跨加速器和管道执行的网络层进行分区,以便实现对硬件更高的利用率,同时利用重新计算来将激活的内存使用降至最低。
例如,使用8个加速器的分区,GPipe就可以训练25倍大神经网络。
而GPipe也几乎实现了线性加速。使用4倍数量的加速器,处理同一个模型的速度提升了3.5倍;16倍加速器速度提升11倍。
同时它也要保证计算的梯度和分区的数量保持一致,从而在不对模型的参数做任何改动的前提下,都能保持线性加速。
目前,核心GPipe库已在Lingvo框架下开源。
为什么要对跨加速器的模型进行分区?
有两种标准方法可以加速DNN模型:
- 数据并行方法,使用更多的机器并将输入数据分开
- 模型并行性。将模型移动到如GPU或TPU等具有加速模型训练的特殊硬件
然而加速器的内存、与主机的通信带宽均有限。因此模型并行性就需要将模型进行分割,将不同的分区分配给不通过的加速器。
可是由于由于DNN的顺序性,这种朴素的策略可能导致在计算期间,只有一个加速器处于激活状态,导致大量算力的浪费。
而标准数据并行方法是允许在多个加速器上,同时训练不同输入数据的相同模型,但每个加速器可支持模型大小又有限制。
GPipe的做法是将模型分割,并划分给不同的加速器,自动将小Batch拆分为更小的微Batch,这样就实现了跨多个加速器的高效训练。
此外,因为梯度一直在微批次中累积,所以分区数量不会影响模型质量。
Time部分:由于网络的连续性,幼稚模型并行策略导致严重的未充分利用。 一次只有一个加速器处于活动状态。
Bubble部分:GPipe将输入小批量分成较小的微批次,使不同的加速器可以同时在单独的微批次上工作。
使用GPipe和不使用,之间的差异有多大?
一个TPUv2有8个加速器核心和64GB内存(每个加速器8GB),由于内存限制,单个加速器可以训练的参数量上限是8200万。
借助反向传播和批量分割中的重新计算,GPipe将中间激活内存从6.26GB减少到3.46GB,将单个加速器参数处理上限提升至3.18亿个。
我们还看到,通过管道并行性,最大模型大小与分区数成正比,如预期的那样。
通过GPipe,AmoebaNet能够在云TPUv2的8个加速器上加入18亿个参数,比没有GPipe的情况下多25倍。
Google测量了GPipe对AmoebaNet-D模型吞吐量的影响。效率和加速器的数量几乎是呈线性加速,8个加速器+8个分区,比2个加速器+2个分区快2.5倍。
TPUv3效果更好。在1024个令牌句子上启用了80亿个参数Transformer语言模型,16个加速器将速度提升了11倍
使用GPipe加速AmoebaNet-D,这种模型不适合一个加速器。基线naive-2是将模型拆分为两个分区时本机分区方法的性能。Pipeline-k指的是GPipe的性能,它将模型分成带有k个加速器的k个分区。
GPipe还可以通过使用更多加速器来扩展训练,而无需更改超参数。因此,它可以与数据并行性相结合,以互补的方式使用更多的加速器来扩展神经网络训练。
GPipe精确度能达到多少?
前面我们提到,处理的数据量越大,获得的精度就越高。
Google在ImageNet ILSVRC-2012数据集上,使用Cloud TPUv2训练了一个有5.57亿参数、480 x 480输入图像尺寸的AmoebaNet-B模型。
该网络被分成4个分区,这个巨型模型在多个流行数据集上表现良好,在没有任何外部数据的情况下,精度达到了最先进的84.3% top-1,以及97% top-5的single-crop验证准确度。
大型神经网络不仅适用于ImageNet等数据集,还通过迁移学习,与其他数据集息息相关。
目前我们已知ImageNet模型越好,迁移就越好。Google在CIFAR10和CIFAR100数据集上进行了迁移学习实验,将最佳公布的CIFAR-10精度提高到99%,将CIFAR-100精度提高到91.3%。
哪里能获取到GPipe?
https://github.com/tensorflow/lingvo/blob/master/lingvo/core/gpipe.py
参考链接:
https://ai.googleblog.com/2019/03/introducing-gpipe-open-source-library.html
猜你喜欢
- 2024-10-15 你认为CNN的归纳偏差,Transformer它没有吗?
- 2024-10-15 Genetic CNN: 经典NAS算法,遗传算法的标准套用 | ICCV 2017
- 2024-10-15 CB Loss:基于有效样本的类别不平衡损失
- 2024-10-15 资源|注意迁移的PyTorch实现 pytorch accuracy
- 2024-10-15 NVIDIA Jetson Nano 2GB 系列文章(49):智能避撞之现场演示
- 2024-10-15 针对不平衡问题建模的有趣Loss 不平衡指派问题matlab
- 2024-10-15 目标检测RCNN系列总结 目标检测nms
- 2024-10-15 谷歌开源GPipe:单个加速器处理参数3.18亿,速度提升25倍
- 2024-10-15 TensorFlow 模型优化工具包:模型大小减半,精度几乎不变
- 2024-10-15 资源受限场景下的深度学习图像分类:MSDNet多尺度密集网络
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)