文档首页/ AI开发平台ModelArts/ 最佳实践/ Standard开发环境/ 使用ModelArts PyCharm插件调试训练ResNet50图像分类模型
更新时间:2024-09-12 GMT+08:00
分享

使用ModelArts PyCharm插件调试训练ResNet50图像分类模型

本案例介绍如何将本地开发好的MindSpore模型代码,通过PyCharm ToolKit连接到ModelArts进行云上调试和训练。

开始使用样例前,请仔细阅读准备工作罗列的要求,提前完成准备工作。本案例的步骤如下所示:

步骤1:安装和登录PyCharm ToolKit

步骤2:使用PyCharm进行本地开发调试

步骤3:使用ModelArts Notebook进行开发调试

步骤4:使用PyCharm提交训练作业至ModelArts

步骤5:清除相应资源

准备工作

  • 本地已安装2019.2-2023.2之间(包含2019.2和2023.2)版本的PyCharm专业版工具,推荐Windows版本,社区版或专业版均可,请单击PyCharm工具下载地址获取工具并在本地完成安装。
    • 使用PyCharm ToolKit远程连接Notebook开发环境,仅限PyCharm专业版。
    • 使用PyCharm ToolKit提交训练作业,社区版和专业版都支持。
  • 已注册华为账号并开通华为云,且在使用ModelArts前检查账号状态,账号不能处于欠费或冻结状态。
  • 已创建当前使用账号的访问密钥,并获得对应的AK和SK。如果未创建,请参见创建访问密钥(AK和SK)
  • 当前账号已完成访问授权的配置。如未完成,请参考使用委托授权

环境说明

  • Python 3.7.6
  • PyCharm 2023.1.3 (Professional Edition)

    本案例使用PyCharm版本为PyCharm 2023.1.3 (Professional Edition),不同版本PyCharm之间部分界面可能不同,仅供参考。

步骤1:安装和登录PyCharm ToolKit

  1. 安装PyCharm ToolKit。
    在PyCharm中选择“File>Settings>Plugins”,在Marketplace里搜索“ModelArts”,单击“Install”即可完成安装。
    图1 通过Marketplace安装
  2. 登录PyCharm ToolKit。
    1. 打开“Edit Credential”界面。

      安装完插件后,会在IDE菜单栏出现“ModelArts”,单击后选择“Edit Credential”

      如果菜单栏中找不到“ModelArts > Edit Credential”,可能是PyCharm版本过高,PyCharm toolkit未适配2023.2之后版本的PyCharm工具。请下载2019.2-2023.2之间(包含2019.2和2023.2)版本的PyCharm专业版工具。

    2. 验证登录信息。

      将创建访问密钥(AK和SK)输入到ToolKit对应位置,单击OK按钮进行登录,出现下图提示即为登录成功。

      如果未创建,请参见创建访问密钥(AK和SK)

      图2 成功登录提示

