使用Mindstudio调用Modelarts进行模型训练

1 介绍

本文介绍如何使用MindStudio调用ModelArts资源进行模型训练。ModelArts是面向AI开发者的一站式开发平台,帮助用户快速创建和部署模型,管理全周期AI工作流。它集成了Jupyter Notebook,为AI开发者提供在线的交互式开发调试工具。开发者通过创建开发环境,可以自行编写和调测模型训练代码,然后基于该代码进行模型训练。MindStudio提供了在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助开发者在一个工具上就能高效便捷地完成AI应用开发。

本文内容涵盖:ModelArts功能介绍;OBS服务使用;在ModerArts平台上创建Notebook实例;连接Notebook实例对模型进行训练。

配套视频链接:使用Mindstudio连接ModelArts资源进行模型训练_哔哩哔哩_bilibili

2 环境准备

2.1 华为云账号注册

共建智能世界云底座-华为云

2.2 获取访问凭证

鼠标移动到控制台右上角用户名的位置,点击我的凭证,可以创建访问密钥。

使用Mindstudio调用Modelarts进行模型训练

使用Mindstudio调用Modelarts进行模型训练

我的凭证创建

创建访问密钥后可以下载得到一个credentials.csv文件,里面是连接账号的凭证。在后面连接obs和Notebook实例均会用到。

使用Mindstudio调用Modelarts进行模型训练

2.3 MindStudio安装

安装MindStudio之前需要安装环境依赖,具体安装细节参考以下链接:

MindStudio安装指南:简介_MindStudio 版本:3.0.4_安装指南_华为云

3 ModelArts

3.1ModelArts控制面板介绍

注册完成后通过以下顺序进入到ModelArts界面,或者直接点击链接ModelArts

使用Mindstudio调用Modelarts进行模型训练

点击管理控制台,进入到ModelArts界面,下面简单介绍modelarts的几个功能。

使用Mindstudio调用Modelarts进行模型训练

  1. 自动学习:
  • 自动学习功能根据标注数据自动设计模型、自动调参、自动训练、自动压缩和部署模型。开发者无需专业的开发基础和编码能力,只需上传数据,通过自动学习界面引导和简单操作即可完成模型训练和部署。

2.数据管理

  • 包含数据采集、数据筛选、数据标注、数据集版本管理功能,支持自动化和半自动化的数据筛选功能,支持自动化的数据预标注及辅助自动化标注工具。

3.开发环境

  • ModelArts开发工具Notebook支持JupyterLab在线交互式开发调试,以及本地IDE远程开发调试。

4.算法管理

  • ModelArts提供了模型训练的功能,方便您查看训练情况并不断调整您的模型参数。您还可以基于不同的数据,选择不同规格的资源池用于模型训练。

5.训练管理

  • 使用算法开启训练作业,为作业分配服务器资源。

6.AI应用管理

  • ModelArts提供了统一的AI应用管理能力,将训练作业中得到的模型、本地开发的模型部署为AI应用,并进行统一管理。同时,为方便能够将模型部署在不同的设备上,ModelArts还提供了模型转换能力,转换后的模型可应用于ARM、Ascend等类型。

7.部署上线

  • 通常AI模型部署和规模化落地非常复杂。ModelArts支持将训练好的模型一键部署到端、边、云的各种设备上和各种场景上,并且还为个人开发者、企业和设备生产厂商提供了一整套安全可靠的一站式部署方式。
  • Modelarts的这些功能都依托于对象存储服务OBS,因此在使用Notebook之前我们将先介绍如何使用OBS对象存储服务。

3.2 对象存储服务OBS

对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,在模型训练前,我们需要把训练用的数据集存放在obs中。按如下几个步骤操作。

  • 创建桶

从控制台左上角的服务列表 找到对象存储服务OBS,点击进入。如果是第一次使用obs,会出现是否开启obs服务的选项,点击确认即可。

使用Mindstudio调用Modelarts进行模型训练

进入到obs服务控制面板,首先点击①桶列表,第一次进来桶列表是空的,点击②创建桶,

使用Mindstudio调用Modelarts进行模型训练

依次按要求填写桶的相关配置信息,除了红字部分,其他选择默认即可。最后点击立即创建。

使用Mindstudio调用Modelarts进行模型训练

创建之后桶名称出现在桶列表中表示创建成功。

  • 下载obs-browser

obs-browser是华为提供用于管理obs的客户端,点击下载链接,选择合适的版本,下载安装。

使用Mindstudio调用Modelarts进行模型训练

这里选择windows 64位版本,安装后打开,登录界面如下:

