跳到主要内容

分布式训练

更新时间:2025-08-22 04:34:06

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

操作步骤​

通过控制台创建​

  1. 左侧导航栏,【模型开发与训练】->【分布式训练】,进入分布式训练控制台页面;
  2. 单击列表页面左上方的【创建】进入创建页面;
  3. 在创建页面填写相关参数,具体参数如下:
参数名称参数说明

任务名称

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

任务标签

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

TensorBoard

  • 选填,是否开启 TensorBoard。
  • 开启后,选择 TensorBoard 日志写入的路径,代码中需要将 TensorBoard 日志文件输出到该目录下。任务运行中可打开 TensorBoard 查看。

镜像选择

  • 必填,选择训练任务的镜像
  • 支持通过 平台镜像 、 自定义镜像 、 共享镜像 和 仓库地址 选择镜像
    • 平台镜像:平台提供了基于不同框架的镜像,此类镜像适合在 BitaHub 平台上进行训练任务,能够获得更好的兼容性和性能。您可以在创建分布式训练任务时,通过平台镜像的筛选选择合适的镜像。
    • 自定义镜像:如果您的训练任务需要特殊的环境或依赖,可以创建自定义镜像,将自定义镜像维护到私有镜像仓库中,在创建分布式训练任务时,从自定义镜像中选择合适的镜像。
    • 共享镜像:平台内其他用户共享给您的镜像。
    • 镜像地址:任何符合 OCI 规范的镜像地址,如果是私有镜像,需要填写账号密码。

计算框架

  • 必填,选择训练框架模版。
  • 支持 DeepSpeed 、 Colossal-AI 、 其他 框架类型发起分布式训练任务
    • 其他:默认选项,表示不限制框架,支持 PyTorch、Tensorflow、MXNet、Keras、Caffe 等主流框架。

任务配置

  • 必填,配置训练任务的实例规格

选择 DeepSpeed 、 Colossal-AI 计算框架时,操作详情见

选择 其他 框架类型时:

  • Role(节点组):必填,默认 worker,支持自定义,最多支持添加10个 Role。表示相同规格的节点组。
  • 资源类型:必填,支持选择【公共资源池】或【专属资源池】,默认选择公共资源池,专属资源池创建方式详见创建专属资源池
  • 资源池:必填,如果资源类型选择【专属资源池】,则支持通过资源池名称筛选,选择需要用到的专属资源
  • 实例规格:必填,通过选择的资源池,过滤可选的实例规格,每种实例规格包含特定的 CPU、内存、GPU 的数量及单价(专属资源池的实例规格不包含单价)
  • 节点数量:必填,每个 Role 可以包含多个相同规格的节点。
  • 启动命令:必填,填写任务的启动命令。用于分布式训练的关键参数比如 master_addr、node_rank 等参见下方“平台预置环境变量”。

WebTerminal

开启 WebTerminal 可在任务运行后,通过浏览器进入每个训练节点容器内的命令行终端,用于任务调试。

存储挂载

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

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

    数据集和模型也都需要配置挂载路径,将数据集或模型挂载到训练任务容器的指定路径。

网络秒级监控

  • 如果在任务配置中,选择包含 RoCE 或 IB 网卡的实例规格,可以开启网络秒级监控。
  • 开启后,任务运行监测过程中数据采集频率提升至每秒。

训练代码

  • 选填,支持在线配置代码
  • 在平台的代码管理菜单中,配置代码 git 仓库,任务运行时,平台将代码下载到 /code 路径下。
  • 也建议将代码放入文件存储中,通过存储挂载的方式使用。

环境变量

  • 选填,将会被注入到训练容器中的环境变量
  • 环境变量的输入格式为key=value,支持配置最多20个环境变量。
  • 平台预置环境变量见后文。
