更新时间:2025-09-05 GMT+08:00
分享

使用JupyterLab创建并调试训练作业

在AI模型开发过程中,高效的调试环境是确保模型质量的关键环节。传统开发模式中,开发人员需要在本地环境中完成模型调试,再进行云端部署,这一过程往往面临环境配置复杂、资源利用率低等问题。

ModelArts调试模式的训练作业提供了一套完整的云端开发解决方案,有效解决了上述问题。该方案主要包含以下核心功能:

  1. 云化开发环境支持
    • 集成JupyterLab等主流开发工具链,提供开箱即用的云端开发环境
    • 支持本地IDE通过SSH远程连接,保持开发习惯的同时实现云端调试
  2. 灵活的调试方式
    • 提供分布式算法调试能力,满足复杂模型开发需求
    • 调试完成的代码可无缝衔接创建生产训练作业,实现开发到生产的快速转换
  3. 便捷的资源管理
    • 云上调试环境即开即用,无需关注安装配置
    • 本地IDE调试模式下,调试完成的代码可零成本迁移至生产环境

通过以上功能,ModelArts调试模式的训练作业为开发人员提供了高效、灵活的云端开发体验,显著提升了模型开发效率和质量。

约束限制

默认支持创建10000条训练作业,剩余额度可以在训练作业列表页查看。

图1 查看训练作业剩余额度

前提条件

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

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

  • 由于训练作业运行需消耗资源,为了避免训练失败请确保账户未欠费。
  • 确保使用的OBS目录与ModelArts在同一区域。
  • 检查是否配置了访问授权。如果未配置,请参见快速配置ModelArts委托授权完成操作
  • 已经上传镜像到SWR服务中,具体操作请参见如何登录并上传镜像到SWR
  • 已经准备好训练作业的专属资源池。

计费影响

在ModelArts进行模型训练时,会产生计算资源和存储资源的累计值计费。计算资源为训练作业运行的费用。存储资源包括数据存储到OBS或SFS的费用。详见模型训练计费项

操作流程介绍

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

步骤一:进入创建训练作业页面

步骤二:基础配置:配置基础信息。

步骤三:环境配置:配置环境信息。

步骤四:训练配置:配置训练作业的输入、输出、超参、环境变量等参数。

步骤五:资源配置:配置资源池、实例规格等信息。

步骤六:容错与恢复配置:配置自动重启等信息。

步骤七:调度配置:调整作业优先级、是否允许被抢占、自动停止等。

步骤八:更多配置:配置日志、事件通知和标签等信息。

步骤九:提交训练作业并调试

步骤一:进入创建训练作业页面

  1. 登录ModelArts管理控制台
  2. 在左侧导航栏中,选择模型训练 > 训练作业进入训练作业列表。
  3. 单击“创建训练作业”,进入创建训练作业页面,默认进入新版页面,以下内容主要介绍新版创建训练页面操作。

步骤二:基础配置

在创建训练作业页面填写调试训练作业的基础配置。

表1 调试训练作业的基础配置

参数名称

说明

作业模式

创建调试训练作业时,必须选择“调试模型”

训练作业支持在云上和本地对训练代码进行调试,调试完成的代码可直接创建生产训练作业。

  • “生产模式”:在生产环境运行训练作业,初次上云训练建议先使用调试模式,再到生产环境运行,避免产生资源浪费。
  • “调试模式”:可以实时修改训练代码并迭代调试。

“生产模式”,则请参考创建生产训练作业(新版页面)创建生产训练作业。

作业名称

必填,训练作业的名称。

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

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

描述(可选)

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

实验设置

勾选“实验设置”后,可以将训练作业放入实验中分类,并有序地进行管理,常用于多任务的版本管理等场景。

实验功能有助于管理和优化训练作业,如通过重建作业时微调超参得到的新作业,可在实验中有序归纳与比较作业结果,从而有效地寻找最佳训练配置。

  • “选择已有实验”:将训练作业纳入已有的实验中。需要选择“实验名称”
  • “创建新实验”:将训练作业纳入新建的实验中。需要配置“新实验名称”“新实验描述(可选)”

不勾选实验设置,表示训练作业不在实验中进行统一管理。

训练应用程序

创建调试作业时,SSH远程开发和JupyterLab至少启用一个。

  • JupyterLab:通过云化版本的JupyterLab,在云上调试和运行代码,无需关注安装配置,即开即用。
  • SSH远程开发:支持通过本地IDE(例如VSCode)远程连接到调试训练作业中,对代码进行调试及运行。

