MindSpore两日训练营第六期总结

举报
JeffDing 发表于 2021/11/10 19:00:37 2021/11/10
【摘要】 MindSpore两日训练营第六期内容MindSpore第六期主要有以下内容组成MindSpore AI科学计算MOE异构并行MindSpore Boost可视化集群调优MindSpore控制流MindSpore Lite 1.5六个内容都是围绕MindSpore最新的1.5版本的新特性进行介绍,也是通过课程了解新功能的一个不错的方法。在每个课程的最后都有两个作业,一个简单的和一个稍难一点...

MindSpore两日训练营第六期内容

MindSpore第六期主要有以下内容组成

  1. MindSpore AI科学计算
  2. MOE异构并行
  3. MindSpore Boost
  4. 可视化集群调优
  5. MindSpore控制流
  6. MindSpore Lite 1.5

六个内容都是围绕MindSpore最新的1.5版本的新特性进行介绍,也是通过课程了解新功能的一个不错的方法。在每个课程的最后都有两个作业,一个简单的和一个稍难一点的。

课程回放可以在MindSpore官方B站找到
地址:https://space.bilibili.com/526894060

课程作业环境

采用华为云ECS,新加坡区的GPU加速服务器进行实验。因为课程内容需要涉及到GPU,MindSpore目前还不支持windows平台的GPU,所以就只能使用ECS来完成实验体验了。另外考虑到有时候会使用GITHUB下载软件包,所以就想到了采用香港区或者新加坡区的ECS,这样下载GITHUB的时候速度就不是问题了。
整体环境如下截图:
1636539769(1).png

实验过程中遇到的一些问题

  1. MindSpore AI科学计算
    安装的话参考文档中的安装指南基本都能正常安装。

MindScience文档地址:https://www.mindspore.cn/mindscience/docs/zh-CN/r0.1/index.html

MindScience(MindElec and MindSPONGE) 的安装文件可以在https://mindspore.cn/versions 这个页面中部的位置找到whl包的下载地址

数据驱动代码:https://gitee.com/mindspore/mindscience/tree/master/MindElec/examples/data_driven/parameterization

数据驱动只要执行运行命令的时候加上两个参数:

python train.py --device_target GPU --device_num 0

然后就会开启训练,难度还是不难的,训练完成后会生产ckpt文件和图文件
image.png

12_0.00264609.jpg

物理驱动的代码地址:https://gitee.com/mindspore/mindscience/tree/master/MindElec/examples/physics_driven/time_domain_maxwell

在GPU上可能会遇到一些问题,提示算子不支持之类的,需要将config.yaml文件中 coord_min和coord_max从原来的整数修改成浮点数。然后再去执行train.py应该就没什么问题了。

   "coord_min" : [0.0, 0.0],
   "coord_max" : [1.0, 1.0],

第一课的两个作业总体来说不是很难,按照文档基本都能完成。

  1. MindSpore 控制流

课程作业是使用while和递归函数实现0-1000的累加,这个的话,参考文档:https://www.mindspore.cn/docs/programming_guide/zh-CN/r1.5/control_flow.html
把代码逻辑加入到mindespore控制流的代码框架即可

参考代码(不一定对):
0-1000累加迭代:

import numpy as np
from mindspore import context
from mindspore import Tensor, nn
from mindspore import dtype as ms

class IfInForNet(nn.Cell):
    def construct(self, x):
        if x == 1:
            return x
        else:
            return x + construct(x-1)

forward_net = IfInForNet()
x = Tensor(np.array(1000), dtype=ms.int32)
output = forward_net(x)
print("result:",output)

0-1000累加(while循环实现):

import numpy as np
from mindspore import context
from mindspore import Tensor, nn
from mindspore import dtype as ms

class IfInWhileNet(nn.Cell):
    def construct(self, x,y,out):
        while x!=1000:
            x = x + y
            out = out +x
        return out

forward_net = IfInWhileNet()
x = Tensor(np.array(0), dtype=ms.int32)
y = Tensor(np.array(1),dtype=ms.int32)
out = Tensor(np.array(0),dtype=ms.int32)
output = forward_net(x,y,out)
print("result:",output)

  1. MindSpore Lite

