跳到主要内容
更新时间:2025-12-02 01:33:08

分布式训练为开发者和企业提供灵活、稳定、已用和高性能的机器学习训练环境。支持多种算法框架,能够处理大规模的分布式深度学习任务,用户可以通过【分布式训练】简单配置训练角色的数量及实例规格后,发起单机或大规模的分布式训练任务。

前提条件

为了方便您快速提交训练任务,您需要在创建训练任务前准备好所需的资源,并配置好可能需要使用的镜像、数据集和代码集。

准备资源​

提交训练任务前,您需要准备计算资源,用于后续AI训练。以下资源任选其一即可:

  • **公共资源:**每个集群下的公共资源池中都为您配置好了可共享使用的资源套餐,无需您手动执行任何操作。在您创建分布式训练任务时,支持选择共享资源套餐使用公共资源。
  • **专属资源:**您可以预先创建专属资源池,并购买所需的节点资源。通过新增套餐来分配专属资源池中的资源。后续您只需将可以使用专属资源池的用户维护到该专属资源池中,就可以在创建分布式训练任务时,通过您配置的套餐使用该专属资源池中的计算资源。

准备镜像​

提交训练任务前,您需要准备训练环境需要安装的镜像。以下镜像任选其一即可:

  • **官方镜像:**平台提供了基于不同框架的官方镜像,此类镜像适合在类脑云平台上进行训练任务,能够获得更好的兼容性和性能。您可以在创建分布式训练任务时,通过官方镜像的筛选选择合适的镜像。
  • **自定义镜像:**如果您的训练任务需要特殊的环境或依赖,可选择使用您添加到类脑云平台的自定义镜像,您可以通过创建自定义镜像,将自定义镜像维护到私有镜像仓库中,在您创建分布式训练任务时,可以通过自定义镜像的筛选选择合适的镜像。

准备数据集​

  • 提交训练任务前,您可以将训练任务需要的数据上传到文件存储,并将其创建为训练任务可直接使用的自定义数据集;
  • 您也可以直接挂载文件存储或对象存储作为训练任务的训练集。

准备训练代码​

提交训练任务前,您可以将训练任务可能需要使用的代码添加为代码集。为了方便管理和使用,建议您在平台的【代码管理】菜单中,将该代码添加到平台的代码仓库进行托管,便于多个训练任务直接选择使用。操作详情请参见代码管理。

操作步骤

通过控制台创建​

1、左侧导航栏,【模型开发与训练】->【分布式训练】,进入分布式训练控制台页面;

2、单机列表页面左上方的【创建】进入创建页面;

3、在创建页面填写相关参数,具体参数如下:

参数名称参数说明

任务名称

  • 必填,填写训练任务的名称
  • 128字符以内,不支持/:*?"<>|和空格等特殊字符
  • 单个用户下的任务名称不可重复

任务标签

  • 选填,可填写多个标签,供后续筛选
  • 128字符以内,不支持/:*?"<>|和空格等特殊字符

存储挂载

  • 支持选择 文件存储 、 数据集 和 模型 进行挂载

    • 文件存储:支持直接挂载文件存储路径至训练任务容器的指定路径
    • 数据集:选择前期已准备好的数据集,如何准备数据集请参见自定义数据集
    • 模型:选择前期已准备好的模型,如何准备模型请参见创建模型

    数据集和模型也都需要配置挂载路径,表示将数据集或模型挂载到训练任务容器的指定路径。运行代码时,训练任务会按照该路径检索所需文件

镜像选择

  • 必填,选择训练任务的镜像
  • 支持通过 平台镜像 、 自定义镜像 、 共享镜像 和 仓库地址 选择镜像
    • 平台镜像:类脑云平台提供的多种框架类型的官方镜像
    • 自定义镜像:可选择使用您添加到平台私有镜像仓库的自定义镜像,选择前,您需要先将自定义镜像添加到私有仓库中,操作详情参见自定义镜像
    • 共享镜像:可选择使用其他用户共享给您的自定义镜像
    • 镜像地址:支持配置您的自定义镜像或官方镜像地址。您需要在配置框中配置公网环境下可访问的Docker Registry Image URL

TensorBoard

  • 选填,是否采集TensorBoard日志。
  • 开启后用户需要选择TensorBoard日志写入的路径,然后在任务详情页启动TensorBoard查看对应的日志

计算框架

  • 必填,选择训练框架模版
  • 支持 DeepSpeed 、 Colossal-AI 、 其他 框架类型发起分布式训练任务
    • 其他:默认选中其他框架,表示不限制深度学习框架,支持Tensorflow、PyTorch、MXNet、Keras、Caffe等主流深度学习框架
    • DeepSpeed:支持选择DeepSpeed深度学习框架发起分布式训练任务,操作详情参见创建DeepSpeed分布式训练任务
    • Colossal-AI:支持选择Colossal-AI深度学习框架发起分布式训练任务,操作详情参见创建Colossal-AI分布式训练任务

任务配置

  • 必填,配置训练任务的实例规格
  • 根据您选择的计算框架,支持通过新增Role,配置master、woker或自定义角色

说明:选择 DeepSpeed 、 Colossal-AI 计算框架时,操作详情见创建DeepSpeed分布式训练任务、创建Colossal-AI分布式训练任务。

