文档首页 > > 最佳实践> PyCharm ToolKit> 使用PyCharm ToolKit工具快速实现模型训练和部署

使用PyCharm ToolKit工具快速实现模型训练和部署

分享
更新时间:2020/10/16 GMT+08:00

本章节提供了使用MXNet实现手写数字图像识别应用的示例,帮助您使用ModelArts提供的PyCharm ToolKit工具,在本地快速完成模型的训练和部署。更多关于PyCharm ToolKit工具的描述,请参见《工具指南》。

MNIST是一个手写体数字识别数据集,常被用作深度学习的入门样例。本示例将针对MNIST数据集,使用MXNet原生接口编写的模型训练脚本(ModelArts默认提供),在ModelArts PyCharm ToolKit中完成模型训练,并将此模型部署为在线服务。部署完成后,用户可通过在线服务识别输入图片中的数字。

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

准备工作

  • 本地已安装PyCharm 2019.2或以上版本,推荐Windows版本,Community或Professional均可,请单击PyCharm工具下载地址获取工具并在本地完成安装。
  • 已注册华为云账号,且在使用ModelArts前检查账号状态,账号不能处于欠费或冻结状态。
  • 已在OBS服务中创建桶和文件夹,用于存放样例数据集以及模型。如下示例中,请创建命名为“test-modelarts”的桶,并创建如表1所示的文件夹。
    创建OBS桶和文件夹的操作指导请参见创建桶新建文件夹。确保您使用的OBS目录与ModelArts在同一区域。
    表1 文件夹列表

    文件夹名称

    用途

    “dataset-mnist”

    用于存储数据集。

    “mnist-output”

    用于存储训练输出的模型和日志文件。

步骤1:安装PyCharm ToolKit,并添加访问密钥

  1. 获取PyCharm ToolKit工具安装包,单击ToolKit工具的下载地址,获得工具包。
  2. 打开本地PyCharm工具。
  3. 在PyCharm工具中,选择菜单栏的“File > Settings”,弹出“Settings”对话框。
  4. “Settings”对话框中,首先单击左侧导航栏中的“Plugins”,然后单击右侧的设置图标,选择“Install Plugin from Disk”,弹出文件选择对话框。
    图1 选择从本地安装插件
  5. 在弹出的对话框中,从本地目录选择ToolKit的工具包,然后单击“OK”
    图2 选择插件文件
  6. 单击“Restart IDE”重启PyCharm。在弹出的确认对话框中,单击“Restart”开始重启。
    图3 重启PyCharm
  7. 重启成功后,当PyCharm工具栏出现“ModelArts”页签,表示ToolKit工具已安装完成。
    图4 安装成功
  8. 获取访问密钥,并在ModelArts管理控制台和PyCharm中添加密钥。
    • 获取此账号的访问密钥(“AK/SK”),详细操作请参见获取访问密钥
    • 当前账号已完成访问授权的配置。如未完成,请参考使用委托授权针对之前使用访问密钥授权的用户,建议清空授权,然后使用委托进行授权。

      如果您的ModelArts管理控制台已完成密钥添加,此操作可跳过。

    • PyCharm ToolKit安装后,在ToolKit工具中添加访问密钥,详细操作请参见使用访问秘钥登录
    图5 填写区域和访问密钥

步骤2:准备数据

ModelArts在公共OBS桶中提供了MNIST数据集,命名为“Mnist-Data-Set”,因此,本文的操作示例使用此数据集进行模型构建。您需要执行如下操作,将数据集上传至您的OBS目录下,即准备工作中您创建的OBS目录“test-modelarts/dataset-mnist”

  1. 单击数据集下载链接,将“Mnist-Data-Set”数据集下载至本地。
  2. 在本地,将“Mnist-Data-Set.zip”压缩包解压。例如,解压至本地“Mnist-Data-Set”文件夹下。
  3. 参考上传文件,使用批量上传方式将“Mnist-Data-Set”文件夹下的所有文件上传至“test-modelarts/dataset-mnist”OBS路径下。

    “Mnist-Data-Set”数据集包含的内容如下所示,其中“.gz”为对应的压缩包。

    • “t10k-images-idx3-ubyte”:验证集,共包含10000个样本。
    • “t10k-images-idx3-ubyte.gz”:验证集的压缩包文件。
    • “t10k-labels-idx1-ubyte”:验证集标签,共包含10000个样本的类别标签。
    • “t10k-labels-idx1-ubyte.gz”:验证集标签的压缩包文件。
    • “train-images-idx3-ubyte”:训练集,共包含60000个样本。
    • “train-images-idx3-ubyte.gz”:训练集的压缩包文件。
    • “train-labels-idx1-ubyte”:训练集标签,共包含60000个样本的类别标签。
    • “train-labels-idx1-ubyte.gz”:训练集标签的压缩包文件。