密钥对

启用SSH远程开发时,必须配置密钥对。

可以选择已有密钥对,也可以单击“立即创建”新建密钥对,具体操作请参见创建密钥对

说明:

创建好的密钥对,请下载并妥善保管,使用本地IDE远程连接到调试训练作业时需要使用密钥对进行鉴权认证。

步骤三:环境配置

创建训练作业时,需要配置算法来源、启动方式、算法对应的引擎及版本、代码目录等信息。调试作业模式下只支持使用自定义镜像创建调试训练作业。
表2 调试作业环境配置

参数名称

说明

创建方式

固定选择“自定义算法”

启动方式

固定选择“自定义”

镜像

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

容器镜像地址的填写支持如下方式。
  • 选择自有镜像或他人共享的镜像:单击右边的“选择”,从容器镜像中选择用于训练的容器镜像。所需镜像需要提前上传到SWR服务中。
  • 选择公开镜像:直接输入SWR服务中公开镜像的地址。地址直接填写“组织名称/镜像名称:版本名称”,不需要带域名信息,系统会自动拼接域名地址。

代码来源

选择代码来源。默认是“对象存储服务OBS”

  • “OBS对象存储”:如果训练代码存放在OBS中,则选择“对象存储服务OBS”

代码目录(可选)

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

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

启动命令

必填,镜像的启动命令。

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

说明:

为保证数据安全,请勿输入敏感信息,例如明文密码。

运行用户ID

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

如果需要指定uid,则uid数值需要在规定范围内,专属资源池的uid范围是0~65535。同时,自定义镜像必须存在“/home/ma-user”目录,且“/home/ma-user”目录的属主为指定uid,属组为指定uid对应的gid。

如果运行用户ID配置为0,则训练容器中的运行用户是root。

本地代码目录

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

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

单击参数右侧的“预览运行环境”,可以查看训练作业的工作目录。

容器运行目录

指定训练容器的本地目录,训练时系统会自动cd到此目录下执行启动文件。

容器运行目录是训练作业运行过程中执行启动命令的本地目录,可用于存储生成的一些临时文件。为确保该目录存在,容器运行目录必须是启动文件本地目录的父目录。

步骤四:训练配置

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

表3 训练配置

参数名称

说明

输入

单击“添加”,配置训练作业输入信息。

  • “参数名称”

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

    建议设置为“data_url”。训练输入参数要与所选算法的“输入”参数匹配。

  • “输入来源”:训练输入支持来源OBS存储和数据集。
    • 单击“输入来源”参数右侧的,从OBS桶中选择训练输入数据的存储位置。文件总大小要小于或等于10GB,文件数要小于或等于1000个,单个文件大小要小于或等于1GB。
    • 单击“数据集”,在ModelArts数据集列表中勾选目标数据集并选择对应的版本。

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

  • “获取方式”

    以参数名称为“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”。训练输出参数要与所选算法的“输出”参数匹配。

  • “输出路径”

    单击“输出路径”参数右侧的,从OBS桶中选择训练输出数据的存储位置。文件总大小必须小于或等于1GB,文件数必须小于或等于128个,单个文件大小必须小于或等于128MB。

    训练过程中,系统将自动从训练容器的本地代码目录下同步文件到数据存储位置。

    输出数据的存储位置仅支持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", "")
  • “预下载至容器目录”

    选择是否将输出目录下的文件预下载至训练容器中。

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

超参

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

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

  • 单击“添加”,添加超参信息,总数不超过100条。
  • 单击“本地上传”可以本地批量导入超参,需要按模板填写超参且总数不能超过100条,否则会导入失败。
说明:

为保证数据安全,请勿输入敏感信息,例如明文密码。

环境变量

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

  • 单击“添加”,添加环境变量信息,总数不超过100条。
  • 单击“本地上传”可以本地批量导入环境变量,需要按模板填写环境变量且总数不能超过100条,否则会导入失败。
说明:

为保证数据安全,请勿输入敏感信息,例如明文密码。

步骤五:资源配置

参考表4配置训练作业的训练资源。
表4 资源配置

参数名称

说明

资源池类型

仅支持“专属资源池”

专属资源池需要提前单独创建,不与其他租户共享,具体创建操作请参见创建Standard专属资源池

资源池

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

选中需要的资源池,单击确定后即可在资源池查看到该资源池的基本信息。选中后的资源池可单击“重新选择”重选资源池。也单击“空闲/碎片节点数”列的“查看”可以查看碎片详情。

规格类型

