更新时间:2024-07-25 GMT+08:00

创建训练作业

模型训练是一个不断迭代和优化模型权重的过程。ModelArts的训练模块支持创建训练作业、查看训练情况以及管理训练版本。通过模型训练试验模型结构、数据和超参的各种组合,便于找到最佳的模型结构和权重。

前提条件

  • 已经将用于训练作业的数据上传至OBS目录。
  • 已经在OBS目录下创建了至少1个空的文件夹,用于存储训练输出的内容。

    ModelArts不支持加密的OBS桶,创建OBS桶时,请勿开启桶加密。

  • 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。
  • 确保使用的OBS目录与ModelArts在同一区域。
  • 检查是否配置了访问授权。如果未配置,请参见使用委托授权完成操作
  • (可选)如果使用已有算法创建训练作业,需要确认“算法管理”中已准备好算法,具体操作请参见准备算法简介
  • (可选)如果使用自定义镜像创建训练作业,需要上传镜像到SWR服务中,具体操作请参见如何登录并上传镜像到SWR

操作流程介绍

创建训练作业的操作步骤如下所示。

  1. 进入创建训练作业页面
  2. 配置训练作业基本信息
  3. 根据不同的算法来源,选择不同的训练作业创建方式。

  4. 配置训练参数:配置训练作业的输入、输出、超参、环境变量等参数。
  5. 根据需要选择不同的资源池用于训练作业,推荐使用专属资源池,两者的差异说明请参见专属资源池和公共资源池的能力差异

  6. (可选)设置标签:如果需要对训练作业进行资源分组管理,可以设置标签。
  7. 后续操作

进入创建训练作业页面

  1. 登录ModelArts管理控制台。
  2. 在左侧导航栏中,选择训练管理 > 训练作业进入训练作业列表。
  3. 单击“创建训练作业”,进入创建训练作业页面。

配置训练作业基本信息

在创建训练作业页面填写训练作业基本信息。

表1 创建训练作业的基本信息

参数名称

说明

名称

必填,训练作业的名称。

系统会自动生成一个名称,可以根据业务需求重新命名,命名规则如下:

  • 支持1~64位字符。
  • 可以包含大小写字母、数字、中划线(-)或下划线(_)。

描述

训练作业的简介,便于在训练作业列表了解作业信息。

选择创建方式(使用预置镜像)

如果选择使用预置镜像创建训练作业,则参考表2选择训练作业的创建方式。
表2 创建训练作业的创建方式(使用预置镜像)

参数名称

说明

创建方式

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

启动方式

必选,选择“预置框架”,并选择训练作业要使用的预置框架引擎和引擎版本。

如果引擎版本选择“自定义”,则需要配置“镜像”参数,选择自定义镜像用于训练作业。

镜像

仅当预置框架的引擎版本选择“自定义”时才显示该参数,且是必填参数。

容器镜像地址的填写支持如下方式。
  • 选择自有镜像或他人共享的镜像:单击右边的“选择”,从容器镜像中选择用于训练的容器镜像。所需镜像需要提前上传到SWR服务中。
  • 选择公开镜像:直接输入SWR服务中公开镜像的地址。地址直接填写“组织名称/镜像名称:版本名称”,不需要带域名信息(swr.<region>.myhuaweicloud.com),系统会自动拼接域名地址。例如:某公开镜像的SWR地址为“swr.<region>.myhuaweicloud.com/test-image/tensorflow2_1_1:1.1.1”,则此处填写“test-images/tensorflow2_1_1:1.1.1”

代码目录

必填,选择训练代码文件所在的OBS目录。

  • 需要提前将代码上传至OBS桶中,目录内文件总大小要小于或等于5GB,文件数要小于或等于1000个,文件深度要小于或等于32。
  • 训练代码文件会在训练作业启动的时候被系统自动下载到训练容器的“${MA_JOB_DIR}/demo-code”目录中,“demo-code”为存放代码目录的最后一级OBS目录。例如,“代码目录”选择的是“/test/code”,则训练代码文件会被下载到训练容器的“${MA_JOB_DIR}/code”目录中。

