HCSO局点ModelArts PyCharm插件最佳实践
HCSO局点ModelArts PyCharm插件最佳实践
1. 前言
PyCharm在python项目开发提供了优秀的代码编辑、调试、远程连接和同步能力,在开发者中广受欢迎。本文以Ascend Model Zoo为例,介绍如何在本地进行数据及模型开发调试,并通过PyCharm插件及ModelArts notebook进行云端开发及训练作业提交。
2. 环境准备
2.1 工具准备
工具名称 | 备注 |
---|---|
Pycharm IDE | 社区版/专业版 |
Modelarts Pycharm插件 | IDE插件市场搜索ModelArts |
Modelarts Notebook | |
本地PC python环境 | 需安装mindspore依赖 |
2.2 插件安装和登录
2.2.1 安装插件
1.安装方式1
选择File>Settings>Plugins,在Marketplace里搜索“ModelArts”,点击Install即可完成安装。
2.安装方式2
把获取到的插件包直接拖拽到PyCharm里,重启后,即可以完成安装;
或者选择File>Settings>Plugins,点击右上角齿轮,选择从本地安装插件,即可完成安装。
2.2.2 登录插件
安装完插件后,会在IDE菜单栏出现ModelArts,点击后选择Edit Credential,出现如下页面
1.获取配置yaml文件和host信息
⚠注意:
由于插件需要使用API进行接口调用,有些HCSO局点的API域名未注册,因此需要把对应的API域名对应的IP地址配置到本地PC的hosts文件中,该文件一般位于
C:\Windows\System32\drivers\etc
点击Get more region…进入到配置文件和host信息下载地址,根据对应的局点选择yaml文件以及host信息,以成都局点为例,进入cn-southwest-228_cdzs文件夹下载配置文件到本地,然后点击Config…,导入已经下载好的配置文件,导入后会提示Import successful的提示,此时就可以看到局点信息已配置OK;对应host信息,需要把对应信息写入本地PC的C:\Windows\System32\drivers\etc
2.登录插件
需要获取账号的AK和SK信息,在个人凭证页面进行下载获取,把AK和SK信息输入到插件对应位置,点击OK按钮即可完成插件的登录。
3. Ascend模型开发
3.1 本地开发💻︎
1. 下载项目代码至PC并在pycharm中打开此项目
本例中,以图像分类模型resnet50模型为例,路径为
./models/official/cv/resnet/
# 下载代码至本地
git clone https://gitee.com/mindspore/models.git -b v1.5.0
2. 配置本地PC开发环境
# 控制台安装mindspore
pip install mindspore
# 安装resnet依赖 需要进入到models/official/cv/resnet目录下
pip install -r requirements.txt
3. 数据集准备
本样例使用的数据集为类别数为五类的花卉识别数据集,下载并解压数据到工程目录,比如可以将数据集保存在models/dataset/flower_photos
文件夹。
4. 配置Pycharm解释器和入参
# 根据README说明文档,配置的Parameter入参如下,其中device_target="CPU"表示CPU环境运行,device_target="Ascend"表示在Ascend环境运行
--net_name=resnet50 --dataset=imagenet2012 --data_path=../../../dataset/flower_photos/ --class_num=5 --config_path=./config/resnet50_imagenet2012_config.yaml --epoch_size=1 --device_target="CPU"
5. 本地代码调测
一般来说,AI开发过程中的数据集开发及模型开发是和硬件规格无关的,而且这一部分的开发耗时是最长的,因此我们可以先在本地PC的CPU环境进行数据集和模型开发调试。【本例中,因为样例代码已经支持在CPU上进行训练,因此用户能够在CPU上完成整个训练流程】
如果代码能够在CPU上训练,那么可以直接在Pycharm上点击运行按钮,观察是否能正常训练(如果模型只支持GPU或者Ascend,那么可能会报错,需要使用notebook进行云端调试)。
一般本地CPU算力较低并且内存较小,可能出现内存溢出的情况,此时可以把config/resnet50_imagenet2012_config.yaml
的batch_size由256改为32,使得训练作业可以快速运行
3.2 Modelarts云端开发调试☁
⚠注意:
- 只有PyCharm专业版支持本章节,社区版可以直接跳转至3.3.1章节完成创建训练作业。
云端开发调试优势:
- 环境保持一致
- 配置一键完成
- 代码远程debug
- 资源按需使用
3.2.1 连接云端开发环境
1. 创建或打开云端Ascend规格的notebook
2. 通过Pycharm插件连接云端notebook
插件登录成功后,点击**Notebook>Remote Config…**选项,在打开的界面中选择自己要连接的notebook实例
在KeyPair中选择该notebook实例对应的秘钥,选择完成后,点击Apply进行远程notebook一键配置,等待一段时间后,会出现重启IDE的确认框,点击确认重启,重启后即可生效。
3.2.2 远程调试
1. 同步代码和数据至云端notebook
代码同步至notebook:
数据同步至云端:
1.1 文件夹直接上传至notebook
类似上传代码至notebook,直接上传数据文件夹。(由于本案例数据集中图片数量较多,通过IDE进行上传比较耗时,推荐使用1.2方式进行上传)
1.2 数据集压缩包上传至notebook后,在notebook中解压
把数据集压缩包上传至notebook,在notebook中做解压操作。
使用tar -zxvf flower_photos.tgz
对数据集进行解压。
⚠注意:
- 当数据集比较大达到数GB时,建议先将数据集先上传至OBS再通过OBS上传至notebook,PyCharm只适合做小文件的同步上传;
- 调试时建议使用较小的数据集子集,方便数据同步与数据加载。
2. 配置云端python解释器
3. 云端notebook安装依赖
4. 云端调试与运行
配置完云端的解释器后,Pycharm可以直接使用远端notebook中的python解释器和硬件规格,满足用户在本地体验到真实的硬件环境并进行全流程的调试和验证。
⚠基于Ascend的样例中,可能会抛出异常
ModuleNotFoundError: No module named 'te'
原因是:pycharm的PYTHONPATH会将notebook中的环境变量中指定的PYTHONPATH进行覆盖,因此,还需要将
te
包所在的路径添加到Pycharm的PYTHONPATH中。te
包的路径可以通过pip show te
查看,对应的路径为:/usr/local/Ascend/nnae/5.0.3/compiler/python/site-package
可以在运行参数中,把该路径加入到PYTHONPATH中
$PYTHONPATH:/usr/local/Ascend/nnae/5.0.3/compiler/python/site-package
5. 保存开发环境镜像
成功完成notebook调测后,此时的notebook已经包含了模型训练所有的依赖环境,因此我们可以将已经调测完成的开发环境保存成一个镜像,选择notebook->更多->保存镜像。此时notebook会冻结,需要等待几分钟(只需要保存一次)。
保存后的镜像可以在Modelarts->镜像管理中进行查看,对应完整的镜像名称为详情->SWR地址
✔温馨提示:notebook在代码调试完成及保存镜像后就可以关闭了,减少资源扣费。
6.按需使用实例资源
6.1 停止notebook实例
当实例处于运行状态时,点击插件该实例名称,停止实例。
6.2 启动notebook实例
当实例处于停止状态时,点击插件该实例名称,启动实例。(默认启动时间为4小时)
3.3 提交训练作业
ModelArts
训练平台提供了海量的算力规格和训练优化,我们可以将本地调试好的代码以及之前保存的开发环境镜像直接在Pycharm中提交训练作业。
由于训练作业是在云端运行,因此需要把训练数据和训练代码上传至云端。
对应训练数据,我们需要把下载好的训练数据上传至OBS,可以借助OBS客户端进行上传,对应的OBS客户端可以在OBS服务页面进行下载并登陆。
把已经下载好的训练数据通过OBS客户端上传至对应的OBS,新建data文件夹存放训练数据,新建job文件夹用来存放训练作业相关数据。
3.3.1 使用预置镜像创建训练作业
参数名称 | 含义 |
---|---|
JobName | 训练作业的名称,默认为当前的时间 |
AI Engine | 训练引擎,包括引擎类型和版本号 |
Boot File Path | 本地训练启动代码 |
Code Directory | 本地代码目录 |
Image Path(optional) | 可选项,输入自定义镜像swr路径地址(使用的自定义镜像和预置的训练镜像引擎一致) |
Data Obs Path | OBS上的数据集路径(需要提前把数据上传到OBS中) |
Training Obs Path | OBS路径(该路径必须是存在的),用于保存代码和训练模型及日志的输出 |
Running Parameters | 训练脚本接收的参数 |
Specifications | 计算规格,这里选择NPU:1*Ascend 910CPU:24*vCPUs 96GB |
Compute Node | 节点数(单机训练默认为1) |
在RunningParameters中填入相关参数,此时需要将运行环境参数配置为Ascend
--net_name=resnet50
--dataset=imagenet2012
--enable_modelarts=True
--class_num=5
--config_path=/home/ma-user/modelarts/user-job-dir/resnet/config/resnet50_imagenet2012_config.yaml
--epoch_size=10
--device_target=Ascend
填写完训练作业参数,即可以提交查看训练作业
3.3.2使用自定义镜像创建训练作业
使用预置命令创建训练作业
使用自定义镜像创建训练作业和使用预置镜像创建训练作业的差别,就是在Image Path处填入自定义镜像地址,同时在选择预置镜像时要和自定义镜像保持一致。
3.3.3 提交查看训练作业
点击Apply and Run
按钮就可以直接提交训练作业,训练的日志可以在Pycharm窗口中实时展示。
网页端也可以看到实时的训练动态。
如果想要在中途终止训练,可以在pycharm中点击Modelarts->Training Job->Stop,或者直接在网页端点击终止。
- 点赞
- 收藏
- 关注作者
评论(0)