步骤2:使用PyCharm进行本地开发调试

  1. 下载代码至本地。
    本案例中,以图像分类模型resnet50模型为例,路径为“./models/official/cv/resnet/”
    # 在本地电脑Terminal下载代码至本地
    git clone https://gitee.com/mindspore/models.git -b v1.5.0
    图3 下载代码至本地
  2. 配置本地PC开发环境。
    修改“models/official/cv/resnet/requirements.txt”文件,改为:
    numpy==1.17.5
    scipy==1.5.4
    easydict==1.9
    执行pip命令安装:
    # 在PyCharm的Terminal安装mindspore
    pip install mindspore==1.7.0 --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
    # 在PyCharm的Terminal安装resnet依赖
    pip install -r .\official\cv\resnet\requirements.txt --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple
    图4 安装resnet依赖
  3. 准备数据集。

    本样例使用的数据集为类别数为五类的花卉识别数据集,下载数据集并解压数据到工程目录。新建dataset文件夹,将解压后数据集保存在dataset文件夹下。

    图5 准备数据集
  4. 配置PyCharm解释器和入参。
    单击右上角“Current File”,选择“Edit Configuration”,打开“Run/Debug Configuration”对话框。在对话框中单击“+”,选择“Python”
    图6 前往PyCharm解释器

    “Script path”选择train.py文件,“Parameters”命令如下所示,并选择Python解释器,然后单击“OK”

    --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"
    图7 配置PyCharm解释器

    根据README说明文档,配置Parameter参数device_target="CPU"表示CPU环境运行,device_target="Ascend"表示在Ascend环境运行。

  5. 本地代码开发调测。

    一般本地CPU算力较低并且内存较小,可能出现内存溢出的报错,因此可以把“models/official/cv/resnet/config/resnet50_imagenet2012_config.yaml”“batch_size”“256”改为“32”,使得训练作业可以快速运行。

    图8 修改batch_size

    AI开发过程中的数据集开发及模型开发是和硬件规格无关的,而且这一部分的开发耗时是最长的,因此可以先在本地PC的CPU环境进行数据集和模型开发调试。

    本例中,因为样例代码已经支持在CPU上进行训练,因此用户能够在CPU上完成整个训练流程。如果代码只支持在GPU或者Ascend上训练,那么可能会报错,需要使用Notebook进行云端调试。

    设置断点后单击“调试”,可实现代码逐步调试,查看中间变量值。

    图9 “调试”按钮
    图10 通过设置断点实现代码调试

    可单击“运行”按钮,通过日志观察是否能正常训练。

    图11 “运行”按钮
    图12 训练日志

步骤3:使用ModelArts Notebook进行开发调试

使用ModelArts Notebook进行开发调试具有如下优势:

  • 环境保持一致
  • 配置一键完成
  • 代码远程Debug
  • 资源按需使用

