华为云AI开发平台ModelArts使用自定义镜像创建训练作业(CPU/GPU)_云淘科技

模型训练是一个不断迭代和优化的过程。在训练模块的统一管理下,方便用户试验算法、数据和超参数的各种组合,便于追踪最佳的模型与输入配置,您可以通过不同版本间的评估指标比较,确定最佳训练作业。

前提条件

已将用于训练的数据上传至OBS目录。
已在OBS创建至少1个空的文件夹,用于存储训练输出的内容。
已按照ModelArts规范制作自定义镜像包,自定义镜像包规范请参见训练作业自定义镜像规范。
已将自定义镜像上传至SWR服务,操作指导可参见如何登录并上传镜像到SWR。

创建训练作业

登录ModelArts管理控制台,在左侧导航栏中选择“训练管理 > 训练作业”,进入“训练作业”列表。
单击“创建训练作业”,进入“训练作业”页面,填写训练作业相关参数。关键参数解释见表1。

表1 作业参数说明

参数名称

说明

创建方式

必选,选择“自定义算法”。

如果已经在“算法管理”中创建完成基于自定义镜像的算法,此处也可以在“我的算法”中直接选择创建好的算法。

启动方式

必选,选择“自定义”。

镜像地址

必选。容器镜像地址。

自有镜像或他人共享的镜像:单击右边的“选择”,可以从SWR服务选择用户的容器镜像,前提是要先上传镜像到SWR中。
公开镜像:支持手动输入SWR上的公开镜像地址(/),地址上不需要带域名信息(swr..xxx.com),系统会自动拼接域名地址。例如:

modelarts-job-dev-image/pytorch_1_8:train-pytorch_1.8.0-cuda_10.2-py_3.7-euleros_2.10.1-x86_64-8.1.1

代码目录

可选,训练代码存储的OBS路径。

以OBS路径“obs://obs-bucket/training-test/demo-code”为例,训练代码会被自动下载至训练容器的“${MA_JOB_DIR}/demo-code”目录中,demo-code为OBS存放代码路径的最后一级目录,可以根据实际修改。

启动命令

必选,镜像的启动命令。在代码目录下载完成后,运行命令会被自动执行。

如果训练启动脚本用的是py文件,例如train.py,运行命令可以写为python ${MA_JOB_DIR}/demo-code/train.py
如果训练启动脚本用的是sh文件,例如main.sh,运行命令可以写为bash ${MA_JOB_DIR}/demo-code/main.sh

其中demo-code为OBS存放代码路径的最后一级目录,可以根据实际修改。

本地代码目录

允许用户指定训练容器的本地目录,启动训练时,系统会将代码目录下载至此目录。

此参数可选,默认本地代码目录为“/home/ma-user/modelarts/user-job-dir”。

工作目录

训练容器中启动文件所在的目录,训练作业启动前会自动cd到此目录下。

训练输入-参数名称

建议设置为data_url。和训练代码中解析输入数据的参数保持一致。此处可以设置多条训练输入参数。训练输入参数名称不可以重名。例如:car_data_url、dog_data_url、cat_data_url。

例如您的训练代码中使用argparse解析data_url为输入数据超参,则在此处需要配置输入数据代码参数名称为data_url。

import argparse
# 创建解析
parser = argparse.ArgumentParser(description="train mnist", formatter_class=argparse.ArgumentDefaultsHelpFormatter)
# 添加参数
parser.add_argument('--train_url', type=str, help='the path model saved')
parser.add_argument('--data_url', type=str, help='the training data')
# 解析参数
args, unknown = parser.parse_known_args()

训练输入-数据存储位置

选择“数据集”或“数据存储位置”作为训练输入。数据存储位置请选择OBS数据存储位置作为训练输入。

训练启动时,会下载数据至训练容器中。

以OBS 路径obs://obs-bucket/training-test/data为例,数据会被自动下载至训练容器的 “${MA_MOUNT_PATH}/inputs/${data_url}_N”目录中,N取值为训练输入参数个数减去1。

例如:

