华为云AI开发平台ModelArts使用自定义镜像创建训练作业(CPU/GPU)_云淘科技
模型训练是一个不断迭代和优化的过程。在训练模块的统一管理下,方便用户试验算法、数据和超参数的各种组合,便于追踪最佳的模型与输入配置,您可以通过不同版本间的评估指标比较,确定最佳训练作业。
前提条件
已将用于训练的数据上传至OBS目录。
已在OBS创建至少1个空的文件夹,用于存储训练输出的内容。
已按照ModelArts规范制作自定义镜像包,自定义镜像包规范请参见训练作业自定义镜像规范。
已将自定义镜像上传至SWR服务,操作指导可参见如何登录并上传镜像到SWR。
创建训练作业
登录ModelArts管理控制台,在左侧导航栏中选择“训练管理 > 训练作业”,进入“训练作业”列表。
单击“创建训练作业”,进入“训练作业”页面,填写训练作业相关参数。关键参数解释见表1。
参数名称 |
说明 |
---|---|
创建方式 |
必选,选择“自定义算法”。 如果已经在“算法管理”中创建完成基于自定义镜像的算法,此处也可以在“我的算法”中直接选择创建好的算法。 |
启动方式 |
必选,选择“自定义”。 |
镜像地址 |
必选。容器镜像地址。 自有镜像或他人共享的镜像:单击右边的“选择”,可以从SWR服务选择用户的容器镜像,前提是要先上传镜像到SWR中。 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。 其中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/”路径。 |
训练输出-参数名称 |
建议设置为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/”。 |
训练输出-获取方式 |
以参数名称为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所示,请了解。 |
故障自动重启 |
可选。打开开关后,可以设置训练故障重启次数。 |
环境变量 |
说明 |
---|---|
MA_JOB_DIR |
代码目录的父目录 |
MA_MOUNT_PATH |
训练输入和训练输出目录的父目录 |
VC_TASK_INDEX |
当前容器索引,容器从0开始编号。单机训练的时候,该字段无意义。在多机作业中,用户可以根据这个值来确定当前容器运行的算法逻辑。 |
VC_WORKER_HOSTS |
节点通信域名列表(多个节点域名通过逗号连接)。例如: 单节点:”${MA_VJ_NAME}-${MA_TASK_NAME}-0.${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}”。 |
选择训练资源的规格。训练参数的可选范围与已有自定义镜像的使用约束保持一致。
参数名称 |
说明 |
---|---|
资源池 |
选择训练作业资源池。支持“公共资源池”和“专属资源池”。 如果选择专属资源池,您可以查看当前专属资源池节点个数详情以及卡数详情。如果资源类型可用卡数不足,作业可能需要排队,您可以更换资源或者减少规格卡数。 说明: 如果您需要更换专属资源池中已打通的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文件目录需要有读写权限。 |
“事件通知” |
订阅事件通知服务。您可以根据业务实际情况设置是否打开事件通知开关,开启事件通知后发生特定事件(如作业状态变化或疑似卡死)后会发送短信、邮件等。 如果打开事件通知开关,请根据实际情况填写如下参数。 “主题名”:事件通知的主题名称。您可以单击创建主题,在消息通知服务中创建主题。 说明: 在消息通知服务中创建的主题,需要为主题添加订阅,订阅添加成功后方可收到事件通知。订阅主题的详细操作请参见添加订阅。 |
“自动停止” |
使用付费资源时会出现此参数。 启用该参数并设置时间后,训练作业将在指定时间自动停止。 |
单击“提交”,完成训练作业的创建。
训练作业一般需要运行一段时间。
要查看训练作业实时情况,您可以前往训练作业列表,单击训练作业的名称,进入训练作业详情页,查看训练作业的基本情况,具体请参考查看作业详情。
父主题: 使用自定义镜像训练模型(新版训练)
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家