只有PyCharm专业版支持本章节,社区版可以直接跳转至步骤4:使用PyCharm提交训练作业至ModelArts完成创建训练作业。

  1. 连接Notebook开发环境。
    1. 创建或打开云端Ascend规格的Notebook。创建Notebook详细操作请参见创建Notebook实例,Notebook规格相关信息如下所示:

    “镜像”:tensorflow1.15-mindspore1.7.0-cann5.1.0-euler2.8-aarch64。

    “资源选择”:公共资源池。

    “类型”:ASCEND。

    “规格”:选Ascend类型的,以界面实际可选值为准。

    “存储配置”:EVS存储。

    “SSH远程开发”:开启。

    “密钥对”:选择已有密钥对,或单击密钥对右侧的“立即创建”创建密钥对。

  2. 通过ToolKit连接云端Notebook。
    1. 在IDE菜单栏中选择“ModelArts>Notebook>Remote Config”,在打开的界面中选择要连接的Notebook实例。

      此处如果看不到Connect to Remote选项,请先参考创建Notebook实例章节,创建Notebook实例,并开启该实例的SSH远程开发功能。

      也可能是PyCharm ToolKit的版本不正确,请按照文档要求下载新版本的PyCharm ToolKit。

      下载前请先清除浏览器缓存,如果之前下载过老版本的PyCharm ToolKit,浏览器会有缓存,可能会导致新版本下载失败。

    2. 在KeyPair中选择该Notebook实例对应的密钥,选择完成后,单击Apply进行远程Notebook一键配置,等待一段时间后,会出现重启IDE的确认框,单击确认重启,重启后即可生效。
    图13 ToolKit连接Notebook配置界面
    • KeyPair: 需要选择保存在本地的Notebook对应的keypair认证。即创建Notebook时创建的密钥对文件,创建时会直接保存到浏览器默认的下载文件夹中。
    • PathMappings: 该参数为本地IDE项目和Notebook对应的同步目录,默认为“/home/ma-user/work/project”,可根据自己实际情况更改。
  3. 同步代码和数据至云端Notebook。
    1. 将代码同步至Notebook。

      选择resnet文件夹,右键选择“Deployment>Upload to”上传代码至Notebook。

      图14 同步代码至Notebook
    2. 将数据同步至Notebook。
      • (推荐)方法一:数据集压缩包上传至Notebook后解压

        把数据集压缩包右键选择“Deployment>Upload to”的方式上传至Notebook后,在Notebook中对数据集进行解压操作,解压命令如下:

        tar -zxvf work/models/dataset/flower_photos.tgz 
        图15 数据集压缩包上传至Notebook后解压
      • 方法二:文件夹直接上传至Notebook。

        类似上传代码至Notebook,直接上传数据文件夹。(由于本案例数据集中图片数量较多,通过IDE进行上传比较耗时,推荐使用方法一进行上传)

        图16 文件夹直接上传至Notebook
    • 当数据集比较大达到数GB时,建议先将数据集先上传至OBS再通过OBS上传至Notebook,PyCharm只适合做小文件的同步上传。
    • 调试时建议使用较小的数据集子集,方便数据同步与数据加载。
  4. 配置云端Python解释器。
    修改Parameters参数,并选择云端Python解释器。
    --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="Ascend"
    图17 配置云端python解释器
  5. 云端Notebook安装依赖。

    打开“Tool>Start SSH Section”,安装依赖软件。

    # 进入MindSpore环境
    source /home/ma-user/anaconda3/bin/activate MindSpore
    # 安装resnet依赖
    pip install -r work/models/official/cv/resnet/requirements.txt
    图18 云端Notebook安装依赖
  6. 云端调试与运行。

    配置完云端的解释器后,PyCharm可以直接使用远端Notebook中的python解释器和硬件规格,满足用户在本地体验到真实的硬件环境并进行全流程的调试和验证。

    基于Ascend的样例中,可能会抛出异常。

    ModuleNotFoundError: No module named 'te'

    原因是:PyCharm的PYTHONPATH会将Notebook中的环境变量中指定的“PYTHONPATH”进行覆盖,因此,还需要将te包所在的路径添加到PyCharm的“PYTHONPATH”中。

    te包的路径通过“pip show te”查看,例如te包返回对应的路径为:“/usr/local/Ascend/nnae/5.0.3/compiler/python/site-package”,则“PYTHONPATH”对应的“Value”“$PYTHONPATH:/usr/local/Ascend/nnae/5.0.3/compiler/python/site-package”
    图19 将te包所在的路径添加到PyCharm的PYTHONPATH中
  7. 保存开发环境镜像。

    成功完成Notebook调测后,此时的Notebook已经包含了模型训练所有的依赖环境,因此可以将已经调测完成的开发环境保存成一个镜像,选择“Notebook>更多>保存镜像”。此时Notebook会冻结,需要等待几分钟(只需要保存一次)。

    保存后的镜像可以在“ModelArts>镜像管理”中进行查看,对应完整的镜像名称为“详情->SWR地址”

    图20 查看保存后的镜像

    Notebook在代码调试完成及保存镜像后就可以关闭了,减少资源浪费。

  8. 连接、停止、启动和断开Notebook实例。
    • 连接Notebook实例。

      当Notebook实例为绿色三角形状态时,表示该实例运行中(但未与PyCharm连接)。此时单击该实例名称,实例会变为绿色勾状态,表示PyCharm已与实例连接成功。

      图21 实例运行中状态
    • 停止Notebook实例。

      当Notebook实例为绿色勾状态时,表示该实例运行中且与PyCharm连接成功。此时单击该实例名称,实例会变为黄色感叹号状态,表示停止Notebook实例。

      图22 实例运行中且与PyCharm连接成功状态
    • 启动Notebook实例。

      当Notebook实例为黄色感叹号状态时,表示该实例已停止。此时单击该实例名称,实例会变为绿色勾状态,表示启动Notebook实例且与PyCharm连接成功(默认启动时间为4小时)。

      图23 实例已停止状态
    • 断开PyCharm ToolKit中的Notebook实例SSH连接。

      选择“File>Settings>Tool>SSH Configurations”,单击需要断开的实例,选择“-”,单击“OK”,则IDE菜单栏“ModelArts>Notebook”中的Notebook实例连接断开。

      该步骤会使Notebook实例不在PyCharm ToolKit中呈现,但Notebook实例仍然存在于控制台。如果想删除Notebook实例以释放资源,请登录ModelArts管理控制台,在Notebook管理页面进行删除。

      图24 断开PyCharm ToolKit中的Notebook实例SSH连接