使用Mindstudio调用Modelarts进行模型训练

使用2.2获得的访问凭证登录或华为云账号登录。

登录进入obs-brower主界面,obs-browser可以更方便地管理桶,进行文件上传与删除等操作。

使用Mindstudio调用Modelarts进行模型训练

点击进入刚才创建的桶,把训练代码和数据集从本地上传到OBS桶中,这里已经把本地调试好的训练代码和数据集上传了。

使用Mindstudio调用Modelarts进行模型训练

使用Mindstudio调用Modelarts进行模型训练

4.Notebook

4.1 创建notebook实例

Notebook实例就是一台linux服务器,可以等同于ECS使用。不同之处在于:

  • Notebook实例提供强力的显卡计算资源,按时计费,费用相对较高。而ECS通常不配置显卡,可以包年包月。
  • Notebook实例重启之后非work目录下的操作都会重置。

在ModelArts控制台,

第一步:进入到ModelArts中开发环境 -> Notebook,点击创建按钮。

使用Mindstudio调用Modelarts进行模型训练

第二步:根据自己的需求进行选择配置,这里需要添加SSH服务,方便后面通过Mindstudio连接使用。

使用Mindstudio调用Modelarts进行模型训练

  1. 自动停止的时间,建议设置低一些,以防开了忘记关闭造成费用的浪费。快到停止时间会有120 秒的提示,长时间训练任务可选择自定义。
  2. 镜像的版本,这里选择的是pytorch1.8版本,根据自己的训练需求选择。
  3. 服务器规格,训练任务选择GPU,可供选择的机器根据区域有所不同。
  4. 密钥对,在IDE中使用ModelArts插件远程连接Notebook使用。

这里已经有密钥对了,如果没有则需要点击“立即创建”,创建完成后会自动下载KeyPair文件。这个文件需要保存下来,是连接Notebook实例的密钥。

使用Mindstudio调用Modelarts进行模型训练

使用Mindstudio调用Modelarts进行模型训练

4.2 Notebook使用介绍

创建后点击Notebook的名称可以查看Notebook的配置信息:

使用Mindstudio调用Modelarts进行模型训练

使用Mindstudio调用Modelarts进行模型训练

这里ssh地址和刚配置的密钥文件可以做为ssh连接的凭证。

接着启动Notebook实例,等待一会就可以打开进入Notebook的工作界面。

Notebook界面操作逻辑跟Jupyter Notebook类似,但功能上更加完善,我们新开一个终端,查看这台机器的信息。

使用Mindstudio调用Modelarts进行模型训练

使用Mindstudio调用Modelarts进行模型训练

可以看到,系统默认进入/home/ma-user/work目录,配置了三个conda环境并且激活了训练使用的pytorch环境。通过这个终端,这台Notebook实例和普通的linux机器使用无异,但需要注意的是,这台实例是没有权限使用apt-get安装软件的,并且所有未保存在work目录下的操作都会丢失,使用pip安装的python软件包也是如此,因此在开发环境建议在work目录新建一个site-packages目录存放自己安装的包,在执行时添加PYTHONPATH为该路径,在5.1节安装依赖时会演示该用法。

5 训练

5.0 模型介绍

RE-GCN是一个在时序知识图谱上,可用于知识补全、知识预测的知识表示学习模型,作者在关系预测、实体预测这两个任务上对ICE18、ICE14、ICE05-15、WIKI、YAGO、GDELT六个数据集进行了实验,实验表明,在常见的六个benchmark上(包括实体预测:rank、mrr、filter_mrr,关系预测:rank_r、mrr_r、filter_mrr_r)都取得了更优的效果。

使用Mindstudio调用Modelarts进行模型训练

代码结构如下:


使用Mindstudio调用Modelarts进行模型训练


使用Mindstudio调用Modelarts进行模型训练


5.1 使用Notebook在线训练

上传代码和数据集

在训练之前确保训练代码和数据集已按照3.2节上传至obs,进入到Notebook工作台后,左边的文件目录是空的,我们需要把代码和数据集从obs中迁移到notebook实例的机器上来,这也是为什么前面提到要让obs和notebook实例创建在同一个区域,这样可以保证在数据量大的情况下,数据集从obs复制到notebook实例中速度不至于难以接受。

点击箭头处上传按钮可以上传文件到Notebook,这里它支持从本地、git、obs、url多种方式上传文件,但上传文件和obs都只支持单个文件,下面介绍另一种方法。

使用Mindstudio调用Modelarts进行模型训练

新建一个jupyter笔记本,执行如下命令:

