华为云ModelArts的王牌利器 — MoXing

举报
四度空间2006 发表于 2020/05/24 12:18:19 2020/05/24
【摘要】 MoXing的概念 MoXing是华为云深度学习服务提供的网络模型开发API。相对于TensorFlow和MXNet等原生API,MoXing API让模型的代码编写更加简单,允许用户只需要关心数据输入(input_fn)和模型构建(model_fn)的代码,即可实现任意模型在多GPU和分布式下的高性能运行。MoXing-TensorFlow支持原生TensorFlow、Kera...

MoXing的概念

       MoXing是华为云深度学习服务提供的网络模型开发API。相对于TensorFlow和MXNet等原生API,MoXing API让模型的代码编写更加简单,允许用户只需要关心数据输入(input_fn)和模型构建(model_fn)的代码,即可实现任意模型在多GPU和分布式下的高性能运行。MoXing-TensorFlow支持原生TensorFlow、Keras、slim等API,可以构建图像分类、物体检测、生成对抗、自然语言处理、OCR等多种模型。


为什么取名“MoXing”?

       首先,“MoXing”是“模型”一词的汉语拼音。因为深度学习时代,中国的科研和工程团队逐步成为行业的引领者,使用源于中文的名称,彰显了深度学习服务(DLS)研发团队的自信,DLS研发团队将努力把MoXing API打造为模型开发领域的业界标杆。同时,“MoXing”也寓意“Model Crossing”。“Crossing”一方面具有“道路交汇口”的含义;Model Crossing代表MoXing API汇集了来自四面八方的经典模型,为用户打通连接模型领域最新成果的道路。Crossing另一方面也具有“跨越式航行”的含义;Model Crossing代表MoXing API旨在实现模型的跨越式发展,为用户提供了显著优于原生API的性能,并且具有更强的易用性。

当然,脑洞大开的用户也可以把MoXing理解成“魔性”,就算名称噱头再多,也盖不了它的优秀。走近深度学习,认识MoXing,充分发掘它的潜力,MoXing API的魔性会为您的模型开发如虎添翼!


MoXing API的优势

       华为云深度学习服务融合了混合并行、梯度压缩、卷积加速、EASGD等技术,并且MoXing框架可将单机代码自动分布式化,进行大规模的分布式训练,极大的提高了模型训练速度和效率。

        以下是基于华为云深度学习服务的实验数据。


image.png    image.png


       通过对比可以看出,MoXing在GPU=1时,吞吐量和加速比优势并不明显;但在GPU=4时,吞吐量和加速比已全面超越tensorflow;在GPU=8时,吞吐量相对于其他API有质的飞跃。


下面通过2个例子来介绍MoXing的性能。

1、以MoXing实现LARS训练ResNet-50为例

LARS允许以超大的batch_size训练神经网络,其优势在于能够在增大batch_size的情况下不影响收敛精度,增加batch_size就意味着能够使用更多的分布式节点对网络进行训练,从而降低训练总时长(传统方法在使用大规模节点时,会遇到大batch_size导致无法收敛的问题,所以无法使用传统的方法进行训练)。

使用MoXing中的LARS Optimizer可以实现batch_size=32k分布式训练ResNet-50。


image.png

损失值曲线图


image.png

正确率曲线图


⊙  绿色线条为单机版ResNet-50收敛曲线,使用4个GPU。

⊙  灰色线条为在绿色线条同等下,使用FP-16时的收敛曲线,精度几乎没有影响。

⊙  橙色线条为使用MoXing分布式训练一个ResNet-50模型的收敛曲线。

⊙  红色线条为使用MoXing中LARS特性实现的batch_size=32k的ResNet-50收敛曲线。

LARS的核心代码,定义一个基于LARS的optimizer:

       image.png

完整代码(基于TensorFlow-1.4):http://code.huawei.com/inforsight-dl/tf-models/blob/v1.x.x-tf-1.4/moxing/moxing/tensorflow/practice/image_classification/train_model_32k.py

运行参数:https://github.com/huaweiyun7759/backup/tree/master/Using%20MoXing%20to%20train%20resnet-50%20with%20LARS


2、MoXing实现DGC训练ResNet-50

DGC能减少分布式训练的通信量,有效降低由于网络带宽造成的瓶颈,在不影响收敛精度的情况下增加分布式训练加速比。

对比传统resnet_v1_50的训练和应用DGC时的训练:传统收敛精度:top-1 = 74.4, top-5 = 91.7,DGC收敛精度:top-1 = 74.5, top-5 = 91.8。在吞吐量对比上,参见下面的图标可知,在1Gbps的带宽下,原生TF的加速比是0.4147,DGC的加速比是0.8670,加速比超过原生TF的一倍。


image.png

正确率曲线图

image.png

梯度稀疏度变化曲线图


由图可知,深度梯度压缩的梯度稀疏度在前5个epoch时是由75%逐渐上升到99.9%,所以在前5个epoch时,分布式加速比并一定比普通的分布式训练高,但是从第5个epoch之后,加速比则有显著提升,同时模型精度也没有下降。从第5个epoch之后DGC在分布式运行中的加速比表现:

image.png


DGC的基本使用方法:在代码中import moxing.tensorflow as mox,然后运行脚本时加入dgc的相关参数:

dgc_sparsity_strategy: 稀疏度策略

dgc_momentum_type: momentum策略

dgc_momentum: momentum数值

dgc_momentum_factor_masking: 是否应用factor masking

dgc_total_samples: 训练集样本数量

运行参数:https://github.com/huaweiyun7759/backup/tree/master/Using%20MoXing%20to%20train%20resnet-50%20with%20DGC

代码(基于TensorFlow-1.4):http://code.huawei.com/inforsight-dl/tf-models/blob/v1.x.x-tf-1.4/moxing/moxing/tensorflow/practice/image_classification/train_model.py


MoXing程序基本结构

Moxing框架简单易用,直接将代码放在华为云深度学习服务上就可以运行,单机分布式一套代码,数据读取都已优化,无需用户再改动。代码有很多情况,均基于TensorFlow-1.4,运行参数请参考代码本身。


原文链接:https://blog.csdn.net/devcloud/java/article/details/97642282


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。