选择 其他 框架类型时:

  • Role:必填,默认worker,支持自定义,最多支持添加10个Role
  • 资源类型:必选,支持选择【公共资源池】或【专属资源池】,默认选择公共资源池,专属资源池创建方式详见创建专属资源池
  • 资源池:必选,如果资源类型选择【专属资源池】,则支持通过资源池名称筛选,选择需要用到的专属资源
  • 实例规格:必选,通过选择的资源池,过滤可选的实例规格,每种实例规格包含特定的CPU、内存、GPU的数量及单价(专属资源池的实例规格不包含单价)
  • 副本数:必填,支持输入整数,每个Role可以包含多个副本,选择资源后可指定当前Role运行的副本数
  • 启动命令:必填,填写任务的启动命令
    • 支持通过shell命令运行Python
    • 提交训练任务时,您可以通过配置$环境变量名,来获取指定环境变量的值
    • 如果您在执行命令时,通过配置启动参数来指定了输出路径,则训练结果将会输出到指定的路径中

训练代码

  • 选填,支持在线配置代码
  • 支持直接引用在【代码管理】模块维护的授权代码,代码在容器中的映射路径为/code,如何维护授权代码的操作详见代码管理

环境变量

  • 选填,将会被注入到训练容器中的环境变量
  • 环境变量的输入格式为key:value,支持配置最多20个环境变量
  • 在使用PyTorch或TensorFlow等框架时,需要获取master节点的IP或域名信息,平台提供预置的环境变量提供各个节点的IP信息。比如设置2个task,第一个task只有1个副本,第二个task有2个副本:
    • VC_{task全大写}_HOSTS:以逗号分隔的所有节点,如:
      • VC_TASK1_HOSTS=trainingjob-a11543131383525376511846-task1-0.trainingjob-a11543131383525376511846
      • VC_TASK2_HOSTS=trainingjob-a11543131383525376511846-task2-0.trainingjob-a11543131383525376511846,trainingjob-a11543131383525376511846-task2-1.trainingjob-a11543131383525376511846
    • VC_{task全大写}_NUM:通过此变量可以修改task副本数,如:
      • VC_TASK1_NUM=1
      • VC_TASK2_NUM=2
    • VC_TASK_NAMES:以逗号分隔的当前分布式训练所有task名称,如:
      • VC_TASK_NAMES=task1,task2
    • VC_TASK_INDEX:当前节点在当前task中的序号,如:
      • VC_TASK_INDEX=0

说明:除了VC_TASK_INDEX在每个节点中的值都不一定相同,其余环境变量在每个节点中都相同

例如:创建1个task,设置4个副本,使用PyTorch框架创建分布式训练时,启动命令可以写成如下:

python -m torch.distributed.launch 
--nnodes=4
--node_rank=$VC_TASK_INDEX
--nproc_per_node=8
--master_addr=echo $VC_TASK1_HOSTS | awk -F , '{print $1}'
--master_port=21000
main.py
  • --nproc_per_node=8代表每个节点有8个GPU,根据实际情况填写
  • --master_port=21000可以设置任意端口
环境诊断
  • 选填,开启该配置后,在任务运行前会进行当前任务环境健康状态诊断
  • 环境诊断时,将占用环境一段时间用于验证环境的可用性及稳定性给出诊断结果。单机检测预计占用5-10分钟,多机检测预计占用15-20分钟
挂起检测
  • 选填,开启该配置后,支持检测任务是否出现挂起(Hang)现象
  • 平台在任务运行时会进行日志检测,超过设定的挂起检测时长未输出日志,则判定为任务挂起
  • 支持配置挂起时长,默认为30分钟
自动重试
  • 选填,支持配置任务的自动重试
  • 支持配置最大重试次数及重试间隔(上个任务终止到新任务提交之间的时长)
  • 支持配置触发重试的条件:
    • 任务失败
      • OnFailure:任务出现异常时,无条件重启任务
      • ExitCodeAndErrorMsg:任务出现异常时,判断失败Worker实例的退出码及自定义的错误日志信息,如果满足重试条件,则重启任务
      • Advanced:任务出现异常时,依据预置的错误日志信息和退出码和用户自定义的错误日志信息,如果满足重试条件,则重启任务,预置的错误日志信息
        预置的错误日志信息参考如下:
        - ["torch.distributed.DistBackendError"]
        - ["ncclRemoteError: A call failed possibly due to a network error or a remote process exiting prematurely"]
        - ["socketProgress: Connection closed by remote peer"]
        - ["RuntimeError: Gloo connectFullMesh failed with"]
        - ["NCCL WARN Call to ibv_modify_qp failed with error Connection timed out"]
        - ["socketProgressOpt: Call to recv from", "failed : Connection reset by peer"]
        - ["Watchdog caught collective operation timeout", "WorkNCCL"]
    • 环境诊断不通过
    • 任务挂起(Hang)

4、参数配置完成后,单击确认完成任务创建。

通过命令行创建​

1、根据您使用的操作系统下载Linux64或Mac版本的命令行工具。

2、Linux版本请把命令行工具安装在/usr/bin目录下。

3、macOS版本请把命令行工具放在终端访问的对应目录下即可使用。

4、安装好命令行工具后,通过命令行工具登录环境

bita login -u <username> -p <password> -e <url>
--username:用户登录的用户名
--password:用户登录的密码
--url:系统访问的路径
例如:bita login -u username -p password -e https://www.bitahub.com

5、通过yaml文件,可以进行任务的提交,命令如下:

bita apply -f [filename.yaml]
--filename.yaml可使用绝对路径或相对路径