启动文件

必填,选择代码目录中训练作业的Python启动脚本。

ModelArts只支持使用Python语言编写的启动文件,因此启动文件必须以“.py”结尾。

本地代码目录

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

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

工作目录

训练时,系统会自动cd到此目录下执行启动文件。

选择创建方式(使用自定义镜像)

如果选择使用自定义镜像创建训练作业,则参考表3选择训练作业的创建方式。
表3 创建训练作业的创建方式(使用自定义镜像)

参数名称

说明

创建方式

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

启动方式

必选,选择“自定义”

镜像

必填,填写容器镜像的地址。

容器镜像地址的填写支持如下方式。
  • 选择自有镜像或他人共享的镜像:单击右边的“选择”,从容器镜像中选择用于训练的容器镜像。所需镜像需要提前上传到SWR服务中。
  • 选择公开镜像:直接输入SWR服务中公开镜像的地址。地址直接填写“组织名称/镜像名称:版本名称”,不需要带域名信息(swr.<region>.myhuaweicloud.com),系统会自动拼接域名地址。例如:某公开镜像的SWR地址为“swr.<region>.myhuaweicloud.com/test-image/tensorflow2_1_1:1.1.1”,则此处填写“test-images/tensorflow2_1_1:1.1.1”

代码目录

选择训练代码文件所在的OBS目录。如果自定义镜像中不含训练代码则需要配置该参数,如果自定义镜像中已包含训练代码则不需要配置。

  • 需要提前将代码上传至OBS桶中,目录内文件总大小要小于或等于5GB,文件数要小于或等于1000个,文件深度要小于或等于32。
  • 训练代码文件会在训练作业启动的时候被系统自动下载到训练容器的“${MA_JOB_DIR}/demo-code”目录中,“demo-code”为存放代码目录的最后一级OBS目录。例如,“代码目录”选择的是“/test/code”,则训练代码文件会被下载到训练容器的“${MA_JOB_DIR}/code”目录中。

运行用户ID

容器运行时的用户ID,该参数为选填参数,建议使用默认值1000。

如果需要指定uid,则uid数值需要在规定范围内,不同资源池的uid范围如下:

  • 公共资源池:1000-65535
  • 专属资源池:0-65535

启动命令

必填,镜像的启动命令。

运行训练作业时,当“代码目录”下载完成后,“启动命令”会被自动执行。
  • 如果训练启动脚本用的是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到此目录下执行启动文件。

选择创建方式(使用我的算法)

如果选择使用已有算法创建训练作业,则“创建方式”选择“我的算法”,在算法列表中选择算法。如果没有满足条件的算法,也可以新建算法,具体操作请参见创建算法

配置训练参数

训练过程中需要从OBS桶或者数据集中获取输入数据进行模型训练,训练输出的结果也要存储至OBS桶中。创建训练作业时可以参考表4配置输入、输出、超参、环境变量等参数。

创建训练作业时选择的创建方式不同,训练作业的输入、输出和超参显示不同。如果参数值置灰,即表示该参数已经在算法代码中配置了且不支持修改。

表4 创建训练作业的训练参数

参数名称

子参数

说明

输入

参数名称

算法代码需要通过“输入”“参数名称”去读取训练的输入数据。

建议设置为“data_url”。训练输入参数要与所选算法的“输入”参数匹配,请参见创建算法时的表2

数据集

单击“数据集”,在ModelArts数据集列表中勾选目标数据集并选择对应的版本。

训练启动时,系统将自动下载输入路径中的数据到训练运行容器。

说明:

ModelArts数据管理模块在重构升级中,对未使用过数据管理的用户不可见。建议新用户将训练数据存放至OBS桶中使用。

数据存储位置

单击“数据存储位置”,从OBS桶中选择训练输入数据的存储位置。

训练启动时,系统将自动下载输入路径中的数据到训练运行容器。

获取方式

