ModelArts训练作业快速入门与最佳使用指引

举报
星月菩提 发表于 2020/04/18 14:50:06 2020/04/18
【摘要】 Modelarts 数据准备,如何创建训练作业,如何创建分布式作业,性能提升指引,专属资源池使用

1.登录华为云

根据华为提供的账户和密码,登录华为云控制台。

华为云网址: https://auth.huaweicloud.com/authui/login.html#/login

登录华为云控制台后,在左上角选择区域:北京四

在服务列表中选择:EI企业智能->ModelArts

如下图所示:


2.准备OBS桶

在华为云控制台点击服务列表选择:存储->对象存储服务OBS

在对象存储服务OBS控制台,点击:创建桶,即可创建本次POC所需要的一个或多个桶,用于存放训练数据、训练脚本、训练结果、日志等各种文件。

请参考 https://support.huaweicloud.com/qs-obs/obs_qs_1000.html


3. ModelArts训练作业使用指引

3.1 训练作业介绍

https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0046.html


3.2 训练作业案例

https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0003.html


3.3 Moxing文档


https://github.com/huaweicloud/ModelArts-Lab/blob/master/docs/moxing_api_doc/MoXing_API_File.md

3.4 Tensorflow分布式训练作业介绍

方法一:

使用Moxing API进行编程,例子程序如下,Moxing对tf接口进行了进一步封装,会自动处理分布式逻辑传入的参数。

https://github.com/huaweicloud/ModelArts-Lab/blob/master/docs/moxing_api_doc/MoXing_API_Flowers.md


方法二:

自己代码对分布式传参进行处理。

以下四个参数是TensorFlow推荐的分布式运行参数,具体可以参考TensorFlow官方文档


--job_name: ps或worker

--task_index: ps或worker进程的序号,一般情况下task_index为0的worker为chief worker (也可以认为是master节点,master节点在物理上并不存在,是一个逻辑节点)

--ps_hosts: ps的ip和端口,多个节点以,分割。

--worker_hosts: worker的ip和端口,多个节点以,分割。



例如,启动一个2个节点的训练作业,分布式作业启动脚本参数配置如下:


# 节点0启动ps进程参数(对应IP地址为192.168.1.100)

--job_name=ps

--task_index=0

--ps_hosts=192.168.1.100:2222,192.168.1.101:2222

--worker_hosts=192.168.1.100:2223,192.168.1.101:2223

 

# 节点0启动worker进程参数(对应IP地址为192.168.1.100)

--job_name=worker

--task_index=0

--ps_hosts=192.168.1.100:2222,192.168.1.101:2222

--worker_hosts=192.168.1.100:2223,192.168.1.101:2223

--num_gpus=4

 

# 节点1启动ps进程参数(对应IP地址为192.168.1.101)

--job_name=ps

--task_index=1

--ps_hosts=192.168.1.100:2222,192.168.1.101:2222

--worker_hosts=192.168.1.100:2223,192.168.1.101:2223

 

# 节点1启动ps进程参数(对应IP地址为192.168.1.101)

--job_name=worker

--task_index=1

--ps_hosts=192.168.1.100:2222,192.168.1.101:2222

--worker_hosts=192.168.1.100:2223,192.168.1.101:2223

--num_gpus=4

3.5 Pytorch分布式作业介绍

方法一:使用mox接口进行pytorch分布式编程,参考文档

使用mox进行编程时如果一台机器上有8gpu,但是用户只想使用4gpu,可以在代码中添加os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2,3'进行gpu数量的控制。下面图片同时保存在了附件中

方法二:

自己对于分布式参数进行处理,分布式依赖的参数都会通过入参传入到脚本中,用户通过对这些参数的使用完成多节点组网

3.6 性能提升指引

<场景>

用户A使用Modelarts进行自定义深度学习训练,训练数据存储在对象存储OBS上,训练数据一共有200GB,用户每次使用GPU资源池进行训练。用户希望提升训练效率,同时较少与对象存储OBS的交互,(每次与OBS的交互都要收取一定的费用)。

 

<优化原理>

对于GPU资源池,每个训练节点会挂载NVMe类型SSD提供给用户免费使用,每张GPU卡对应500GB的存储空间,如果是8卡v100,就有4TB的免费SSD使用。此SSD挂载到/cache目录,/cache目录下面的数据生命周期与训练作业生命周期相同,当训练作业运行结束以后/cache目录下面所有内容会被清空,腾出空间,供下一次训练作业使用。因此用户可以在训练过程中将数据从对象存储的OBS上拷贝到/cache目录下,然后每次从/cache目录下读取数据,直到训练结束。训练结束以后/cache下内容会自动被清空。

从/cache中读取数据在600MB/s,这个速度要快于从OBS上读取数据,因此可以减少训练时数据读取的时间,提升训练效率。


<优化方式>

以tensorflow代码为例

用户在页面选择数据存储位置为'/cnnorth4/example/data'


优化前代码如下:

...
tf.flags.DEFINE_string('data_url', '', 'dataset directory.')
FLAGS = tf.flags.FLAGS
mnist = input_data.read_data_sets(FLAGS.data_url, one_hot=True

优化后:

...
tf.flags.DEFINE_string('data_url', '', 'dataset directory.')
FLAGS = tf.flags.FLAGS
import moxing as mox
TMP_CACHE_PATH = '/cache/data'
mox.file.copy_parallel(FLAGS.data_url, TMP_CACHE_PATH)
mnist = input_data.read_data_sets(TMP_CACHE_PATH, one_hot=True

对比视图如下(下面图片同时也保存在附件中):


数据的下载

模型的保存与上传

Moxing介绍 https://github.com/huaweicloud/ModelArts-Lab/tree/master/docs/moxing_api_doc

Moxing 文件接口  https://github.com/huaweicloud/ModelArts-Lab/blob/master/docs/moxing_api_doc/MoXing_API_File.md

3.7 如何使用专属资源池进行训练

选择创建训练作业:


配置训练作业,选择专属资源池,计算节点为2代表分布式作业使用2台计算节点。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。