步骤3:编写训练代码

ModelArts提供了本示例需要使用的训练代码,请获取并在PyCharm工程中打开。
  1. 在gitee的ModelArts-Lab工程中,单击“克隆/下载”,然后单击“下载ZIP”,下载工程。
  2. 下载完成后,解压缩“ModelArts-Lab-master.zip”文件,然后在“\ModelArts-Lab-master\official_examples\Using_MXNet_to_Create_a_MNIST_Dataset_Recognition_Application\codes”目录中获取到训练代码文件“train_mnist.py”
  3. 打开PyCharm工具,单击“File > Create Project”创建新工程, 在工程目录下创建“src”文件夹,并将训练代码文件“train_mnist.py”拷贝到“src”文件夹下。
    图6 将训练代码拷贝至src目录

步骤4:训练模型

数据和代码准备完成后,您可以创建一个训练作业,选用MXNet引擎,基于本地的train_mnist.py训练脚本,并最终生成一个可用的模型。本示例已提供编码完成的脚本(基于MXNet引擎的原生接口),如果使用自行编写的代码,请使用ModelArts支持的引擎类型及其对应版本的接口,并满足其要求。

  1. 在PyCharm工具栏中,选择“ModelArts > Edit Training Job Configuration”
  2. 在弹出的对话框中,按照如下示例配置训练参数。
    • “Job Name”:自动生成,首次提交训练作业时,该名称也可以自己指定。
    • “AI Engine”:选择“MXNet”,版本为“MXNet-1.2.1-python3.6”
    • “Algorithm Source”:选择“Frequently-used”,代表常用框架。
    • “Specifications”:选择GPU规格。
    • “OBS Path”:填写准备工作中创建的输出路径,用于存储训练输出模型和日志文件。
    • “Data Path in OBS”:填写步骤2:准备数据中数据上传的OBS目录。此处需完整OBS路径,需包含OBS桶名称。

      此示例填写的值如图所示,请务必修改为您自己的OBS桶及路径。

    • “Boot File Path”:选择本地的训练脚本“train_mnist.py”
    • “Code Directory”:选择启动脚本所在“src”目录。
    • “Running Parameters”:是训练脚本所需要的输入参数,本样例中没有参数,无需填写。
    填写完成后,单击“Apply and Run”提交训练作业到云上ModelArts。

    由于MNIST数据集数据较多,为提升训练效率,操作示例选择GPU训练。但是,GPU的费用高于CPU,请根据实际情况选择可用的资源池。

    图7 配置训练作业
  3. 训练作业提交后,可在下方查看训练日志。当训练日志中出现“Current training job status: Successful”类似信息时,表示训练作业运行成功。
    图8 查看训练日志

    其中, “ModelArts Event Log”栏为工具打印的日志,“ModelArts Training Log”为训练脚本代码打印的日志。

    从日志可以看到,工具会先将本地工程的代码自动上传至云上OBS,然后自动提交一个训练作业。作业提交成功后,工具会实时从云上的训练环境获取日志并展示在“ModelArts Training Log”窗口,直至作业运行结束。

  4. 在PyCharm的左边菜单栏,单击“ModelArts Explorer”,选择刚才提交的作业,双击版本号“V0001”,可以查看作业详情。
    图9 选择对应的训练作业及版本
    图10 训练作业详情

步骤5:编写推理代码和配置文件,并上传至模型所在路径

