华为云AI开发平台ModelArts使用自定义镜像训练模型(Ascend)_云淘科技

如果 Ascend-Powered-Engine 常用框架无法满足您的需求,您可以将算法构建为一个自定义镜像,通过自定义镜像创建训练作业。

基于自定义镜像训练模型仅适用于旧版训练模块(仅对部分存量用户可见,新用户不可见),新版训练请参见使用自定义镜像训练模型(新版训练)。

前提条件

数据已完成准备:已在ModelArts中创建可用的数据集,或者您已将用于训练的数据集上传至OBS目录。
如果“算法来源”为“自定义”,请完成镜像制作,自定义镜像制作规范参见训练作业自定义镜像规范。
制作完成的自定义镜像需上传至SWR服务,请参考“《容器镜像服务用户指南》>镜像管理>客户端上传镜像”。
已在OBS创建至少1个空的文件夹,用于存储训练输出的内容。
确保您使用的OBS目录与ModelArts在同一区域。

注意事项

训练作业指定的数据集目录中,用于训练的数据名称(如图片名称、音频文件名、标注文件名称等),名称长度限制为0~255英文字符。如果数据集目录下,部分数据的文件名称超过255英文字符,训练作业将不会使用此数据,使用符合要求的数据继续进行训练。如果数据集目录下,所有数据的文件名称都超过了255英文字符,导致训练作业无数据可用,则会最终导致训练作业失败。
训练脚本中,“数据来源”、“训练输出位置”,两个参数必须为OBS路径。当需要对路径中进行读写交互时,建议使用MoXing接口进行读写操作。

创建训练作业

进入ModelArts管理控制台,参考创建训练作业操作指导,创建训练作业。在使用自定义镜像创建作业时,需关注“算法来源”、“环境变量”和“资源池”参数的设置。

您需要特别关注以下作业参数的设置:

“镜像地址”

镜像上传到SWR后生成的地址。

图1 SWR镜像地址

“运行命令”

若使用 ModelArts Ascend 基础镜像,运行命令参考如下:

/bin/bash /home/work/run_train.sh ${obs-code-path} ${the-base-name-of-obs-code-path}/${boot-file} '/tmp/log/train.log' ${python_file_parameter}

run_train.sh 为ModelArts提供的启动脚本,可自动完成OBS代码路径下载至本地、Ascend HCCL RANK_TABLE_FILE v0.1 格式转 v1.0 格式、多P训练进程拉起功能,详细描述请参见适用于Ascend芯片基础镜像。

“obs-code-path”: OBS 代码路径,例如 obs://training-bucket/ascend-tf-1.15/resnet50/
“the-base-name-of-obs-code-path”: OBS 代码路径的最后一级目录,例如 resnet50
“boot-file”: 以 .py 结尾的训练启动文件,例如 train.py
‘/tmp/log/train.log’: 默认值,日志重定向至该文件
“python_file_parameter”: 传入训练启动文件的参数,例如 –param1=value1 –param2=value2

运行命令示例:

/bin/bash /home/work/run_train.sh 'obs://training-bucket/ascend-tf-1.15/resnet50/' 'resnet50/train.py' '/tmp/log/train.log' --'data_url'='obs://training-bucket/cifar-10/' --'train_url'='obs://training-bucket/model/'

“环境变量”

表1 必选环境变量说明

环境变量

说明

RANK_TABLE_FILE

该参数可以指定“jobstart_hccl.json” 文件的生成路径。

建议配置为 /user/config,则“jobstart_hccl.json ”文件路径为“/user/config/jobstart_hccl.json”。

算法开发者自行开发启动脚本时,可通过 “${RANK_TABLE_FILE}/jobstart_hccl.json”,获取文件。“jobstart_hccl.json”是 v0.1 版本的,用于分布式通信,会在运行过程中被Ascend芯片的集合通信库解析。

若未添加上述环境变量,则系统不会生成 RANK TABLE FILE,训练作业日志会停留在

Wait for Rank table file ready

容器启动后,除了用户在训练作业中自行增加的“环境变量”外,其它加载的环境变量如表2所示。用户可以根据需求来确认在自己训练脚本的python中是否要使用这些环境变量,也可以通过运行命令中的“{python_file_parameter}”传入相关参数。

表2 可选环境变量说明

环境变量

说明

DLS_TASK_INDEX

当前容器索引,容器从0开始编号。

DLS_TASK_NUMBER

容器总数。对应“计算节点个数”。

DLS_APP_URL

代码目录。对应界面上“代码目录”配置,会加上协议名。比如,可直接使用“$DLS_APP_URL/*.py”来读取OBS下的文件。

DLS_DATA_URL

数据集位置。对应界面上“数据来源”,会加上协议名。

DLS_TRAIN_URL

训练输出位置。对应界面上“训练输出位置”,会加上协议名。

BATCH_{jobName}.0_HOSTS(单机)

当选择单机时,即计算节点个数为1时,此环境变量为“BATCH_{jobName}.0_HOSTS”。

HOSTS环境变量的格式为“hostname:port”。一个容器可以看到同一个作业中所有容器的HOSTS,根据索引的不同,分别为“BATCH_CUSTOM0_HOSTS”、“BATCH_CUSTOM1_HOSTS”等。

jobstart_hccl.json 文件格式(v0.1)示例

{
	"group_count": "1",
	"group_list": [{
		"device_count": "1",
		"group_name": "job-trainjob",
		"instance_count": "1",
		"instance_list": [{
			"devices": [{
				"device_id": "4",
				"device_ip": "192.1.10.254"
			}],
			"pod_name": "jobxxxxxxxx-job-trainjob-0",
			"server_id": "192.168.0.25"
		}]
	}],
	"status": "completed"
}

jobstart_hccl.json 文件格式(v1.0)示例

{
	"server_count": "1",
	"server_list": [{
		"device": [{
			"device_id": "4",
			"device_ip": "192.1.10.254",
			"rank_id": "0"
		}],
		"server_id": "192.168.0.25"
	}],
	"status": "completed",
	"version": "1.0"
}

父主题: 用于训练模型(旧版即将下线)

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

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