只有一条训练输入参数data_url时,数据会被自动下载至训练容器的“${MA_MOUNT_PATH}/inputs/data_url_0/”路径。
如果训练输入参数设置有多条,训练输入参数名称分别为car_data_url,dog_data_url,cat_data_url,则训练数据会被下载到容器的目录分别为“${MA_MOUNT_PATH}/inputs/car_data_url_0/”、“${MA_MOUNT_PATH}/inputs/dog_data_url_1/”、“${MA_MOUNT_PATH}/inputs/cat_data_url_2/”。

训练输出-参数名称

建议设置为train_url。和训练代码中解析输出数据的参数保持一致。此处也可以设置多条训练输出参数。训练输出参数名称不可以重名。

训练输出-数据存储位置

请选择OBS目录作为训练输出。为避免出现错误,建议选择一个空目录用作“训练输出”。

训练容器“${MA_MOUNT_PATH}/outputs/${train_url}_N/”中的训练结果文件会自动上传到OBS的“obs://obs-bucket/training-test/output”目录下。N取值为训练输出参数个数减去1。

例如:

只有一条训练输出参数train_url时,训练容器的路径为“${MA_MOUNT_PATH}/outputs/data_url_0/”。
如果训练输出参数设置有多条,例如,训练输出参数名称分别为car_train_url,dog_train_url,cat_train_url,训练输出数据的容器目录分别为“${MA_MOUNT_PATH}/outputs/car_train_url_0/”、“${MA_MOUNT_PATH}/outputs/dog_train_url_1/”、“${MA_MOUNT_PATH}/outputs/cat_train_url_2/”。

训练输出-获取方式

以参数名称为train_url的训练输出为例,说明获取方式的作用。

当参数的获取方式为超参时,代码中可以参考如下代码来读取。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--train_url')
args, unknown = parser.parse_known_args()
train_url = args.train_url 

当参数的获取方式为环境变量时,代码中可以参考如下代码来读取。

import os
train_url = os.getenv("train_url", "")

训练输出-预下载至本地目录

选择预下载至本地目录时,系统在训练作业启动前,自动将训练输出数据存储位置中的文件下载到训练容器本地目录。

断点续训练和增量训练需要选择“下载”。

超参

可选,超参用于训练调优。

环境变量

容器启动后,系统会加载一些默认的环境变量和用户在此处自行设置的“环境变量”。

系统默认提供的环境变量如表2所示,请了解。

故障自动重启

可选。打开开关后,可以设置训练故障重启次数。

表2 系统默认加载的环境变量说明

环境变量

说明

MA_JOB_DIR

代码目录的父目录

MA_MOUNT_PATH

训练输入和训练输出目录的父目录

VC_TASK_INDEX

当前容器索引,容器从0开始编号。单机训练的时候,该字段无意义。在多机作业中,用户可以根据这个值来确定当前容器运行的算法逻辑。

VC_WORKER_HOSTS

节点通信域名列表(多个节点域名通过逗号连接)。例如:

单节点:”${MA_VJ_NAME}-${MA_TASK_NAME}-0.${MA_VJ_NAME}”
两节点:”${MA_VJ_NAME}-${MA_TASK_NAME}-0.${MA_VJ_NAME},${MA_VJ_NAME}-${MA_TASK_NAME}-1.${MA_VJ_NAME}”

MA_NUM_HOSTS

计算节点个数。系统自动从资源参数的“计算节点个数”中读取。

MA_NUM_GPUS

节点的 GPU 个数。

${MA_VJ_NAME}-${MA_TASK_NAME}-N.${MA_VJ_NAME}

表示不同节点的通信域名,例如0号节点的通信域名为”${MA_VJ_NAME}-${MA_TASK_NAME}-0.${MA_VJ_NAME}”。

N表示计算节点个数,例如:计算节点个数为4时,此环境变量分别为:

“${MA_VJ_NAME}-${MA_TASK_NAME}-0.${MA_VJ_NAME}”、

“${MA_VJ_NAME}-${MA_TASK_NAME}-1.${MA_VJ_NAME}”、

“${MA_VJ_NAME}-${MA_TASK_NAME}-2.${MA_VJ_NAME}”、

“${MA_VJ_NAME}-${MA_TASK_NAME}-3.${MA_VJ_NAME}”。