环境诊断
  • 选填,开启该配置后,在任务运行前会进行当前任务环境健康状态诊断。
  • 平台将对分配的节点资源(GPU、存储、网络等)进行检测。
  • 环境诊断时,将占用环境一段时间用于验证环境的可用性及稳定性给出诊断结果。单机检测预计占用5-10分钟,多机检测预计占用15-20分钟。
  • 如果环境检测不通过,则证明基础设施异常,可配置重新调度分配资源。
挂起检测
  • 选填,开启该配置后,支持检测任务是否出现挂起(Hang)。
  • 平台在任务运行时会对输出到标准输出或标准错误输出(stdout/stderr)的日志进行检测,超过设定的挂起检测时长未输出日志,则判定为任务挂起。
  • 支持配置挂起时长,默认为30分钟。
  • 如果检测到任务挂起,可配置重启当前训练任务。
自动重试
  • 选填,支持配置任务的自动重试。
  • 支持配置最大重试次数及重试间隔(上个任务终止到新任务提交之间的时长)
  • 支持配置触发重试的条件:
    • 任务失败
      • OnFailure:任务出现异常时,即退出码(exitcode)不为0,无条件重启任务
      • ExitCodeAndErrorMsg:定义任务运行失败时,需要重试的条件:退出码、错误日志格式。
      • Advanced:任务运行失败时,使用平台预置的重试条件,也可补充自定义的重试条件。
    • 环境诊断不通过
    • 任务挂起(Hang)
  • 任务重试时,将重新运行当前任务。请代码主动适配此逻辑,训练过程中不断保存模型 checkpoint,支持重启时感知到之前的 checkpoint 文件路径,并基于 checkpoint 继续训练。

通过命令行创建​

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

    1. 下载windows版本的客户端
    2. 下载Linux版本的客户端
    3. 下载macOS(Intel芯片)版本的客户端
    4. 下载macOS(Apple芯片)版本的客户端
  2. Linux 版本请把命令行工具安装在 /usr/local/bin 目录或其他 PATH 目录下,并添加可执行权限,例如:

    sudo mv bita /usr/local/bin
    sudo chmod +x /usr/local/bin/bita
  3. macOS 版本请把命令行工具放在终端访问的对应目录下即可使用。

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

    bita login -u <username> -p <password> -e <url>

    其中:

    • --username:用户登录的用户名
    • --password:用户登录的密码
    • -e:系统访问的路径 https://www.bitahub.com
  1. 通过yaml文件,可以进行任务的提交,命令如下:

    bita apply -f [filename.yaml]

平台预置环境变量​

在使用 PyTorch 或 TensorFlow 等框架时,需要获取 master 节点的 IP 或域名信息,平台提供预置的环境变量用于获取各个节点的地址。

比如创建分布式训练任务 job1 有1个 master 节点、2个 worker 节点:

  • **VC\_{role全大写}\_HOSTS:**当前 role(节点组)所有节点的地址,以逗号分隔。
    • VC\_MASTER\_HOSTS=job1-master-0.job1-worker
    • VC\_WORKER\_HOSTS=job1-worker-0.job1-worker,job1-worker-1.job1-worker
  • **VC\_{role全大写}\_NUM:**每个 role(节点组)的节点数量。
    • VC\_MASTER\_NUM=1
    • VC\_WORKER\_NUM=2
  • **VC\_TASK\_NAMES:**所有 role(节点组)名称,以逗号分隔。
    • VC\_TASK\_NAMES=master,worker
  • **VC\_TASK\_INDEX:**当前节点在当前 role(节点组)中的序号,如:
    • 在 master 第1个节点中:VC\_TASK\_INDEX=0
    • 在 worker 第1个节点中:VC\_TASK\_INDEX=0
    • 在 worker 第2个节点中:VC\_TASK\_INDEX=1

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

获取 worker 节点组的第1个节点地址,可使用下面的命令

export WORKER0=`echo ${VC_WORKER_HOSTS} | awk -F , '{print $1}'`