2024-11-21 一站式 AI 平台生日大派对!2024-11-21 一站式 AI 平台生日大派对! 无问芯穹特别推出多项超值福利!立即参与
Skip to content

发起任务

本文描述了如何使用 AIStudio 的任务功能。

您将了解:

  • 如何准备训练任务依赖的数据、环境。
  • 如何通过页面发起单机或分布式训练任务。
  • 如何查看任务状态。
  • 如何快速重跑任务。

NOTE

运行任务需要预付费计算资源,请提前购买包年/包月/包周/包日资源池。

训练数据

训练过程可能需要安装第三方软件、拉取代码和数据集(如 GitHub、HuggingFace)。为了避免网络不通、下载耗时等问题造成任务失败,我们提供以下参考方案:

  • 如果平台预置镜像无法满足需求,可制作自定义镜像,安装相关依赖项。
  • 提前将代码和数据集下载到共享高性能存储,然后通过挂载的方式使用。如果使用 AICoder 传输数据,可避免占用显卡资源。
  • 如果需要在训练任务中获取数据,建议:
    • 在训练开始前进行预拉取,并在数据拉取完成后进行检查,然后再执行训练;
    • 或者在采用 MPI 方式启动训练前先拉取数据。

NOTE

如有非常耗时的操作,强烈建议不要跟训练任务一起进行。建议先使用开发机或 AICoder 预先拉取代码、数据到共享高性能存储。

RDMA 环境变量

AIStudio 平台会进行自动感知当前资源与环境,自动进行最优配置。

在训练网为 RoCE 时,为了指定 RoCE 场景的网卡、网卡 ID、消除跨网卡通信,平台会预置以下 NCCL 环境变量:

shell
# 在完整的 8 卡 Pod 上,此值通常是 5。在非 8 卡的场景中,平台会动态获取并配置。
NCCL_IB_GID_INDEX = 5 
# RDMA 通信的网卡名称。8 个网卡可用(不含管理网卡)。
NCCL_IB_HCA = mlx5_1,mlx5_2,mlx5_3,mlx5_4,mlx5_5,mlx5_6,mlx5_7,mlx5_8  
# 关闭跨 RoCE 网卡间的网络,以避免不同网卡之间无法通信的情况。
NCCL_CROSS_NIC = 0

DANGER

  • 无需额外设置 NCCL_IB_TC
  • 请勿随意调整以上环境变量。

如果任务规模非常大,可以手动设置下指定拓扑建环的策略。虽然 AIStudio 平台默认会自动选择,但有时根据任务的不同规模和通信特征,尝试手动指定 ring 或者 tree 可能会有更好的性能:

shell
# 手动指定拓扑建环的策略
export NCCL_ALGO=Ring

发起训练任务

在智算云平台任务列表页面点击 创建任务,进入创建任务界面,可创建单机或分布式任务。

请根据页面提示,完成下方所有步骤中的配置。

Step 0 选择算力资源

首先,根据训练任务要求,在您购买的算力资源池中选择合适的 GPU 算力资源。

固定 Worker 规格模式

该模式下所有 Worker 采用统一算力配置。选择包年包月资源,平台会列出租户下的所有资源池,在资源池右侧可直接查看空闲可用卡数。

alt text

  • Worker 规格:资源池中的算力一般按单个 GPU 型号的数量分为 1、2、4、8 卡四种「算力规格」,配备不同的 CPU 核数与内存。您需要选择一种算力规格,并配置 Worker 数量。

    NOTE

    算力资源一般按单个 GPU 型号的数量分为 1、2、4、8 卡四种「算力规格」,配备不同的 CPU 核数与内存。默认模式下,只能按 AIStudio 预定义的规格使用算力,且每个 Worker 的规格必须相同。最佳实践是根据 Step 1 检查资源占用情况 确保当前资源池的剩余资源足够满足任务启动需求。

  • 共享内存:Worker 的 /dev/shm 分区大小。当前为固定值,每个 Worker 的共享内存为「Woker 规格」内存的一半。
  • Worker 数量:用于多机分布式任务。单机训练时保持为 1。

自定义卡数模式

如果开启自定义卡数,则允许 Worker 之间存在卡数差异。请在 Worker 规格列表选定规格,每种 GPU 规格均已列出可启动数量。自定义卡数的值必须小于可启动数量。

alt text

如果为自定义卡数为 1 - 8 卡,则创建单个 Worker。如果自定义卡数 > 8,则创建多个 8 卡 Worker 和一个非 8 卡 Worker。

NOTE

  • 单个规格的 可启动数量 可能小于该规格全部剩余卡数。可启动数量的计算方式为:剩余完整 8 卡节点的卡数 + 剩余非 8 卡节点中的最大空闲卡数。
  • 最佳实践是根据 Step 1 检查资源占用情况 确保当前资源池的剩余资源足够满足任务启动需求。

Step 1 检查资源占用情况

选定资源池后,可点击占用情况查看当前资源占用明细,并提前判断是否可启动多卡 Worker。假设当前资源池中每个资源节点均被占用了 1 卡,则无法启用 8 卡规格的 Worker。

alt text

选定资源池后,可点击负载排队情况查看当前资源池的排队情况,如果当前资源池中没有空闲资源,则任务将进入排队等待状态。

alt text

NOTE

