MindSpore两日训练营第六期总结

网友投稿 675 2022-05-29

MindSpore两日训练营第六期内容

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

MindSpore AI科学计算

MOE异构并行

MindSpore两日训练营第六期总结

MindSpore Boost

可视化集群调优

MindSpore控制流

MindSpore Lite 1.5

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

课程回放可以在MindSpore官方B站找到

地址:https://space.bilibili.com/526894060

课程作业环境

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

整体环境如下截图:

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

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文件和图文件

物理驱动的代码地址: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],

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

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)

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文件的报错。

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

MindSpore 机器学习

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【AI前沿动态】BERT王者归来!Facebook推出RoBERTa新模型,碾压XLNet 制霸三大排行榜
下一篇:FastAPI备忘录
相关文章