选择训练资源的规格。训练参数的可选范围与已有自定义镜像的使用约束保持一致。

表3 资源参数说明

参数名称

说明

资源池

选择训练作业资源池。支持“公共资源池”和“专属资源池”。

如果选择专属资源池,您可以查看当前专属资源池节点个数详情以及卡数详情。如果资源类型可用卡数不足,作业可能需要排队,您可以更换资源或者减少规格卡数。

说明:

如果您需要更换专属资源池中已打通的VPC,需要在专属资源池中重新选择配置VPC和子网,具体操作请参见打通VPC。

资源类型

可选CPU、GPU、Ascend。根据实际训练代码中定义的资源类型选择。

规格

针对不同的资源类型,选择资源规格。如果训练代码中已定义资源类型,根据已有算法约束条件,您可以在有效规格内选择合适的资源规格,无效选项置灰不可选。例如:训练代码中设置为GPU,这里选为CPU时,可能会导致训练失败。

ModelArts支持使用Snt9创建训练作业,且此资源仅在“华北-北京四”可用。

训练时,ModelArts会挂载高速固态硬盘(NVME SSD)至“/cache”目录,用户可以使用此目录来储存临时文件。不同的资源类型的数据盘容量是不同的,您可以单击右侧的“获取输入数据大小”,检查输入数据大小是否超出数据盘容量限制,避免训练过程中出现内存不足的情况。

计算节点个数

选择计算节点的个数。默认值为“1”。

作业优先级

使用专属资源池(New)训练时,允许用户设置训练作业的优先级。取值为1~3,默认优先级为1,最高优先级为3。

训练作业处于“等待中”状态时,允许用户修改作业优先级。

SFS Turbo

使用专属资源池训练时,训练作业支持挂载多个云存储盘(NAS)。

相同的盘只能挂载1次,且1个盘只能对应1个挂载路径,挂载路径不可以重复。最多可以挂载8个盘。

永久保存日志

选择CPU或者GPU资源时,可以选择是否打开“永久保存日志”开关。

“永久保存日志”开关默认关闭,训练日志30天后会被清理,此时可以在作业详情页下载全部日志至本地。

打开“永久保存日志”开关后,可以保存训练日志至指定OBS路径。此时需要设置“作业日志路径”,建议选择一个空的OBS文件目录存放运行中产生的日志文件,同时选择的OBS文件目录需要有读写权限。

“作业日志路径”

选择Ascend资源时,默认需要设置OBS存储路径,用于存放训练作业产生的日志文件。建议选择一个空的OBS文件目录存放运行中产生的日志文件,同时选择的OBS文件目录需要有读写权限。

“事件通知”

订阅事件通知服务。您可以根据业务实际情况设置是否打开事件通知开关,开启事件通知后发生特定事件(如作业状态变化或疑似卡死)后会发送短信、邮件等。

如果打开事件通知开关,请根据实际情况填写如下参数。

“主题名”:事件通知的主题名称。您可以单击创建主题,在消息通知服务中创建主题。
“事件”:订阅的事件类型。支持“作业开始”、“作业结束”、“作业失败”、“作业终止”和“作业疑似卡死”5种事件。

说明:

在消息通知服务中创建的主题,需要为主题添加订阅,订阅添加成功后方可收到事件通知。订阅主题的详细操作请参见添加订阅。
使用事件通知服务会产生相关服务费用,详细信息请参见计费说明
目前只有资源类型为“GPU”的训练作业才支持“作业疑似卡死”事件。

“自动停止”

使用付费资源时会出现此参数。

启用该参数并设置时间后,训练作业将在指定时间自动停止。
如果不启用此参数,训练作业将一直运行,同时一直收费,自动停止功能可以帮您避免产生不必要的费用。
自动停止时间支持设置为“1小时”、“2小时”、“4小时”、6小时、“自定义”,自定义时间取值范围为1~72小时。

单击“提交”,完成训练作业的创建。

训练作业一般需要运行一段时间。

要查看训练作业实时情况,您可以前往训练作业列表,单击训练作业的名称,进入训练作业详情页,查看训练作业的基本情况,具体请参考查看作业详情。

父主题: 使用自定义镜像训练模型(新版训练)

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家