更新时间:2023-10-30 GMT+08:00
分享

使用自定义镜像训练模型(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"
      }
分享:

    相关文档

    相关产品