以参数名称为“data_path”的训练输入为例,说明获取方式的作用。

  • 当参数的“获取方式”“超参”时,可以参考如下代码来读取数据。
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--data_path')
    args, unknown = parser.parse_known_args()
    data_path = args.data_path 
  • 当参数的“获取方式”“环境变量”时,可以参考如下代码来读取数据。
    import os
    data_path = os.getenv("data_path", "")

输出

参数名称

算法代码需要通过“输出”“参数名称”去读取训练的输出目录。

建议设置为“train_url”。训练输出参数要与所选算法的“输出”参数匹配,请参见创建算法时的表3

数据存储位置

单击“数据存储位置”,从OBS桶中选择训练输出数据的存储位置。训练过程中,系统将自动从训练容器的本地代码目录下同步文件到数据存储位置。

说明:

数据存储位置仅支持OBS路径。为避免数据存储冲突,建议选择一个空目录用作“数据存储位置”

获取方式

以参数名称为“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", "")

预下载至本地目录

选择是否将输出目录下的文件预下载至本地目录。

  • 不下载:表示启动训练作业时不会将输出数据的存储位置中的文件下载到训练容器的本地代码目录中。
  • 下载:表示系统会在启动训练作业时自动将输出数据的存储位置中的所有文件下载到训练容器的本地代码目录中。下载时间会随着文件变大而变长,为了防止训练时间过长,请及时清理训练容器的本地代码目录中的无用文件。如果要使用断点续训练和增量训练,则必须选择“下载”

超参

-

超参用于训练调优。此参数由选择的算法决定,如果在算法中已经定义了超参,则此处会显示算法中所有的超参。

超参支持修改和删除,状态取决于算法中的超参“约束”设置,详情请参见定义超参

环境变量

-

根据业务需求增加环境变量。训练容器中预置的环境变量请参见查看训练容器环境变量

自动重启

-

打开开关后,可以设置重启次数和是否启用无条件自动重启。

打开自动重启开关后,当由于环境问题导致训练作业异常时,系统将自动修复异常或隔离节点,并重启训练作业,提高训练成功率。为了避免丢失训练进度、浪费算力,开启此功能前请确认代码已适配断点续训,操作指导请参见断点续训练和增量训练

重启次数的取值范围是1~128,缺省值为3。创建训练后不支持修改重启次数,请合理设置次数。

勾选无条件自动重启后,只要系统检测到训练异常,就无条件重启训练作业。为了避免无效重启浪费算力资源,系统最多只支持连续无条件重启3次。

当训练过程中触发了自动重启,则系统会记录重启信息,在训练作业详情页可以查看故障恢复详情,具体请参见查看故障恢复详情

配置资源池(公共资源池)

如果使用公共资源池创建训练作业,则参考表5配置公共资源池。
表5 创建训练作业的公共资源池

参数名称

说明

资源池

必选,选择“公共资源池”

资源类型

必选,选择训练需要的资源类型。当训练代码中已定义资源类型时,则根据算法的约束条件选择合适的资源类型。例如,训练代码中定义的资源类型为CPU,这里选择其他类型时会导致训练失败。如果部分资源类型不可见或不可选,表示不支持。

规格

必选,根据不同的资源类型,选择所需的资源规格。

“输入”参数选择“数据存储位置”时,在选择资源池规格时可以单击右侧的“获取输入数据大小”,检查输入数据的大小是否超出数据盘的容量限制,避免训练过程中出现内存不足的情况。

须知:

资源规格为“GPU:n*tnt004”(n表示具体数字)的资源不支持多进程的训练任务。

计算节点个数

必填,根据需要选择计算节点的个数。默认值为“1”

  • “计算节点个数 = 1”时,创建的是单机训练作业,ModelArts只会在一个节点上启动一个训练容器,该训练容器独享所选规格的计算资源。
  • “计算节点个数 > 1”时,创建的是分布式训练作业,更多分布式训练配置请参见分布式训练功能介绍