MindSpore Lite目前我只做了第二个作业,基本上也是跟着课程PPT就能完成操作了
准备工作
下载模型。在mindspore 的model_zoo中下载MobileNetV2.mindir模型。地址如下: https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/1.5/mobilenetv2.mindir

下载CPU的Ubuntu-x64版本包,用来模型转换。下载地址如下: https://www.mindspore.cn/lite/docs/zh-CN/r1.5/use/downloads.html
作业
使用Ubuntu-x64版本包内的转换工具,使用固定比特量化以及混合比特量化的配置文件,分析不同量化参数下对模型大小的影响:
https://www.mindspore.cn/lite/docs/zh-CN/r1.5/use/post_training_quantization.html
固定比特权重量化:

./converter_lite --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2 --fmk=MINDIR --configFile=/mindspore/lite/tools/converter/quantizer/config/fixed_bit_weight_quant.cfg

混合比特权重量化:

./converter_lite --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2 --fmk=MINDIR --configFile=/mindspore/lite/tools/converter/quantizer/config/mixed_bit_weight_quant.cfg

将转换后的模型使用Ubuntu-x64版本包内的benchmark工具进行推理
https://www.mindspore.cn/lite/docs/zh-CN/r1.5/use/benchmark_tool.html

整个作业有两个提示:可以把下载下来的tools中converter_lite执行文件和benchmark的w执行文件路径添加到PATH环境变量中这样就可以直接执行converter_lite 或者benchmark。
另外就是需要把converter的lib目录添加到LD_LIBRARY_PATH环境变量中,不然可能存在找不到so文件的报错。

  1. MindSpore并行使能大模型训练

MOE这一块的话可能稍微肥一点时间,主要还是编译MindSpore比较耗时,这里如果使用新加坡或者香港的服务器的话可能会稍微轻松一点。
国内的服务器的话可能需要把文件一个一个wget下来然后拷贝到对应的目录,然后再不断重启训练。还有一个办法就是查找hosts然后进行修改加速github的访问。

总体流程
利用命令编译:./build.sh -t on;通过pytest运行测试用例test_parallel_moe.py::test_transformer_model (路径:mindspore/tests/ut/python/parallel/test_parallel_moe.py);

提示需要把 mindspore/tests/ut/python配置到环境变量PYTHONPATH里

需要生成图ir文件,需要在test_parallel_moe.py代码中添加

from mindspore import context
context.set_context(save_graphs=True)

然后执行成功后会有一个rank_0的文件夹,在这里面就有需要的ir文件(xx_validate_.ir )

5.MindSpore Boost
Boost的作业可能resnet50cifar10对于GPU算子还有不支持的情况所以可能会遇到报错。
修改思路:

model = Model(net,loss_fn=loss_fn,optimizer=opt,loss_scale_manager=loss_scale,amp_level="O3" ,boost_level="O1")

在Model中添加boost_level="",制定boost_level级别。可以是O1,O2

6.MindInsight可视化集群调优
操作步骤:
步骤:

conda create -n myenv python=3.7
conda activate myenv
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.5.0/MindInsight/any/mindinsight-1.5.0-py3-none-any.whl
mkdir homework
mv /path/to/211105prof.tar.gz homework/
cd homework
tar -zxvf 211105prof.tar.gz
mindinsight start

在浏览器中打开 http://127.0.0.1:8080,这里可能需要使用linux的浏览器打开。如果是使用ECS的话,建议安装一个浏览器在远程服务器里,然后使用对应的例如firefox之类的命令远程启动浏览器。

还有一个办法就是修改mindinsight/conf/constants.py文件中

HOST = '127.0.0.1'

这一行的IP地址修改为0.0.0.0,然后就可以使用本地计算机的windows浏览器进行访问了。

总结

通过两天六个课程的学习,对于MindSpore的新特性有了理论上的了解,随后通过课程结束的两个作业对于新特性的实际操作也进行了一个了解。实现了通过实践操作了解特性。课程作业的难度其实有简单,但是基本上每个作业的第一题都可以参考对应的文档就可以很顺利的完成了。至于难一点的那题稍微思考一下其实应该也没什么大问题。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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