【MindSpore2日训练营第六期】1.5版本新特性之Boost

举报
Dasming 发表于 2021/11/15 23:30:50 2021/11/15
【摘要】         MindSpore1.5版本推出亲和算法库Boost1.0,目标是在不同的AI场景下,保持用户训练精度的同时,为用户提供高效的训练体验。本次课程对Boost性能提升原理做了讲解,并提供了两种相对易实现的模式。        Boost能够实现性能提升的原理主要有三方面构成:        1、梯度冻结:        训练过程中反响的时间占了大头,如果可以减少反向的次数,也可...

        MindSpore1.5版本推出亲和算法库Boost1.0,目标是在不同的AI场景下,保持用户训练精度的同时,为用户提供高效的训练体验。本次课程对Boost性能提升原理做了讲解,并提供了两种相对易实现的模式。

        Boost能够实现性能提升的原理主要有三方面构成:

        1、梯度冻结:

        训练过程中反响的时间占了大头,如果可以减少反向的次数,也可以提高训练的速度。Boost通过梯度冻结实现了性能提升,具体过程为:将训练数据自动分组,并依据冻结概率生成冻结策略,这样在反向训练时,通过周期性排布,减少block从不训练切换为选练的次数。

         2、 LessBN

        打开神经网络训练流程进行分析,以ResNet50为例,除卷积外,BatchNorm相关算子时间占比约为30%;通过合理的缩减不必要的BatchNorm,能够带来性能的提升。

       Boost的做法是:根据设计,自动去除部分结构的BN,增加LastFN,以及梯度中心化,能够加速训练15%

        3、自适应梯度融合

        

         Boost实现2种模式:

        简易模式:MindSpore Boost简易模式分为三种级别,分别为“O1”“O2”“O3”,只需要在model构建时,通过“boost_level”进行选择和设置即可。

        DEN3aP.png

        高阶模式,以LessBN为例,需要导入boost并调用LessBN()。

N2cYfp.png

        本次课程抛开原理的深层实现,相对平易、好实现,能够帮助普通开发者提升网络训练速度和良好的使用体验。

        本次作业有两题:

        1、modelzooresnetmobilenet-v2上,跑通boost简易模式调用

        2、在modelzooresnetmobilenet-v2上,跑通boost高阶模式lessbn算法调用

        个人的解题思路为:

        第一步:下载代码,GPU上正常执行训练,可以跑通。

        >>> bash run_standalone_train_gpu.sh /path/to/cifar-10-batches-bin /path/to/resnet50_cifar10_config.yaml

       第二步:简易模式调用boost模式

/resnet/config/resnet50_cifar10_config.yaml: Line53


boost_mode: "O0"

boost_mode: "O1"

        再次启动训练:结果报错

        RuntimeError: mindspore/ccsrc/runtime/device/gpu/kernel_info_setter.cc:83 SupportedTypeList] Unsupported op [Centralization] on GPU

        In file /home/dasblue/anaconda3/envs/msgpu/lib/python3.7/site-packages/mindspore/boost/less_batch_normalization.py(81)

        x = self.multiplier * x

           ^

       看起来像是算子的问题,然后issue,链接:https://gitee.com/mindspore/mindspore/issues/I4HXJI

        得到开发人员的答复是:当前boost模式仅支持在Ascend上运行,GPU下缺少该模式所需的部分算子。

       第三步:高阶模式调用

    

/resnet/train.py: Line238


net = resnet(class_num=config.class_num)



net = resnet(class_num=config.class_num)

#--------------high-level boost mode-------------

import mindspore.boost as boost

net = boost.LessBN(net)

#--------------------------------------------------------

        按表修改代码后,是可以跑通的。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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