步骤4:使用PyCharm提交训练作业至ModelArts

ModelArts训练平台提供了海量的算力规格和训练优化,支持将本地调试好的代码以及之前保存的开发环境镜像直接在PyCharm中提交训练作业。

  1. 创建OBS桶并上传数据。

    由于训练作业是在ModelArts端运行,因此需要把训练数据和训练代码上传至云端Notebook。可借助OBS Browser+把下载好的训练数据上传至OBS,具体安装步骤请见安装OBS Browser+

    新建data-flower桶,把训练数据flower_photos文件夹通过OBS Browser+上传至对应的OBS,并新建train文件夹用来存放训练作业相关数据。

    图25 上传数据至OBS
  2. 创建训练作业。
    在IDE菜单栏选择“ModelArts>Training Job>New...”创建训练作业。
    图26 创建训练作业

    创建训练作业界面各参数名称及含义如下表所示。

    表1 参数名称及含义

    参数名称

    含义

    JobName

    训练作业的名称,默认为当前的时间。

    AI Engine

    训练引擎,这里选择“mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64”

    Boot File Path

    本地训练启动代码。

    Code Directory

    本地代码目录

    Image Path(optional)

    可选项,输入自定义镜像swr路径地址(使用的自定义镜像和预置的训练镜像引擎一致)

    Data OBS Path

    OBS上的数据集路径(需要提前把数据上传到OBS中)

    Training OBS Path

    OBS路径(该路径必须是存在的),用于保存代码和训练模型及日志的输出

    Running Parameters

    训练脚本接收的参数。

    Specifications

    计算规格,这里选择Ascend类型的,以界面实际可选值为准。

    Compute Node

    节点数(单机训练默认为1)

    PyCharm中支持两种方式创建训练作业:使用预置镜像训练作业、自定义镜像创建训练作业。

    • 使用预置镜像创建训练作业。
      在RunningParameters中填入如下训练参数,其余参数按实际路径填写。
      --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

      填写完训练作业参数后,单击“Apply and Run”即完成训练作业创建。

      图27 使用预置镜像创建训练作业
    • 使用自定义镜像创建训练作业。

      使用自定义镜像创建训练作业和使用预置镜像创建训练作业的差别,在于Image Path处填入了自定义镜像的地址。填写完训练作业参数后,单击“Apply and Run”即完成训练作业创建。

      在选择AI Engine预置镜像时,需要和自定义镜像保持一致,该设置的作用为通过预置镜像的启动命令启动自定义镜像。

      例如自定义镜像中用到Mindspore,则预置镜像中可选择包含Mindspore的镜像。

      图28 使用自定义镜像创建训练作业
  3. 查看训练日志。
    在单击“Apply and Run”按钮后,训练的日志可以在PyCharm窗口中实时展示。也可以单击Event Log中的控制台链接,转调到网页端中查看训练日志。
    图29 在PyCharm中查看训练日志
  4. 终止训练作业。

    如果想要在中途终止训练,可以在PyCharm中单击“ModelArts>Training Job>Stop”,或者直接在网页端单击终止。

    图30 终止训练作业

步骤5:清除相应资源

为避免产生不必要的费用,在完成试用后,建议您删除相关资源,如在线服务、训练作业及其OBS目录。

  • 停止Notebook:在“Notebook”页面,单击对应实例操作列的“停止”
  • 在PyCharm菜单栏中,选择“ModelArts > Stop Training Job”停止此训练作业。
  • 进入OBS管理控制台,删除创建的OBS桶。先逐个删除桶内文件夹和文件,再执行删除桶的操作。

相关文档