永久保存日志

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

  • 开关关闭(默认关闭):表示不永久保存日志,则训练日志会在30天后会被清理。可以在作业详情页下载全部日志至本地。
  • 开关打开:表示永久保存日志,此时必须配置“作业日志路径”,系统会将训练日志永久保存至指定的OBS路径。

作业日志路径

打开“永久保存日志”开关时,必须配置“作业日志路径”,用于存放训练作业产生的日志文件。

建议选择一个空的OBS文件目录存放运行中产生的日志文件,同时需要OBS文件目录的读写权限。

事件通知

选择是否打开“事件通知”开关。

  • 开关关闭(默认关闭):表示不启用消息通知服务。
  • 开关打开:表示订阅消息通知服务,当训练作业发生特定事件(如作业状态变化或疑似卡死)时会发送通知。此时必须配置“主题名”“事件”
    • “主题名”:事件通知的主题名称。单击“创建主题”,前往消息通知服务中创建主题。
    • “事件”:选择要订阅的事件类型。例如“作业开始”“作业结束”“作业失败”“作业终止”“作业疑似卡死”等。
说明:
  • 需要为消息通知服务中创建的主题添加订阅,当订阅状态为“已确认”后,方可收到事件通知。订阅主题的详细操作请参见添加订阅
  • 使用消息通知服务会产生相关服务费用,详细信息请参见计费说明
  • 只有资源类型为“GPU”的训练作业才支持通知“作业疑似卡死”的事件。

自动停止

当使用付费资源时,可以选择是否打开“自动停止”开关。

  • 开关关闭(默认关闭):表示训练作业将一直运行直至训练完成。
  • 开关打开:表示启用自动停止功能,此时必须配置自动停止时间,支持设置为“1小时”“2小时”“4小时”、6小时或“自定义”,自定义时间取值范围为1~720小时。启用该参数并设置时间后,运行时长到期后将会自动终止训练,准备排队等状态不扣除运行时长。

配置资源池(专属资源池)

如果使用专属资源池创建训练作业,则参考表6配置专属资源池。
表6 创建训练作业的专属资源池

参数名称

说明

资源池

必选,选择“专属资源池”并选择要使用的资源池。

选择专属资源池时,支持查看当前资源池的状态、节点规格、空闲/碎片节点数、可用节点/总节点数以及卡数信息。单击“空闲/碎片节点数”列的“查看”可以查看碎片详情,确认资源池是否满足训练需求。

规格

必选,根据不同的资源类型,选择所需的资源规格。

“输入”参数选择“数据存储位置”时,在选择资源池规格时可以单击右侧的“获取输入数据大小”,检查输入数据的大小是否超出数据盘的容量限制,避免训练过程中出现内存不足的情况。

须知:

资源规格为“GPU:n*tnt004”(n表示具体数字)的资源不支持多进程的训练任务。

自定义规格

选择是否打开“自定义规格”开关。训练作业支持基于专属资源池的规格自定义资源规格,进而提升资源池的利用率。

  • 开关关闭(默认关闭):表示直接使用专属资源池的规格。
  • 开关打开:表示自定义专属资源池的规格,自定义规格只能小于或等于专属资源池的“节点规格”。CPU规格只支持自定义核数和内存,GPU规格支持自定义核数、内存和卡数。
说明:

如果启用“自定义规格”,则“规格”参数将配置无效。

计算节点个数

必填,根据需要选择计算节点的个数。默认值为“1”

  • “计算节点个数 = 1”时,创建的是单机训练作业,ModelArts只会在一个节点上启动一个训练容器,该训练容器独享所选规格的计算资源。
  • “计算节点个数 > 1”时,创建的是分布式训练作业,更多分布式训练配置请参见分布式训练功能介绍

作业优先级

使用专属资源池创建训练作业时,支持设置训练作业的优先级。取值为1~3,默认优先级为1,最高优先级为3。

SFS Turbo