分为“预置规格”“自定义规格”

  • “预置规格”:选择该专属资源池中预置的“实例规格”
  • “自定义规格”:训练作业支持基于专属资源池的规格自定义资源规格,进而提升资源池的利用率。自定义规格只能小于或等于专属资源池的“节点规格”。CPU规格只支持自定义核数和内存,GPU和Ascend规格支持自定义核数、内存和卡数。

实例规格

当规格类型选择“预置规格”时必选,单击选择资源规格,规格名称中体现了服务器类型、型号等信息。

  • 当训练代码中已定义资源类型时,则根据算法的约束条件选择合适的资源类型。例如,训练代码中定义的资源类型为CPU,这里选择其他类型时会导致训练失败。
  • 如果部分资源类型不可见或不可选,表示不支持。
  • 当配置了“输入”参数时,在选择资源池规格时可以单击下方的“获取实际可用规格预估”,检查输入数据的大小是否超出数据盘的容量限制,避免训练过程中出现内存不足的情况。
须知:

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

实例数

必填,根据需要选择实例数的个数。默认值为“1”

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

    在创建分布式训练作业前,建议提前安装所有的pip依赖(请参见在镜像中安装pip依赖),因为当节点数大于10时,系统会自动删除pip源配置,当训练过程中涉及pip install操作时可能会训练失败。

存储挂载

资源规格选择“专属资源池”时,支持添加多种存储挂载方式,以提高数据的访问效率。

图2 存储挂载
  • “添加拓展存储SFS Turbo配置”

    当ModelArts和SFS Turbo间网络直通时,训练作业支持挂载多个SFS Turbo存放训练数据。文件系统支持重复挂载,但是挂载路径不可重复。最多可以挂载5个盘。配置ModelArts和SFS Turbo间网络直通,具体操作请参见配置ModelArts和SFS Turbo间网络直通

    图3 SFS Turbo
    • “文件系统”:选择一个SFS Turbo。
    • “云上挂载路径”:输入SFS Turbo对应在训练容器内的云上挂载路径。不能为“/”目录,不能为“/cache”“/home/ma-user/modelarts”等系统已经默认挂载的路径。
    • “存储位置”:选择SFS Turbo的存储位置。如果用户配置了文件夹控制权限,请选择存储位置;如果用户未配置文件夹控制权限,可以保持默认值“/”或者自定义位置。
    • “挂载方式”:显示挂载SFS Turbo的权限。根据SFS Turbo存储位置的权限显示“读写”“只读”,如果用户未配置文件夹控制权限,则该参数不可见。如果需要设置SFS Turbo的文件夹权限,请参考权限管理文档配置。
    • “挂载参数”:支持配置SFS挂载参数实现训练加速优化,具体参数说明请参见设置极速文件存储挂载参数。不设置时,默认配置如下参数:
      mountOptions:
      - vers=3 
      - timeo=600 
      - nolock 
      - hard
  • “添加拓展存储SFS 3.0容量型配置”:训练作业支持挂载一个通用文件系统SFS 3.0用于存放训练数据。需要配置如下参数。
    图4 SFS 3.0容量型
    • “文件系统”:输入通用文件系统名称。需要和弹性文件服务SFS里面的名称一致,否则会挂载失败。
    • “云上挂载路径”:输入对应在训练容器内的云上挂载路径。
    说明:

    “添加拓展存储SFS 3.0容量型配置”为受限使用功能,需要提工单申请开通。

  • “添加拓展存储PFS配置”:训练作业支持挂载一个OBS的并行文件系统用于存放训练数据。需要配置如下参数。
    图5 PFS
    • “存储位置”:选择一个并行文件系统。
    • “云上挂载路径”:输入对应在训练容器内的云上挂载路径。
    说明:

    “添加拓展存储PFS配置”为受限使用功能,需要提工单申请开通。

超节点亲和组实例数

当选择超节点资源池时,支持配置超节点亲和组实例数。如果配置超节点亲和组实例数为n,则每n个Pod会被调度到同一个超节点内,从而实现亲和性作业调度。在分布式训练中亲和性作业调度可以保证计算资源的同构性。

如果配置了“超节点亲和组实例数”,则“实例数”必须设置为超节点亲和组实例数的整数倍,否则无法创建训练作业。例如,超节点亲和组实例数为n,则实例数为n或2n。

超节点亲和组实例配置更多内容请参见超节点亲和组实例数配置章节。

步骤六:容错与恢复配置

创建训练作业时,支持设置训练作业自动重启。

