手把手教你基于华为云,实现 MindSpore 模型训练
![手把手教你基于华为云,实现MindSpore模型训练](https://static001.geekbang.org/infoq/80/805197560f793be0b6b64c1b2ba21773.jpeg)
本文分享自华为云社区《【昇腾开发全流程】MindSpore华为云模型训练》,作者:沉迷 sk。
前言
学会如何安装配置华为云 ModelArts、开发板 Atlas 200I DK A2。并打通一个 Ascend910 训练到 Ascend310 推理的全流程思路。
训练阶段
A. 环境搭建
MindSpore 华为云 模型训练
Step1 创建 OBS 并行文件
登录华为云 -> 控制台 -> 左侧导航栏选择“对象存储服务 OBS” ->
在左侧导航栏选择“桶列表” -> 单击右上角“创建桶”
如下图所示:
![](https://static001.geekbang.org/infoq/9a/9a803df43f7f587976f9904079073ff1.png)
在左侧列表中的“并行文件系统” -> 单击右上角“创建并行文件系统”。
如下图所示:
![](https://static001.geekbang.org/infoq/7a/7a98cfcf06ccac841e130ad3dcad3435.png)
进行以下配置:
![](https://static001.geekbang.org/infoq/66/66e32cd576ea2c9dc570596b15094c33.png)
主要参数信息如下,其余配置请保持默认配置区域:选择“华北-北京四”文件系统名称:自定义,本例使用 modelarts0009(请使用 modelarts 作为文件系统前缀,注意名称为全局唯一)数据冗余存储策略:选择“单 AZ 存储”策略:选择“私有”
Step2 上传数据文件至 OBS 并行文件系统
点击已创建的并行文件系统 -> 点击“新建文件夹”
输入文件夹的名称,这里命名为 input
![](https://static001.geekbang.org/infoq/10/10733d849c3382db7dc9b6d4a4e30d17.png)
进入该文件夹中 -> 点击“上传文件”:
将准备好的项目工程文件压缩包上传至该 OBS 中。
Step3 基于 ModelArts 创建 Notebook 编程环境
在“全局配置”页面查看是否已经配置授权,允许 ModelArts 访问 OBS:
登录华为云 -> 控制台 -> 左侧导航栏选择“ModelArts” -> 在左侧导航栏选择“全局配置” -> 单击“添加授权”
首次使用 ModelArts:直接选择“新增委托”中的“普通用户”权限
![](https://static001.geekbang.org/infoq/5a/5a1fe3d6bb316cdd87ec0bb8b064c873.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
登录华为云 -> 控制台 -> 左侧导航栏选择“ModelArts” -> 在左侧导航栏选择“开发环境”-> “Notebook” -> 点击“创建”
进行以下配置:
主要参数信息如下,其余配置请保持默认配置名称:自定义,本例使用 notebook-test 自动停止:自行选择,本例选择 4 小时镜像:选择“公共镜像”,并选择“mindspore_1.10.0-cann_6.0.1-py_3.7-euler_2.8.3”资源类型:选择“公共资源池”磁盘规格:使用 50GB
Step4 为 Notebook 编程环境添加训练阶段项目工程文件
点击已创建的 Notebook -> “存储配置” -> “添加数据存储”
进行以下配置:
![](https://static001.geekbang.org/infoq/a4/a4ea1457ba074c07f1a33a25aba22f56.png)
本地挂载目录:自定义创建本地挂载目录,本例使用**/data/input**存储位置:选择所创建的并行文件系统(本例选择已创建的 moderarts0009),以及数据集所在的目录 input
返回 Notebook 界面 -> 点击“打开”notebook-test ->
打开“Terminal”命令行终端界面 ->
执行以下命令,创建用于测试的 test 文件
touch /data/input/test
再执行以下命令,可以看到你刚创建的 test 文件 &先前上传的文件
ls /data/input
上传
这里选择 OBS 文件上传,
因为这里本地上传限制为 100M 文件。
![](https://static001.geekbang.org/infoq/d0/d0528d14d5e514f9c5062399139d1e69.png)
解压
打开“Terminal”命令行终端界面 ->
执行以下命令,查看是否在正确的路径下
pwd
ls -l
执行以下命令,解压项目工程文件压缩包
(这里以工业质检 Unet 为例,具体代码可参考文末学习资源推荐)
unzip unet.zip
unzip unet_sdk.zip
训练阶段工程目录结构如下:
模型转换工程目录结构如下:
注:
接下来就可以开始旅程,进入训练阶段。
若中途暂停实验,记得做停止资源操作,消耗最少费用;若返回继续实验,再次启动 Notebook 编程环境;若完成了本实验,最后是释放资源操作,为了停止计费。
一. 配置文件参数和数据预处理
MindSpore 数据集预处理 preprocess_dataset.py 文件需调用如下脚本:
文件参数脚本为 src/config.py,包括 unet_medical,unet_nested,unet_nested_cell,unet_simple,unet_simple_coco 共 5 种配置,表示模型与数据集之间的组合。包含超参数、数据集路径等文件参数
Step 运行脚本
新建 NoteBook 中:查看是否在工程目录 unet/路径下
!pwd
进入 NoteBook 中:运行示例
!python3 preprocess_dataset.py --data_url=./data/
其中–data_url:数据集预处理后的保存路径。
预计数据集预处理所需时间约为 10 分钟。
预处理完的数据集会保存在/unet/data/文件夹下。
输出结果:
![](https://static001.geekbang.org/infoq/9d/9dea59ce7ee87b38335f56ae50e21e5d.png)
二. 模型训练
MindSpore 模型训练 需调用如下脚本:
Step 运行脚本
进入 NoteBook 中:运行示例
!python train.py --data_url=./data/ --run_eval=True
其中–data_url: 数据集输入路径。
其中–run_eval: True 表示训练过程中同时进行验证。
预计模型训练所需时间约为 36 分钟。
输出结果:
![](https://static001.geekbang.org/infoq/b3/b3468ece8d7d4cf97a6c580bd1cff810.png)
![](https://static001.geekbang.org/infoq/1e/1e118e44c694bf9420978eed834f390c.png)
三. 模型推理
MindSpore 模型推理 需调用如下脚本:
Step 运行脚本
进入 NoteBook 中:运行示例
!python eval.py --data_url=./data/ --ckpt_path=./ckpt_0/best.ckpt
其中–data_url:数据集输入路径。
其中–ckpt_path:ckpt 读取路径
预计模型推理所需时间约为 2 分钟。
输出结果:
![](https://static001.geekbang.org/infoq/15/15f2b2b675c3dc2383663b5a1849b00a.png)
![](https://static001.geekbang.org/infoq/40/407ed15c587780be783d9bfe338d5548.png)
注:
IOU(Intersection over Union)是一个度量函数,
用来描述两个物体边界框的重叠程度(取值范围为[0,1]),
重叠的区域越大,IOU 值就越大。
四. 结果可视化
可以通过画图的方式将图像的结果可视化,方便查看。
可视化方法有两种。
方法一 单张图片可视化
draw_result_single.py:单张图片可视化,
输出单张图片的裁剪画图结果 crop_plot.png 和模型预测的结果 predict_plot.png。
Step 运行脚本
查看工程目录 unet/路径下
确保已经事先创建好
可视化图片保存文件 pred_visualization 文件夹
进入 NoteBook 中:运行示例
!python draw_result_single.py --data_url=./data/SW1hZ2VfMjAyMTA3MjcxNTEzMzYzNzk --save_url=./pred_visualization --ckpt_path=./ckpt_0/best.ckpt
其中–data_url:数据集输入路径(到单张图像)。
其中–save_url:输出图像保存路径。
其中–ckpt_path:ckpt 读取路径。
单张图片可视化所需时间约为 1 分钟。
可视化完的图片会保存在/unet/pred_visualization 文件夹下。
输出结果:
![](https://static001.geekbang.org/infoq/6f/6f07a2e4e1f2d8bffab37dea8a44599a.png)
![](https://static001.geekbang.org/infoq/39/397ff17395480dd4fd12221a557c2764.png)
![](https://static001.geekbang.org/infoq/26/26522d2582d00cfeb70b0546814dae06.png)
方法二 文件夹图片可视化
draw_result_folder.py:文件夹图片可视化,
输出文件夹内图片的模型预测结果 predict.png。
Step 运行脚本
查看工程目录 unet/路径下
确保已经事先创建好
可视化图片保存文件 pred_visualization 文件夹
进入 NoteBook 中:运行示例
!python draw_result_folder.py --data_url=./data/ --save_url=./pred_visualization --ckpt_path=./ckpt_0/best.ckpt
其中–data_url:数据集输入路径(到图像文件夹)。
其中–save_url:输出图像保存路径。
其中–ckpt_path:ckpt 读取路径。
文件夹图片可视化所需时间约为 10 分钟。
可视化完的图片会保存在/unet/pred_visualization 文件夹下。
输出结果:
![](https://static001.geekbang.org/infoq/19/1978e2be1513357923dcd629b93a4558.png)
五. 模型保存
如果想在昇腾 AI 处理器上执行推理,
可以通过网络定义和 CheckPoint 生成 AIR 格式模型文件。
Step 运行脚本
进入 NoteBook 中:运行示例
!python export.py --ckpt_file="./ckpt_0/best.ckpt" --width=960 --height=960 --file_name="out_model/unet_hw960_bs1" --file_format="AIR"
其中–-ckpt_file: ckpt 路径。
其中–width: 模型输入尺寸。
其中–height: 模型输入尺寸。
其中–file_name: 输出文件名。
其中–file_format: 输出格式,必须为[“ONNX”, “AIR”, “MINDIR”]。
模型保存即导出模型的输出结果在 out_model/unet_hw960_bs1.air
最后将导出的模型下载至本地,供后续推理阶段实验使用:
右键 -> Download
![](https://static001.geekbang.org/infoq/0a/0a4d0721eeeed6dc39ca17b2b8a2c24e.png)
六. 模型转换
此处模型转换需要用到 ATC 工具。
详细内容 &错误码请参考昇腾官网文档-使用ATC工具转换模型
Step1 上传 air 模型
将训练阶段实验模型保存的 air 模型上传至华为云 ModelArts 的 unet_sdk/model/目录下
这里因为模型中有 optype[ArgMaxD],因此需要在 Ascend910 系列芯片上执行模型转换才能成功。(此次华为云 ModelArts 使用的正是 Ascend910A)而一般情况,模型训练完进行的模型转换是可以选择在开发者套件(Ascend310 系列芯片)和 Ubuntu 系统中执行的。(具体方法请参考昇腾官网文档-转换模型)
Step2 模型转换命令
打开 unet_sdk/model/air2om.sh 文件
使用 atc 命令如下,可根据实际开发情况进行修改。
本实验将训练阶段实验模型保存的 air 模型转为昇腾 Al 处理器支持的 om 格式离线模型注意:air 模型转 om 只支持静态 batch,这里 batchsize=1。
其中–framework:原始框架类型。
其中–model:原始模型文件路径与文件名。
其中–output:转换后的离线模型的路径以及文件名。
其中–input_format:输入数据格式。
其中–soc_version:模型转换时指定芯片版本。
(这句话指的是当前执行模型转换时候所在机器的芯片版本,可通过命令行终端输入
npu-smi info
查看)
其中–log:显示日志的级别。
其中–insert_op_conf:插入算子的配置文件路径与文件名,这里使用 AIPP 预处理配置文件,用于图像数据预处理。
Step3 运行脚本
确保在工程目录 unet_sdk/model/路径下,首先查看文件权限
ls -l
(如果文件权限列中没有 x,你才需要继续下一命令赋予它执行权限)
输入
chmod +x air2om.sh
运行示例
输入
./air2om.sh
输出结果:
![](https://static001.geekbang.org/infoq/eb/eb79c2ea6400163daf6672e513daaeb4.png)
注:
到此我们在华为云上使用 MindSpore 的训练阶段实验就结束了。
有了导出的 air 模型及其模型转换出的 om 模型,我们就可以继续进入下一篇章:AscendCL 推理阶段。
结束后记得及时关闭云上环境,避免资源浪费和产生额外的费用!!!
学习资源推荐
昇思官网
昇思官网教程 1.9:模型训练 https://www.mindspore.cn/tutorials/zh-CN/r1.9/beginner/train.html
视频教程初学入门昇思MindSpore初学教程(1h33m39s)昇思MindSpore进阶课程(4h)MindSpore CV与NLP类模型复现解析(1h50m37s)昇思MindSpore实践指南:MindSpore基础网络构建及CV类网络迁移调试(1h40m4s)昇思MindSpore实践指南:基于MindSpore的NLP模型开发、迁移与调试(2h)
GitHub 代码仓 mindspore-ai / models
https://github.com/mindspore-ai/models/tree/master/official/cv
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/2e376daacc8dcad09ecae9934】。文章转载请联系作者。
评论