发起任务
本文描述了如何使用 AIStudio 的任务功能。
您将了解:
- 如何准备训练任务依赖的数据、环境。
- 如何通过页面发起单机或分布式训练任务。
- 如何查看任务状态。
- 如何快速重跑任务。
NOTE
运行任务需要预付费计算资源,请提前购买包年/包月/包周/包日资源池。
训练数据
训练过程可能需要安装第三方软件、拉取代码和数据集(如 GitHub、HuggingFace)。为了避免网络不通、下载耗时等问题造成任务失败,我们提供以下参考方案:
- 如果平台预置镜像无法满足需求,可制作自定义镜像,安装相关依赖项。
- 提前将代码和数据集下载到共享高性能存储,然后通过挂载的方式使用。如果使用 AICoder 传输数据,可避免占用显卡资源。
- 如果需要在训练任务中获取数据,建议:
- 在训练开始前进行预拉取,并在数据拉取完成后进行检查,然后再执行训练;
- 或者在采用 MPI 方式启动训练前先拉取数据。
NOTE
如有非常耗时的操作,强烈建议不要跟训练任务一起进行。建议先使用开发机或 AICoder 预先拉取代码、数据到共享高性能存储。
RDMA 环境变量
AIStudio 平台会进行自动感知当前资源与环境,自动进行最优配置。
在训练网为 RoCE 时,为了指定 RoCE 场景的网卡、网卡 ID、消除跨网卡通信,平台会预置以下 NCCL 环境变量:
# 在完整的 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 可能会有更好的性能:
# 手动指定拓扑建环的策略
export NCCL_ALGO=Ring
发起训练任务
在智算云平台任务列表页面点击 创建任务,进入创建任务界面,可创建单机或分布式任务。
请根据页面提示,完成下方所有步骤中的配置。
Step 0 选择算力资源
首先,根据训练任务要求,在您购买的算力资源池中选择合适的 GPU 算力资源。
固定 Worker 规格模式
该模式下所有 Worker 采用统一算力配置。选择包年包月资源,平台会列出租户下的所有资源池,在资源池右侧可直接查看空闲可用卡数。
- 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 规格均已列出可启动数量。自定义卡数的值必须小于可启动数量。
如果为自定义卡数为 1 - 8 卡,则创建单个 Worker。如果自定义卡数 > 8,则创建多个 8 卡 Worker 和一个非 8 卡 Worker。
NOTE
- 单个规格的 可启动数量 可能小于该规格全部剩余卡数。可启动数量的计算方式为:剩余完整 8 卡节点的卡数 + 剩余非 8 卡节点中的最大空闲卡数。
- 最佳实践是根据 Step 1 检查资源占用情况 确保当前资源池的剩余资源足够满足任务启动需求。
Step 1 检查资源占用情况
选定资源池后,可点击占用情况查看当前资源占用明细,并提前判断是否可启动多卡 Worker。假设当前资源池中每个资源节点均被占用了 1 卡,则无法启用 8 卡规格的 Worker。
选定资源池后,可点击负载排队情况查看当前资源池的排队情况,如果当前资源池中没有空闲资源,则任务将进入排队等待状态。
NOTE
队列中包含全部等待资源的负载(开发机、推理、任务)。队列非严格按照顺序调度。优先调度当前空闲可用卡数匹配负载需求的负载。例如,如果当前资源池中空闲了 1 个 8 卡资源节点,则优先调度队列中第一个申请 8 卡的负载。
Step 2 配置训练任务
上面已经根据训练任务的要求,完成了算力资源的配置。接下来,配置训练任务的其他参数。
镜像:在 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 均完成一个子状态的情况下,任务才会进入下一个子状态。
如果任务长时间停留在部署中状态,建议在任务列表的状态栏中点击 ...
图标,在打开的弹窗中查看的详细进度。
如果在任何子状态发生错误,平台会自动重试。如果进度长时间停留在错误状态且无法恢复,建议停止任务,并重新发起。如果问题持续存在,请联系售后服务。
重跑训练任务
如果任务训练代码有误,或者需要修改配置后重新发起训练,可以点击任务列表中的重跑按钮,无需重复创建任务。
如果选择改配重跑,可修改任务启动命令、Worker 规格、Worker 数量、镜像等。
提交重跑任务后,任务进入清理中状态,随后开始重新部署。
WARNING
不支持修改任务的资源类型、资源池、名称和描述。