更新时间:2023-01-29 GMT+08:00
分享

使用自定义镜像创建训练作业(CPU/GPU)

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

前提条件

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

创建训练作业

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

    参数名称

    说明

    创建方式

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

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

    启动方式

    必选,选择“自定义”

    镜像地址

    必选。容器镜像地址。

    • 自有镜像或他人共享的镜像:单击右边的“选择”,可以从SWR服务选择用户的容器镜像,前提是要先上传镜像到SWR中。
    • 公开镜像:支持手动输入SWR上的公开镜像地址(<用户镜像所属组织>/<镜像名称>),地址上不需要带域名信息(swr.<region>.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开始编号。单机训练的时候,该字段无意义。在多机作业中,用户可以根据这个值来确定当前容器运行的算法逻辑。

    MA_NUM_HOSTS

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

    ${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. 选择训练资源的规格。训练参数的可选范围与已有自定义镜像的使用约束保持一致。
    表3 资源参数说明

    参数名称

    说明

    资源池

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

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

    说明:

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

    资源类型

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

    规格

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

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

    训练时,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小时。

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

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

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

分享:

    相关文档

    相关产品