import moxing as mox
# 把文件从obs拷贝至当前工作目录
mox.file.copy_parallel('obs://modelarts-7805/RE-GCN-code/', './')

文件在obs中的路径可以从obs-browser中获取。

使用Mindstudio调用Modelarts进行模型训练

使用Mindstudio调用Modelarts进行模型训练

执行命令后代码和数据集都会被拷贝到工作目录,接着我们安装python依赖就可以进行训练了。

安装依赖

在本地调试好的代码中,执行:

pip freeze > requirements.txt

torch==1.7.1
torchvision==0.8.2
torchaudio==0.7.2
dgl-cu102==0.4.3
pandas
rdflib

使用Mindstudio调用Modelarts进行模型训练

把生成的依赖文件requirement.txt上传到Notebook实例工作目录下,这里上传的代码已经包含了requirement.txt。

pip install -r requirement.txt --target=/home/ma-user/work/site-packages

执行训练

由于我们安装在了自定义目录,运行时我们需要把该目录添加到PYTHONPATH里,以便自己安装的包能够优先使用。

在main.py最上面添加如下两行:

使用Mindstudio调用Modelarts进行模型训练

import sys
sys.path.insert(0, '/home/ma-user/work/site-packages') #把自定义包添加到PYTHONPATH

进入到脚本目录,执行:

python main.py -d ICEWS05-15 --train-history-len 3 --test-history-len 3 --dilate-len 1 --lr 0.001 --n-layers 2 --evaluate-every 1 --gpu=0 --n-hidden 200 --self-loop --decoder convtranse --encoder uvrgcn --layer-norm --weight 0.5 --entity-prediction --relation-prediction --add-static-graph --angle 10 --discount 1 --task-weight 0.7 --gpu 0

展开及部分参数解释如下:

python main.py \
-d ICEWS05-15 \
--train-history-len 3 \ #训练历史步长
--test-history-len 3 \
--dilate-len 1 \
--lr 0.001 \ #学习率
--n-layers 2 \ #图卷积层数
--evaluate-every 1 \ #评估间隔,每X个epoch
--gpu=0 \
--n-hidden 200 \ #隐藏层特征维度
--self-loop \ #是否启用残差连接
--decoder convtranse \ #解码器
--encoder uvrgcn \ #编码器
--layer-norm \ #是否启用层正则化
--weight 0.5 \
--entity-prediction \
--relation-prediction \
--add-static-graph \ #是否融合静态图信息
--angle 10 \ #evolutional embedding和static embedding角度约束
--discount 1 \
--task-weight 0.7 \
--gpu 0

使用Mindstudio调用Modelarts进行模型训练

经过一个小时训练之后,在数据集ICEWS05-15上已经接近论文中水平了。

5.2 本地连接Notebook训练

打开mindstudio,我们选择从本地打开训练项目

下面我们将在mindstudio上使用ssh连接Notebook实例进行训练。

配置Python解释器

依次点击file>project structure>SDKs

使用Mindstudio调用Modelarts进行模型训练

点击图示加号,添加python SDK

使用Mindstudio调用Modelarts进行模型训练

我们选择最后一个SSH Interpreter,这里首先需要创建一个Deploy,Deploy用于将本地项目部署到服务器上运行,点击箭头处三个点。

使用Mindstudio调用Modelarts进行模型训练

第一次进来deployment列表是空的,点击加号新建一个deploy。

使用Mindstudio调用Modelarts进行模型训练

这里有connection和Mappings需要配置,connection为远程ssh连接,Mapping指项目部署到远端的路径映射,先在connection配置ssh连接,点击箭头处进入ssh配置页。

使用Mindstudio调用Modelarts进行模型训练

连接Notebook实例的ssh账号见4.2Notebook使用介绍。

使用Mindstudio调用Modelarts进行模型训练

ssh://ma-user@dev-modelarts-cneast3.huaweicloud.com:端口号

秘钥文件选择创建Notebook时绑定的秘钥。

配置ssh连接后,接着配置文件上传的目录映射mappings。

使用Mindstudio调用Modelarts进行模型训练

这里左边选择默认的项目根目录即可,右边建议选择到work目录,否则Notebook重启后,上传的文件会被全部删除。

点击确认后,Interpreter的路径一般就自动配置好了,如果没有,请自行选择python路径。

使用Mindstudio调用Modelarts进行模型训练

依次点击确认,接着我们配置项目全局SDK为刚才创建的Remote Python解释器。

使用Mindstudio调用Modelarts进行模型训练

配置Python解释器完。