当ModelArts和SFS Turbo间网络直通时,训练作业支持挂载多个SFS Turbo存放训练数据。单击“增加挂载配置”,填写如下参数。

  • “文件系统”:选择一个SFS Turbo。
  • “云上挂载路径”:输入SFS Turbo对应在训练容器内的云上挂载路径。
  • “存储位置”:选择SFS Turbo的存储位置。如果用户配置了文件夹控制权限,请选择存储位置;如果用户未配置文件夹控制权限,可以保持默认值“/”或者自定义位置。
  • “挂载方式”:显示挂载SFS Turbo的权限。根据SFS Turbo存储位置的权限显示“读写”“只读”,如果用户未配置文件夹控制权限,则该参数不可见。
说明:
  • 相同的文件系统只能挂载一次 ,且只能对应一个挂载路径,挂载路径均不可重复。最多可以挂载8个盘。
  • 如果要使用训练作业挂载SFS Turbo功能,需要配置ModelArts和SFS Turbo间网络直通,具体操作请参见ModelArts网络
  • 云上挂载路径有如下限制:不能为 / 目录,不能为 /cache、 /home/ma-user/modelarts等系统已经默认挂载的路径。
  • 如果需要设置SFS Turbo的文件夹权限,请参考权限管理文档配置。

永久保存日志

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

  • 开关关闭(默认关闭):表示不永久保存日志,则训练日志会在30天后会被清理。可以在作业详情页下载全部日志至本地。
  • 开关打开:表示永久保存日志,此时必须配置“作业日志路径”,系统会将训练日志永久保存至指定的OBS路径。

作业日志路径

打开“永久保存日志”开关时,必须配置“作业日志路径”,用于存放训练作业产生的日志文件。

建议选择一个空的OBS文件目录存放运行中产生的日志文件,同时需要OBS文件目录的读写权限。

事件通知

选择是否打开“事件通知”开关。

  • 开关关闭(默认关闭):表示不启用消息通知服务。
  • 开关打开:表示订阅消息通知服务,当训练作业发生特定事件(如作业状态变化或疑似卡死)时会发送通知。此时必须配置“主题名”“事件”
    • “主题名”:事件通知的主题名称。单击“创建主题”,前往消息通知服务中创建主题。
    • “事件”:选择要订阅的事件类型。例如“作业开始”“作业结束”“作业失败”“作业终止”“作业疑似卡死”等。
说明:
  • 需要为消息通知服务中创建的主题添加订阅,当订阅状态为“已确认”后,方可收到事件通知。订阅主题的详细操作请参见添加订阅
  • 使用消息通知服务会产生相关服务费用,详细信息请参见计费说明
  • 只有资源类型为“GPU”的训练作业才支持通知“作业疑似卡死”的事件。

自动停止

当使用付费资源时,可以选择是否打开“自动停止”开关。

  • 开关关闭(默认关闭):表示训练作业将一直运行直至训练完成。
  • 开关打开:表示启用自动停止功能,此时必须配置自动停止时间,支持设置为“1小时”“2小时”“4小时”、6小时或“自定义”,自定义时间取值范围为1~720小时。启用该参数并设置时间后,运行时长到期后将会自动终止训练,准备排队等状态不扣除运行时长。

(可选)设置标签

如果需要通过标签实现资源分组管理,可以在“高级选项”处勾选“现在配置”,可以设置训练作业的“标签”。标签详细用法请参见ModelArts如何通过标签实现资源分组管理

后续操作

当创建训练作业的参数配置完成后,单击“提交”,在信息确认页面单击“确定”,提交创建训练作业任务。

训练作业一般需要运行一段时间,前往训练作业列表,可以查看训练作业的基本情况。

  • 在训练作业列表中,刚创建的训练作业状态为“等待中”
  • 当训练作业的状态变为“已完成”时,表示训练作业运行结束,其生成的模型将存储至对应的“输出”目录中。
  • 当训练作业的状态变为“运行失败”“异常”时,可以单击训练作业的名称进入详情页面,通过查看日志等手段处理问题。

训练作业运行过程中将按照选择的资源进行计费。