MoXing 是华为深度学习服务提供的网络模型开发 API。支持以原生 TensorFlow、Keras、slim 等 API,帮助构建图像分类、物体检测、生成对抗、自然语言处理,OCR 等多种模型。相比使用 TensorFlow 和 MXNet 原生 API,使用 MoXing API 开发深度学习算法模型编程更加简单,而且能够自动获得高性能的分布式执行能力。
华为云深度学习——高性能
华为云深度学习的高效性是通过混合并行、梯度压缩、卷积加速、EASGD 等技术加快模型训练速度;内置模型压缩能力,可极大降低模型大小成本。以下是基于华为云深度学习服务的实验数据。
由上图对比可知,MoXing 在 GPU=1 时,吞吐量和加速比优势不明显,在 GPU=4 时,吞吐量和加速比全面超越 tensorflow,GPU=8 时,吞吐量相对于别的 API 有质的飞跃。搭配使用 OBS 和华为云深度学习服务,性能具有压倒性的优势。
1、以 MoXing 实现 LARS 训练 ResNet-50 为例
LARS 允许以超大的 batch_size 训练神经网络,其优势在于能够在增大 batch_size 的情况下不影响收敛精度。增加 batch_size 就意味着能够使用更多的分布式节点对网络进行训练,从而降低训练总时长(普通的方法在使用大规模节点时,会遇到大 batch_size 导致无法收敛的问题,所以无法使用传统的方法进行训练)
LARS 的核心代码如下:
定义一个基于 LARS 的 optimizer
全部代码在(注意:基于 TensorFlow-1.4):
运行参数:
使用 MoXing 中的 LARS Optimizer 可以实现 batch_size=32k 分布式训练 ResNet-50。
损失值曲线:
正确率曲线:
绿色线条为单机版 ResNet-50 收敛曲线,使用 4 个 GPU
灰色线条为在绿色线条同等下,使用 FP-16 时的收敛曲线,精度几乎没有影响
橙色线条为使用 MoXing 分布式训练一个 ResNet-50 模型的收敛曲线
红色线条为使用 MoXing 中 LARS 特性实现的 batch_size=32k 的 ResNet-50 收敛曲线
2、MoXing 实现 DGC 训练 ResNet-50
Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training
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 的一倍。
正确率曲线:
梯度稀疏度变化曲线:
由图可知,深度梯度压缩的梯度稀疏度在前 5 个 epoch 时是由 75%逐渐上升到 99.9%,所以在前 5 个 epoch 时,分布式加速比一定比普通的分布式训练高,但是从第 5 个 epoch 之后,加速比则有显著提升,同时模型精度也没有下降。
从第 5 个 epoch 之后 DGC 在分布式运行中的加速比表现:
DGC 的基本使用方法是,在代码中 import moxing.tensorflow as mox,然后运行脚本时加入 dgc 的相关参数:
代码(基于 TensorFlow-1.4):
运行参数:
MoXing 程序基本结构
MoXing 框架简单易用,直接将代码放在华为云深度学习服务(DLS)上,就可以运行,单机分布式一套代码,数据读取都是优化过的,无需用户再改动。
代码有很多情况,均基于 TensorFlow-1.4,运行参数请参考代码本身。
本文转载自 华为云产品与解决方案 公众号。
原文链接:https://mp.weixin.qq.com/s/Ocw0zVoPrSCcYMcdiZqo3w
评论