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进行编程时如果一台机器上有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台计算节点。
- 点赞
- 收藏
- 关注作者
评论(0)