上传代码和数据集

右键选择项目文件夹,点击Deployment,上传至Notebook实例。

这里可先将不需要的文件进行排除,右键目录 Mark Directory为Excluded。

使用Mindstudio调用Modelarts进行模型训练

等待上传完成就可以进行训练了。

安装依赖

同Notebook在线训练,需要先解决python依赖问题,在菜单栏tools>Start SSH session,开启一个终端。

使用Mindstudio调用Modelarts进行模型训练

依次执行:

pip install -r requirement.txt --target=/home/ma-user/work/site-packages

执行训练

找到可执行文件main.py,右键选择 Modify Run Configuration。

使用Mindstudio调用Modelarts进行模型训练

在Parameters配置训练运行的相关参数:

使用Mindstudio调用Modelarts进行模型训练

-d ICEWS05-15 --train-history-len 3 --test-history-len 3 --dilate-len 1 --lr 0.001 --n-layers 2 --evaluate-every 1 --gpu=0 --n-hidden 200 --self-loop --decoder convtranse --encoder uvrgcn --layer-norm --weight 0.5 --entity-prediction --relation-prediction --add-static-graph --angle 10 --discount 1 --task-weight 0.7 --gpu 0

最后点击运行,等待训练完成。

5.3 使用Moxing获取数据

在上面的训练中,我们提前把数据集从obs拷贝到了Notebook实例中,这个操作其实是不需要的,也并不符合实际应用。例如,在cv任务中,一些数据集动辄几十上百个G,而notebook实例默认存储空间仅为50个G,在这样的训练任务中,我们是无法事先把数据集全部拷贝到Notebook实例中的,这一点modelarts设计者早有考量。

在Modelarts的开发环境中,已经为开发者安装了Moxing Framework模块,moxing framework提供一系列的基础公共组件。其中包括了访问华为云OBS服务的组件moxing.file,通过moxing.file,你可以任意操作obs中的文件。并且可以把python内置包OS中的API自动映射到mox.file中的API,做到和python原生代码写法一致。

import moxing as mox
mox.file.shift('os', 'mox')

按照上面的代码引入moxing之后,对OBS中文件的读写就跟访问本机存储一样简单。

import os
import moxing as mox
mox.file.shift('os', 'mox')
print(os.listdir('obs://bucket_name'))
with open('obs://bucket_name/hello_world.txt') as f:
print(f.read())

我们在OBS桶中,新建RE-GCN-data和RE-GCN-output两个目录,前者用来存放数据集,需要把项目根目录下data-release里面的数据集文件上传该目录下。后者用来存放模型训练保存的模型文件。上传后目录结构如下:

使用Mindstudio调用Modelarts进行模型训练

接着修改代码中加载数据和保存模型的方式,仅三处需要更改:

  1. 在src/main.py下添加两个参数,分别用于指定数据集路径和模型输出路径。
使用Mindstudio调用Modelarts进行模型训练

parser.add_argument('--train_url', type=str,
help='the path model saved')
parser.add_argument('--data_url', type=str, help='the training data')

2.修改数据集加载方式。

在rgcn/utils.py中load_data方法添加一个OBS_DATA_PATH参数,加载路径使用OBS中的路径拼接。

使用Mindstudio调用Modelarts进行模型训练

由于这里访问的是OBS中路径,在最前面包导入处添加一键切换的代码。

使用Mindstudio调用Modelarts进行模型训练

最后在main函数调用load_data处添加外部传入的data_url参数。

使用Mindstudio调用Modelarts进行模型训练

3.修改模型保存的路径。

在main函数中引入moxing,pytorch保存模型后,通过moxing把模型checkpoint复制到OBS的模型输出目录。

try:
import moxing as mox
except:
print('not use moxing')

使用Mindstudio调用Modelarts进行模型训练

修改完后,再次训练时无需把数据集从OBS拷贝到Notebook实例上来,moxing.file会自动按需把文件读入内存,只要Notebook实例和OBS桶在同一个区域,训练中基本不会感受到文件传输的延迟。

在上述在线训练和本地连接Notebook训练时,额外传入两个参数即可。

示例:

--train_url=obs://modelarts-XXXX/RE-GCN-output/ --data_url=obs://modelarts-XXXX/RE-GCN-data/

6.FAQ

  • Mindstudio可以使用Modelarts EI插件吗?
  • 目前版本还没有适配,官方仅提供了pycharm和Vscode版本。
  • 训练时导入dgl报错
  • dgl需要安装gpu版本,具体版本从dgl官方网站根据python版本和cuda版本选择。
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章