云社区 博客 博客详情
云社区 博客 博客详情

走近深度学习,认识MoXing:初识华为云ModelArts的王牌利器 — MoXing

云上AI 发表于 2018-08-16 17:02:11 08-16 17:02
云上AI 发表于 2018-08-16 17:02:11 2018/08/16
0
1

【摘要】 本文为MoXing系列文章第一篇,主要介绍什么是MoXing,MoXing API的优势以及MoXing程序的基本结构。

MoXing的概念

MoXing是华为云深度学习服务提供的网络模型开发API。相对于TensorFlowMXNet等原生APIMoXing API让模型的代码编写更加简单,允许用户只需要关心数据输入(input_fn)和模型构建(model_fn)的代码,即可实现任意模型在多GPU和分布式下的高性能运行。

MoXing-TensorFlow支持原生TensorFlowKerasslimAPI,可以构建图像分类、物体检测、生成对抗、自然语言处理、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

通过对比可以看出,MoXingGPU=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收敛曲线,使用4GPU

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

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

⊙  红色线条为使用MoXingLARS特性实现的batch_size=32kResNet-50收敛曲线。


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

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.7DGC收敛精度:top-1 = 74.5, top-5 = 91.8。在吞吐量对比上,参见下面的图标可知,在1Gbps的带宽下,原生TF的加速比是0.4147DGC的加速比是0.8670,加速比超过原生TF的一倍。

image.png

正确率曲线图

image.png

梯度稀疏度变化曲线图

由图可知,深度梯度压缩的梯度稀疏度在前5epoch时是由75%逐渐上升到99.9%,所以在前5epoch时,分布式加速比并一定比普通的分布式训练高,但是从第5epoch之后,加速比则有显著提升,同时模型精度也没有下降。从第5epoch之后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,运行参数请参考代码本身。


MoXing系列文章下期预告:基于Tensorflow运行参数教程。

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 1
点赞
分享文章到微博
分享文章到朋友圈

评论 (0)


0/1000
评论

登录后可评论,请 登录注册

评论

您还没有评论的权限!

温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消