表5 自动重启配置

参数名称

说明

自动重启

设置训练作业是否设置自动重启。

  • 不勾选(默认):表示不启用自动重启,训练异常则直接停止作业。
  • 勾选:表示当由于环境问题、作业卡死等原因导致训练作业异常时,系统将自动检测故障问题并根据相应策略进行处理,以提高训练成功率。训练作业恢复策略已支持进程级、容器级、作业级自动重启,无需配置,自动匹配与升级恢复策略。

    为了避免丢失训练进度、浪费算力,开启此功能前请确认代码已适配断点续训,操作指导请参见设置断点续训练

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

最大重启次数

当勾选“自动重启”时可配置。

当训练作业的自动重启次数达到最大重启次数,且训练作业依旧异常,则直接停止作业。

  • 缺省值:3
  • 取值范围:1~128

提交创建训练作业后不支持修改重启次数,请合理设置次数。

无条件自动重启

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

作业卡死重启

当勾选“自动重启”时可配置。系统支持自动监控作业进程的状态和资源利用率来判定作业是否卡死,开启此开关后,支持将标记为卡死的作业进行进程级自动重启,以提高资源使用率。

因系统无法核实代码逻辑且检测存在周期性,卡死检测存在一定的误报概率,开启开关即表示接受误报率。为了避免无效重启浪费算力资源,系统最多只支持连续作业卡死重启3次。

步骤七:调度配置

创建训练作业时,支持配置作业调度策略,例如提高作业调度优先级、允许被抢占、自动停止等,用于提高作业调度效率。

表6 调度配置

参数名称

说明

提高作业调度优先级

  • 作业默认按照提交顺序进入队列,勾选开启后可提高作业进入队列的优先级。
  • 使用专属资源池创建训练作业时,支持提高训练作业的调度优先级。使用公共资源池时,不支持此参数配置。
  • 优先级可以设置数字1-3,数字越大,优先级越高,默认优先级为“1”,最高优先级为“3”
  • 设置优先级为“3”时,还需要配置用户权限才会生效。用户权限设置请参见“设置作业为高优先级权限”。
  • 如果训练作业长时间处于“等待中”的状态,则可以通过修改作业优先级来减少排队时长,请参见修改训练作业优先级

允许被抢占

使用专属资源池创建训练作业时,允许设置训练作业被抢占。使用公共资源池时,不支持此参数配置。

开启后,当资源池剩余资源不足时,允许被抢占的作业可能会被终止并重新排队。为避免训练进度丢失,请在开启此功能前完成断点续训的设置,操作指导请参考设置断点续训练

自动停止

选择是否启用训练作业自动停止。

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

步骤八:更多配置

表7 高级配置

参数名称

说明

永久保存日志

当实例规格选择Ascend资源时,默认开启“永久保存日志”,不允许修改。

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

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

日志路径

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

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

事件通知

选择是否启用训练作业的事件通知。

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

生成节点间SSH免密互信文件

选择是否生成节点间SSH免密互信文件。

  • 不勾选(默认):表示不生成节点间SSH免密互信文件。
  • 勾选:表示生成节点间SSH免密互信文件。在使用基于MPI和Horovod框架的自定义镜像进行分布式训练时,为确保节点间的通信顺畅,必须配置节点间SSH免密互信,确保分布式训练任务顺利进行。

    同时还需配置“SSH免密互信文件目录”,即自动生成的SSH密钥文件在训练容器中所在的目录,默认值为“/home/ma-user/.ssh”。更多操作指导请参见自定义镜像训练作业配置实例间SSH免密互信

标签

当需要使用同一标签标识多种云资源时,即所有服务均可在标签输入框下拉选择同一标签,则建议在TMS中创建预定义标签。标签详细用法请参见使用TMS标签实现资源分组管理

最多支持添加20条标签。

步骤九:提交训练作业并调试

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

    在训练作业列表中,刚创建的训练作业状态为“等待中”

  2. 在训练作业列表中,当训练作业的状态变为“运行中”时,单击训练作业名称进入训练详情页,在训练详情页单击JupyterLab地址,弹出JupyterLab页面,即可进行训练代码调试。

    JupyterLab页面左侧会显示训练代码文件,JupyterLab的使用请参见JupyterLab简介及常用操作

    当创建的调试训练作业开启了SSH远程开发时,在训练作业详情页获取“SSH远程开发”参数后的“密钥对”和SSH地址信息后,可以使用本地IDE远程连接到调试训练作业中进行代码调试。

相关文档