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

网友投稿 877 2022-05-29

1.登录华为云

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

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

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

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

如下图所示:

2.准备OBS桶

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

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

在对象存储服务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进行编程时如果一台机器上有8个gpu,但是用户只想使用4个gpu,可以在代码中添加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台计算节点。

附件: screenshot.zip 231.64KB 下载次数:8次

TensorFlow

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:html总结
下一篇:H5微应用JSAPI We码小程序跳转
相关文章