ModelArts提供了本示例需要使用的推理代码“customize_service.py”和配置文件“config.json”文件路径和下载的git工程中的训练代码在同一目录。此推理代码和配置文件是ModelArts提供的示例。

步骤4:训练模型中,训练作业生成的模型存储在“test-modelarts/mnist-output/MA-mnist-11-30-16/output/V0001”路径下(其中MA-mnist-11-30-16是Job Name,如果配置时填写了自定义Job Name,则路径中就是自定义的Job Name),且系统将自动生成“model”文件夹,模型相关的文件存储在此目录下。将获取的“customize_service.py”“config.json”文件,上传至OBS的“model”文件夹下。

如果训练作业运行多次,将在“训练输出位置”生成不同的版本,即“mnist-output”目录下将生成多种版本的目录,如“V0001”“V0002”,请基于训练作业的版本,将文件上传至对应版本下的“model”文件夹内。

前往OBS管理控制台,找到“test-modelarts”桶,然后进入“test-modelarts/mnist-output/MA-mnist-11-30-16/output/V001/model”路径,执行“上传对象”的操作。OBS的上传操作指导,请参见上传文件

步骤6:部署在线服务

训练完成的模型还是存储在OBS路径中,您可以将此模型导入到ModelArts中并部署为在线服务。

  1. 在训练作业版本号上单击鼠标右键,选择“Deploy to Service”
    图11 部署为在线服务
  2. 在弹出的对话框中,按照如下说明填写部署为在线服务的参数。
    • “Service Name”:自动生成,也可以自定义。
    • “Auto Stop”:勾选Auto Stop,表示启动自动停止功能,服务会在指定时间后自动停止。
    • “Model Path”:自动填写,无需自己配置。与您选择的训练作业及其版本一致。
    • “Environment Variables”:填写运行参数,设置为“input_data_name=images;input_data_shape=0,1,28,28;output_data_shape=0,10”
      • “input_data_name”:参数值必须是images。针对自己开发训练脚本的场景,此参数是必须设置的。您可以在导入模型时设置参数,也可以写到推理代码中。
      • “input_data_shape”:代表NCHW。本示例的数值为“0,1,28,28”,表示设置了输入图片的规则,其中,输入预测图片大小必须是“28px*28px”
      • “output_data_shape”:置信度。本示例指定范围为“0~10”。表示输出结果会显示“0~10”中10个类别,属于每一个类别的概率。

    信息填写完成后,单击“OK”,开始服务部署。

    图12 部署为在线服务

    可以在最下方的日志栏查看服务部署进度。

    图13 查看部署进度

    模型部署上线需要花费一些时间,请耐心等待几分钟。当出现类似“Service status is running”信息时,表示服务部署成功。服务部署成功后,将展示在线服务的链接,单击链接可以进入华为云ModelArts在线服务的界面。

    首次进入需要输入华为云账号密码登录。

    图14 完成部署

步骤7:测试服务

在线服务部署成功后,您可以进入在线服务,发起预测请求进行测试。

  1. 部署成功后,单击提供的链接进入在线服务。
  2. 在线服务详情页面中,单击“预测”页签,进入预测页面。
  3. “选择预测图片文件”右侧,单击“上传”按钮,上传一张黑底白字的图片,然后单击“预测”

    预测完成后,预测结果显示区域将展示预测结果,根据预测结果内容,可识别出此图片的数字是“8”的概率为“1”

    • 由于推理代码和配置文件中已指定图片要求,用于预测的图片,大小必须为“28px*28px”,且图片必须是黑底白字。
    • 建议不要使用数据中自带的图片,可以使用Windows自带的画图工具绘制一张。
    图15 预测结果

步骤8:清除相应资源,避免产生费用

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

  • 进入ModelArts管理控制台,删除在线服务:在“在线服务”页面,单击操作列的“更多>删除”
  • 进入ModelArts管理控制台,删除训练作业:在“训练作业”页面,单击操作列的“删除”
  • 进入OBS管理控制台,删除数据准备阶段创建的OBS桶。先逐个删除桶内文件夹和文件,再执行删除桶的操作。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问