本文介绍如何使用MindStudio调用ModelArts资源进行模型训练。ModelArts是面向AI开发者的一站式开发平台,帮助用户快速创建和部署模型,管理全周期AI工作流。它集成了Jupyter Notebook,为AI开发者提供在线的交互式开发调试工具。开发者通过创建开发环境,可以自行编写和调测模型训练代码,然后基于该代码进行模型训练。MindStudio提供了在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助开发者在一个工具上就能高效便捷地完成AI应用开发。
本文内容涵盖:ModelArts功能介绍;OBS服务使用;在ModerArts平台上创建Notebook实例;连接Notebook实例对模型进行训练。
配套视频链接:使用Mindstudio连接ModelArts资源进行模型训练_哔哩哔哩_bilibili
鼠标移动到控制台右上角用户名的位置,点击我的凭证,可以创建访问密钥。
我的凭证创建
创建访问密钥后可以下载得到一个credentials.csv文件,里面是连接账号的凭证。在后面连接obs和Notebook实例均会用到。
安装MindStudio之前需要安装环境依赖,具体安装细节参考以下链接:
MindStudio安装指南:简介_MindStudio 版本:3.0.4_安装指南_华为云
注册完成后通过以下顺序进入到ModelArts界面,或者直接点击链接ModelArts
点击管理控制台,进入到ModelArts界面,下面简单介绍modelarts的几个功能。
2.数据管理
3.开发环境
4.算法管理
5.训练管理
6.AI应用管理
7.部署上线
对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,在模型训练前,我们需要把训练用的数据集存放在obs中。按如下几个步骤操作。
从控制台左上角的服务列表 找到对象存储服务OBS,点击进入。如果是第一次使用obs,会出现是否开启obs服务的选项,点击确认即可。
进入到obs服务控制面板,首先点击①桶列表,第一次进来桶列表是空的,点击②创建桶,
依次按要求填写桶的相关配置信息,除了红字部分,其他选择默认即可。最后点击立即创建。
创建之后桶名称出现在桶列表中表示创建成功。
obs-browser是华为提供用于管理obs的客户端,点击下载链接,选择合适的版本,下载安装。
这里选择windows 64位版本,安装后打开,登录界面如下:
使用2.2获得的访问凭证登录或华为云账号登录。
登录进入obs-brower主界面,obs-browser可以更方便地管理桶,进行文件上传与删除等操作。
点击进入刚才创建的桶,把训练代码和数据集从本地上传到OBS桶中,这里已经把本地调试好的训练代码和数据集上传了。
Notebook实例就是一台linux服务器,可以等同于ECS使用。不同之处在于:
在ModelArts控制台,
第一步:进入到ModelArts中开发环境 -> Notebook,点击创建按钮。
第二步:根据自己的需求进行选择配置,这里需要添加SSH服务,方便后面通过Mindstudio连接使用。
这里已经有密钥对了,如果没有则需要点击“立即创建”,创建完成后会自动下载KeyPair文件。这个文件需要保存下来,是连接Notebook实例的密钥。
创建后点击Notebook的名称可以查看Notebook的配置信息:
这里ssh地址和刚配置的密钥文件可以做为ssh连接的凭证。
接着启动Notebook实例,等待一会就可以打开进入Notebook的工作界面。
Notebook界面操作逻辑跟Jupyter Notebook类似,但功能上更加完善,我们新开一个终端,查看这台机器的信息。
可以看到,系统默认进入/home/ma-user/work目录,配置了三个conda环境并且激活了训练使用的pytorch环境。通过这个终端,这台Notebook实例和普通的linux机器使用无异,但需要注意的是,这台实例是没有权限使用apt-get安装软件的,并且所有未保存在work目录下的操作都会丢失,使用pip安装的python软件包也是如此,因此在开发环境建议在work目录新建一个site-packages目录存放自己安装的包,在执行时添加PYTHONPATH为该路径,在5.1节安装依赖时会演示该用法。
RE-GCN是一个在时序知识图谱上,可用于知识补全、知识预测的知识表示学习模型,作者在关系预测、实体预测这两个任务上对ICE18、ICE14、ICE05-15、WIKI、YAGO、GDELT六个数据集进行了实验,实验表明,在常见的六个benchmark上(包括实体预测:rank、mrr、filter_mrr,关系预测:rank_r、mrr_r、filter_mrr_r)都取得了更优的效果。
代码结构如下:
在训练之前确保训练代码和数据集已按照3.2节上传至obs,进入到Notebook工作台后,左边的文件目录是空的,我们需要把代码和数据集从obs中迁移到notebook实例的机器上来,这也是为什么前面提到要让obs和notebook实例创建在同一个区域,这样可以保证在数据量大的情况下,数据集从obs复制到notebook实例中速度不至于难以接受。
点击箭头处上传按钮可以上传文件到Notebook,这里它支持从本地、git、obs、url多种方式上传文件,但上传文件和obs都只支持单个文件,下面介绍另一种方法。
新建一个jupyter笔记本,执行如下命令:
import moxing as mox
# 把文件从obs拷贝至当前工作目录
mox.file.copy_parallel('obs://modelarts-7805/RE-GCN-code/', './')
文件在obs中的路径可以从obs-browser中获取。
执行命令后代码和数据集都会被拷贝到工作目录,接着我们安装python依赖就可以进行训练了。
在本地调试好的代码中,执行:
pip freeze > requirements.txt
torch==1.7.1
torchvision==0.8.2
torchaudio==0.7.2
dgl-cu102==0.4.3
pandas
rdflib
把生成的依赖文件requirement.txt上传到Notebook实例工作目录下,这里上传的代码已经包含了requirement.txt。
pip install -r requirement.txt --target=/home/ma-user/work/site-packages
由于我们安装在了自定义目录,运行时我们需要把该目录添加到PYTHONPATH里,以便自己安装的包能够优先使用。
在main.py最上面添加如下两行:
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
经过一个小时训练之后,在数据集ICEWS05-15上已经接近论文中水平了。
打开mindstudio,我们选择从本地打开训练项目
下面我们将在mindstudio上使用ssh连接Notebook实例进行训练。
依次点击file>project structure>SDKs
点击图示加号,添加python SDK
我们选择最后一个SSH Interpreter,这里首先需要创建一个Deploy,Deploy用于将本地项目部署到服务器上运行,点击箭头处三个点。
第一次进来deployment列表是空的,点击加号新建一个deploy。
这里有connection和Mappings需要配置,connection为远程ssh连接,Mapping指项目部署到远端的路径映射,先在connection配置ssh连接,点击箭头处进入ssh配置页。
连接Notebook实例的ssh账号见4.2Notebook使用介绍。
ssh://ma-user@dev-modelarts-cneast3.huaweicloud.com:端口号
秘钥文件选择创建Notebook时绑定的秘钥。
配置ssh连接后,接着配置文件上传的目录映射mappings。
这里左边选择默认的项目根目录即可,右边建议选择到work目录,否则Notebook重启后,上传的文件会被全部删除。
点击确认后,Interpreter的路径一般就自动配置好了,如果没有,请自行选择python路径。
依次点击确认,接着我们配置项目全局SDK为刚才创建的Remote Python解释器。
配置Python解释器完。
右键选择项目文件夹,点击Deployment,上传至Notebook实例。
这里可先将不需要的文件进行排除,右键目录 Mark Directory为Excluded。
等待上传完成就可以进行训练了。
同Notebook在线训练,需要先解决python依赖问题,在菜单栏tools>Start SSH session,开启一个终端。
依次执行:
pip install -r requirement.txt --target=/home/ma-user/work/site-packages
找到可执行文件main.py,右键选择 Modify Run Configuration。
在Parameters配置训练运行的相关参数:
-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
最后点击运行,等待训练完成。
在上面的训练中,我们提前把数据集从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里面的数据集文件上传该目录下。后者用来存放模型训练保存的模型文件。上传后目录结构如下:
接着修改代码中加载数据和保存模型的方式,仅三处需要更改:
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中的路径拼接。
由于这里访问的是OBS中路径,在最前面包导入处添加一键切换的代码。
最后在main函数调用load_data处添加外部传入的data_url参数。
3.修改模型保存的路径。
在main函数中引入moxing,pytorch保存模型后,通过moxing把模型checkpoint复制到OBS的模型输出目录。
try:
import moxing as mox
except:
print('not use moxing')
修改完后,再次训练时无需把数据集从OBS拷贝到Notebook实例上来,moxing.file会自动按需把文件读入内存,只要Notebook实例和OBS桶在同一个区域,训练中基本不会感受到文件传输的延迟。
在上述在线训练和本地连接Notebook训练时,额外传入两个参数即可。
示例:
--train_url=obs://modelarts-XXXX/RE-GCN-output/ --data_url=obs://modelarts-XXXX/RE-GCN-data/
留言与评论(共有 0 条评论) “” |