开发者 | 第四期MindSpore两日集训营记录

发布于:2023-01-01 ⋅ 阅读:(213) ⋅ 点赞:(0)

训练总结

非常有幸参加了MindSpore第四期两日集训营的学习,学习的第一大部分MindSpore0.7版本的特性介绍以及Lenet训练实践。正好通过做作业实践了一下:

作业:使用cpu完成lenet训练

上次第三期学习的时候,已经完成过一次了,本来以为很简单,没想到这次竟然又费了很多周折。

首先没有合适的系统资源。自己的本机是mac,一台云服务器是centos,上次完成作业的那台ubuntu,一段时间没有用,进去发现竟然conda环境没有了,好像全被删除了似的。(后来才发现是进错了服务器,所以后面又用这台ubuntu机器补上了cpu完成lenet的训练)

于是把目光转向了昇腾,准备在昇腾系统里跑一遍lenet。首先把lenet代码打包,上传,但是在notebook里竟然看不见。反复查看了好多遍,终于在一个隐藏目录里看见了lenet.zip这个文件。

/home/ma-user/mindspore_image_classification/.ipynb_checkpoints

现在是能看见这个文件,在终端里也解压开了,问题是notebook上看不见啊

从notebook上使用命令可以对那些文件进行操作,但是看不见,不直观。

看到modelarts的说明,说除了notebook的操作,其它操作都是默认不会同步到obs的,我理解这就是看不见的原因。另外看到可以直接从本地上传文件到notebook的obs里。

将示例代码留档:

上传单个文件

from modelarts.session import Session

session = Session()
session.upload_data(bucket_path="/bucket-name/dir1/", path="/home/user/sdk/sdk.txt")

上传多个文件

from modelarts.session import Session

session = Session()
local_file_list = ["/home/user/sdk1.txt", "/opt/sdk2.txt", "/etc/sdk3.txt"]
session.upload_data(bucket_path="/bucket-name/dir1/", path=local_file_list)

比如我想把几个mnist文件上传上去,就要写:

from modelarts.session import Session

session = Session()
local_file_list = ["/Users/skywalk/Downloads/t10k-labels-idx1-ubyte.gz","/Users/skywalk/Downloads/t10k-images-idx3-ubyte.gz", "/Users/skywalk/Downloads/train-labels-idx1-ubyte.gz", "/Users/skywalk/Downloads/train-images-idx3-ubyte.gz"]
session.upload_data(bucket_path="./dataset/", path=local_file_list)

但是很遗憾,好像昇腾系统的modelarts notebook里有问题,modelarts SDK装又装不上,没法进行上面的操作。只好手工在notebook里上传,再想办法处理。

最终的操作方法是:先在notebook里上传上去,然后选择obs同步,然后就能在notebook里看见了。在notebook里使用系统命令进行解压缩,创建目录等操作。

!mkdir dataset
!mkdir dataset/train
!mkdir dataset/test
!gzip -d *.gz
!mv train-images-idx3-ubyte dataset/train/
!mv train-labels-idx1-ubyte dataset/train/
!mv t10* dataset/test/

#解压lenet源代码,该代码可以在MindSpore-model_zoo里找到

!unzip lenet.zip

执行训练:

!python lenet/train.py --device_target=Ascend --data_path=dataset

执行测试:

!python lenet/eval.py --device_target=Ascend --data_path=dataset --ckpt_path=checkpoint_lenet_2-5_1875.ckpt

#这里的checkpoint_lenet_2-5_1875.ckpt就是前面训练的参数存盘文件

测试结果:

[WARNING] PIPELINE(1555,python):2020-09-12-09:31:03.624.351 [mindspore/ccsrc/utils/utils.h:290] ChangeFileMode] Change file `./ms_output_0eval.pb` to mode 700 fail.

[EVENT] TDT(1555,python):2020-09-12-09:31:03.629.609 [tdt/host/../common/src/log.cpp:149]"HostSendPool: {blockSize: 3072K, totalNum: 4, freeNum: 4}" "HostRecvPool: {blockSize: 3072K, totalNum: 1, freeNum: 1}" "DeviceRecvPool: " "HostCtrlPool: {SendPool: 4, FreePool: 4}, {RecvPool: 1, FreePool: 1}",[tdt/host/../common/src/memory_pool.cpp:688:GetHostPoolStatus]1566

============== {'Accuracy': 0.9834735576923077} ==============

[EVENT] TDT(1555,python):2020-09-12-09:31:04.629.748 [tdt/host/../common/src/log.cpp:149]"HostSendPool: {blockSize: 3072K, totalNum: 4, freeNum: 4}" "HostRecvPool: {blockSize: 3072K, totalNum: 1, freeNum: 1}" "DeviceRecvPool: " "HostCtrlPool: {SendPool: 4, FreePool: 4}, {RecvPool: 1, FreePool: 1}",[tdt/host/../common/src/memory_pool.cpp:688:GetHostPoolStatus]1566

不知道为什么那么多的报错信息。但是至少训练成功了!

训练有感

这是第二次用昇腾系统进行训练,第一次是用modelarts系统提供的那个花分类的程序,当时直接调用demo文件就行,而这次是从头到位,比如上传文件,解压文件,生成数据集目录等,都是自己动手做的,所以还是相当有自豪感的。昇腾系统必须用obs桶,如果想省略操作桶的步骤,那就要像上面那样在notebook里进行操作。关键是这不单单是notebook操作的问题,而是刚开始上传进去,notebook里是看不见的,要obs同步一下才能看见。

不知道为什么,在昇腾系统里不能用moxing和modelarts,导致用起来不顺手。(后来测试了一下,moxing是可以用的,系统自带,而modelarts SDK就没有自带,而且我也没有装成功)

后来又在cpu模式下测试了一遍,对,就是前面以为conda都弄丢了的那台ubuntu,不过用CPU训练的速度比昇腾系统慢多了。

基于概率数据增强MindSpore策略

概率算子,随机选择其中一批执行。这个思路挺不错的。比如举个例子:

RandomSelectSubpolicy(policy) 用户可以预置策略(Policy),每次随机选择一个子策略(SubPolicy)组合,同一子策略中由若干个顺序执行的图像增强操作组成,每个操作与两个参数关联:1) 执行操作的概率 2)执行操作的幅度;对于一个batch中的每张图像,随机选择子策略来变换图像。

policy = [
[(c_vision.RandomRotation((45, 45)), 0.5), (c_vision.RandomVerticalFlip(), 1.0), (c_vision.RandomColorAdjust(), 0.8)],
[(c_vision.RandomRotation((90, 90)), 1), (c_vision.RandomColorAdjust(), 0.2)]
]

ds = ds.map(operations=c_vision.RandomSelectSubpolicy(policy), input_columns=["image"])

示例中包括2条子策略,其中子策略1中包含RandomRotation、RandomVerticalFlip、RandomColorAdjust3个操作,概率分别为0.5、1.0、0.8;子策略2中包含RandomRotation和RandomColorAdjust,概率分别为1.0、2.0。

总之感觉是很好的东西。

这回的集训营,培训内容要比上次丰富一些,而作业比上回少一半,我想可能也是想让大多数同学能够结业的缘故吧。


MindSpore官方资料

GitHub:https://github.com/mindspore-ai/mindspore

Gitee:https://gitee.com/mindspore/mindspore

官方QQ群: 871543426