队列中包含全部等待资源的负载(开发机、推理、任务)。队列非严格按照顺序调度。优先调度当前空闲可用卡数匹配负载需求的负载。例如,如果当前资源池中空闲了 1 个 8 卡资源节点,则优先调度队列中第一个申请 8 卡的负载。

Step 2 配置训练任务

上面已经根据训练任务的要求,完成了算力资源的配置。接下来,配置训练任务的其他参数。

alt text

  • 镜像:在 Worker 中执行训练代码的环境,镜像中包含 OS 和预装软件。可选择预置镜像、自定义镜像。详见镜像中心

  • 分布式框架: 如无分布式训练需求,可选择单机。如有分布式训练需求,可选用 Pytorch-DDP 或 MPI。

    • Pytorch-DDP:以 torchrun 方式运行,平台会自动给每个 Worker 添加如下环境变量:

      MASTER_ADDR={worker-0的podname}    # DDP 分布式通信的 master IP 地址或者 master 的名称,由系统负责解析
      MASTER_PORT=29500                  # 在 master addr上开启的端口号,默认设置为 29500
      WORLD_SIZE={POD数量}                # 启动的 pod 数量,也就是任务的节点数量(我们没有使用 NNODES 表示该数量),这里主要是考虑到跟 pytorch-operator 保持一致,方便从 kubeflow 迁移过来的用户
      RANK={POD ID}                      #  RANK 表示每个 POD 的 ID,从 0 开始编号,到 n-1,
    • MPI:以 MPI+hostfile 的形式启动任务,平台会自动分配必要的环境变量,并且已配置了 SSH 免密,保障 launcher 可以下发任务到 worker 上:

      # 环境变量:
      OMPI_MCA_orte_default_hostfile=/etc/mpi/hostfile    # OpenMPI 的默认 hostfile 路径,用 openmpi 启动任务时无需再指定 hostfile
      MPICH_HOSTFILE=/etc/mpi/hostfile                    # MPICH 的默认 hostfile 路径,用 MPICH 启动任务时无需再指定 hostfile
  • 任务可视化: 启用 TensorBoard 可视化功能,并提供日志的访问路径。在任务运行中,AIStudio 从该路径下读取 TensorBoard 日志并进行可视化展示。建议将日志写入共享高性能存储

  • 容错:如遇任务异常,会自动重启 Worker 或进程。默认最多重启 1 次,单个任务的生命周期中最多配置自动重启 10 次。如果超过最大重启次数,任务将失败并结束。

    TIP

    • 请确保您的训练代码已实现自动保存最新的 Checkpoint,并以实现从最新的 Checkpoint 恢复训练。
    • 单次任务中 Worker 默认重启 1 次,最多可配置为 10 次,如果问题持续,任务将失败并结束。
  • 启动命令: 可填写任务的环境变量及入口命令等,建议将训练过程封装在 bash 脚本中。建议参考优化训练任务的启动命令

  • 环境变量: 平台支持在任务外部管理环境变量。以 API_KEY=123;API_HOST=127.0.0.1; 格式输入多个环境变量后,平台自动解析出相应 Key 和 Value。在任务运行时,环境变量将自动输入至 Pod 中。

    NOTE

    • 该功能仅为方便用户从网页管理环境变量,无法覆盖任务启动命令和任务代码内设置的环境变量。
    • 环境变量覆盖关系: 训练代码 > 任务启动命令 > 任务外部的环境变量。
    • 登录任务 Worker 时的环境与任务代码执行环境不一致。如果在任务代码中设置了环境变量,无法在登录 Worker 时获取到该环境变量。可在任务 Worker 日志中打印环境变量。
    • 作为最佳实践,请避免在网页、启动命令、训练代码等多处设置环境变量,避免环境变量混乱。

Step 3 配置存储

  • 系统盘: 任务 Worker 的 / 目录的存储大小,固定 50GB。
  • 高性能存储: 挂载租户的共享高性能存储。如果需要使用共享高性能存储,必须在创建任务时创建所有挂载点。详见共享高性能存储

Step 4 填写基本信息

  • 名称:1~64 个字符,支持中英文数字以及- _,允许重复,名称不唯一。
  • 描述: 添加描述或者备注,长度 1~400 个字符,可留空。

完成表单配置后,点击确认创建,任务进入创建流程。创建成功后,您可以在列表中查看任务的状态。​

如果资源不足,任务会进入排队队列;资源足够时,进入部署中状态。​

查看部署进度

任务进入部署中状态后,将会执行一系列子操作。仅在所有 Worker 均完成一个子状态的情况下,任务才会进入下一个子状态。

如果任务长时间停留在部署中状态,建议在任务列表的状态栏中点击 ... 图标,在打开的弹窗中查看的详细进度。

如果在任何子状态发生错误,平台会自动重试。如果进度长时间停留在错误状态且无法恢复,建议停止任务,并重新发起。如果问题持续存在,请联系售后服务。

重跑训练任务

如果任务训练代码有误,或者需要修改配置后重新发起训练,可以点击任务列表中的重跑按钮,无需重复创建任务。

alt text

如果选择改配重跑,可修改任务启动命令、Worker 规格、Worker 数量、镜像等。

alt text

提交重跑任务后,任务进入清理中状态,随后开始重新部署。

WARNING

不支持修改任务的资源类型、资源池、名称和描述。