使用包年包月资源提交训练任务
本页用于把已经准备好的训练代码提交到包年包月 GPU 资源上运行。它覆盖创建页中会影响启动、排队、训练进程和输出结果的关键配置。需要先判断任务类型或资源来源时,请回到选择任务类型与资源来源。
提交前确认资源、代码、镜像和输出路径
进入创建页前,先确认训练任务能否拿到资源,并在第一个 batch 前顺利启动。
- 当前账号可以看到目标包年包月资源池,且目标资源池位于代码、数据、输出目录和镜像可用的可用区。
- 目标 Worker 规格 的 可启动数量 能满足本次 Worker 数量;如果不满足,先查看资源占用和排队情况,再决定等待、降规格或减少 Worker 数量。
- 训练代码已经能从固定路径读取数据。数据、模型和启动脚本建议放在共享高性能存储中,确保不同 Worker 都能读取同一份内容。
- 训练结果、checkpoint 和 TensorBoard 日志会写入挂载的共享存储路径,例如
/mnt/public/project-a/checkpoints/。如果只写入/tmp、/root、/workspace等任务本地路径,任务结束后通常无法取回。 - 容器镜像已经包含训练代码需要的 Python 包、系统库、CUDA/cuDNN/NCCL 运行环境和可执行入口。找不到镜像或依赖不确定时,先处理准备并验证容器镜像。
- 确认训练脚本报错时,创建页中的 启动命令 也会以失败状态结束。详见编写可靠启动命令。
- 分布式训练脚本已经知道如何使用 Worker 数量、每个 Worker 的 GPU 数量和平台注入的分布式环境变量。PyTorch DDP 任务可参考编写 torchrun 启动脚本。
- 长时间训练、Spot 训练或开启自动重启的任务,应能从 checkpoint 恢复。详见编写可恢复的训练代码。
提示
如果这是第一次在平台上运行该训练代码,建议先用同一镜像、同一存储卷在开发机中跑到第一个 batch。这样可以提前暴露依赖缺失、环境变量缺失、数据路径错误和 data collator 等代码问题。详见在开发机中试跑训练脚本。
选择训练任务和包年包月资源
在创建页中,任务类型选择 训练任务,资源类型选择 包年包月资源。这表示任务将使用租户已经购买的固定周期 GPU 资源,并从资源池中选择可启动的 Worker 规格 和 Worker 数量。
如果要提交可接受中断的临时库存任务,请改用使用 Spot 资源提交训练任务。
如果只是处理数据、生成样本索引或离线评估,请改用创建数据处理任务。
如果需要一次提交多条配置相近的训练任务,例如参数扫描或批量评估,请查看批量创建和管理任务组。
选择资源池、Worker 规格与 Worker 数量
计算资源决定任务能否立即启动、会排队多久,以及训练脚本看到多少个 Worker 和 GPU。先按代码需求选择资源,再根据页面上的可启动数量判断是否能提交。
选择资源池
选择包含目标 GPU 型号且可启动数量满足需求的资源池。资源池下拉列表会展示池中空闲卡数;页面上的 占用情况 和 负载排队情况 可用于判断资源是否被其他任务占用、是否已有任务在等待资源。
如果目标规格的 可启动数量 不足,任务提交后会进入排队。如果训练代码必须在某个窗口内启动,应先查看资源占用和排队情况,再决定是否降低 Worker 数量 或换规格。详见选择资源规格与查看排队情况。
选择 Worker 规格和数量
默认情况下,所有 Worker 使用同一种预定义规格,例如 1 卡、2 卡、4 卡或 8 卡。填写 Worker 数量 后,总 GPU 数量为:
总 GPU 数量 = 单个 Worker 的 GPU 数量 x Worker 数量例如选择 8 卡规格并填写 4 个 Worker,训练脚本需要按 4 个 Worker、每个 Worker 8 张 GPU 来启动。PyTorch DDP 任务中,平台会把 Worker 数量 注入为 WORLD_SIZE,并为每个 Worker 注入不同的 RANK。
可启动数量表示当前资源池还能放置多少个该规格容器。平台按 GPU 在各资源节点上的空闲分布计算这个数量,而不是只按剩余 GPU 总数计算。
判断是否使用自定义卡数
如果训练代码要求所有 Worker 拥有相同 GPU 数量,保持 自定义卡数 为关闭。多数 DDP、MPI 和 Ray 训练都更适合这种模式。
只有当训练代码能够处理 Worker 之间 GPU 数量不一致时,才开启自定义卡数。自定义卡数为 1-8 时,平台创建单个 Worker;大于 8 时,平台会创建多个完整 8 卡 Worker 和一个非 8 卡 Worker。此时需要特别确认训练脚本支持不同 Worker GPU 数量。
信息
自定义卡数模式下,页面展示的 可启动数量 指当前资源池可启动的最大 GPU 数量,不一定等于全部剩余卡数。它通常受完整 8 卡节点和非完整节点的剩余分布影响。
确认 RDMA 是否可用
只有当所选规格的 训练网配置 为 RoCE 或 IB,且每个 Worker 是 8 卡规格时,才能开启 RDMA。RDMA 通常用于多机大模型训练,可显著影响通信性能。
GPU 数量小于 8 卡时无法开启 RDMA。如果使用自定义镜像且 RDMA 检测异常,优先检查镜像是否安装 RDMA 依赖。详见RDMA 网络。
选择镜像与分布式框架
运行环境决定 Worker 使用哪个镜像,以及平台向训练脚本注入哪些分布式运行信息。
选择镜像
选择已经验证过的预置镜像或自定义镜像。镜像需要包含训练脚本依赖的运行时、Python 包和系统库。
如果创建页的 镜像 列表中找不到目标镜像,先确认:
- 镜像的 可用服务 包含任务。可用服务是在镜像中心手动配置的;如果没有包含任务,镜像可能只出现在开发机或推理服务创建页。需要调整时,编辑镜像的可用服务,详见限制可用服务范围。
- 镜像的 可用区 与本次训练任务选择的资源池所在可用区一致。可用区是在构建或导入镜像时手动选择的;如果镜像在其他可用区,当前资源池所在可用区的训练任务创建页不会显示它。需要跨可用区使用时,详见镜像仓库地址与可用区和导入或跨可用区迁移镜像。
直接改 启动命令 通常无法绕过镜像不可用的问题。
选择分布式框架
按照训练代码实际使用的框架选择。该字段会改变平台注入到 Worker 中的运行信息。
| 框架 | 何时选择 | 平台会提供什么 |
|---|---|---|
| 单机 | 只在一个 Worker 内运行,或训练脚本自己不需要跨 Worker 通信 | 不注入分布式启动变量 |
| PyTorch DDP | 使用 torchrun、torch.distributed 或 DDP 训练 | MASTER_ADDR、MASTER_PORT、WORLD_SIZE、RANK |
| MPI | 使用 OpenMPI 或 MPICH 启动分布式进程 | /etc/mpi/hostfile 以及对应 hostfile 环境变量 |
| Ray | 使用 Ray Head / Worker 集群运行任务 | 托管 Ray 集群和 Dashboard 访问配置 |
PyTorch DDP 常用变量含义如下:
MASTER_ADDR对应torchrun --master_addr。MASTER_PORT对应torchrun --master_port,默认29500。WORLD_SIZE对应torchrun --nnodes,即 Worker 数量。RANK对应torchrun --node_rank,从 0 开始。
如果训练脚本需要使用 Ray 或 MPI 的更完整启动方式,请分别查看Ray 配置指南和MPI 配置指南。
配置任务可视化与任务容错
长时间训练通常需要能看到训练进展,也需要能在中断或异常后恢复。根据训练代码实际支持的能力开启以下配置。
配置任务可视化
如果训练脚本会写 TensorBoard 日志,可开启 任务可视化,并填写日志目录。该目录应位于后续挂载的共享存储中,例如 /mnt/public/projects/llm-train/runs/${RUN_ID}。
日志路径可引用网页端 环境变量,便于每次运行写入不同目录。详见TensorBoard。
配置任务容错
容错 包含 环境检测、自动重启 和 Hang 检测。开启前先确认训练代码能从 checkpoint 恢复;平台可以重启任务,但无法恢复训练进程内存中的状态。
- 环境检测:在 Worker 就绪后、训练脚本开始前检查 GPU、RDMA、存储 I/O、allreduce 和 PyTorch/CUDA/NCCL 运行时。任务运行前检测会增加启动时间,但可以更早发现平台运行环境问题。
- 自动重启:任务失败或挂起时自动重启。重启后,训练代码需要自己加载已有 checkpoint。
- Hang 检测:用于识别训练长时间无进展的情况,并可配合进程栈采集定位问题。
信息
环境检测不会读取或解析训练数据,也不会判断训练代码、数据 schema 或 data collator 是否正确。如果这是第一次运行该训练代码,仍建议先在开发机中跑到第一个 batch。详见在开发机中试跑训练脚本。
详见配置训练任务容错和验证 checkpoint 保存与恢复。
填写启动命令和环境变量
启动方式决定平台如何运行训练脚本,以及任务状态是否能真实反映训练结果。
填写启动命令
启动命令 建议只做三件事:切换到代码目录、设置本次任务必要的环境变量、执行训练脚本。保持 启动命令 短,是为了让失败路径清楚:训练脚本报错后,任务应该立刻失败。
cd /mnt/public/projects/llm-train
bash scripts/train_ddp.sh警告
避免训练失败但任务显示成功
在平台上,任务状态是自动判定的。平台读取的是创建页中 启动命令 结束时的结果;Python traceback、loss、日志内容和 checkpoint 只用于排查,不会自动改变任务状态。
常见风险是日志转存、训练后上传结果、失败后 sleep 保留现场。这些逻辑都可能改变平台看到的最终结果。例如 python train.py 已经报错,但外层 launch.sh 继续执行上传结果、echo 或 sleep 后正常结束;或者 python train.py | tee train.log 中 tee 正常结束。此时任务可能显示成功。需要这些逻辑时,请使用编写可靠启动命令中的模板。
填写环境变量
环境变量 可用 API_KEY=xxx;DATA_DIR=/mnt/public/data;RUN_ID=exp-001 的形式填写。平台会把这些变量注入 Worker 运行环境。
敏感变量可设置为 仅创建人可见。启用后,创建人可在 任务详情 页和改配时查看变量值,其他用户无法在网页端查看;但有权限重跑的用户仍可复用原始 环境变量。
信息
同一个变量建议只在网页端 环境变量、启动命令 或训练代码中的一个位置设置。发生覆盖时,通常是训练代码中的值优先,其次是 启动命令,再其次是网页端 环境变量。
挂载存储并确认输出路径
存储配置会决定 Worker 能否读到代码和数据,以及任务结束后是否还能取回模型权重和日志。
- 系统盘:每个 Worker 的本地系统盘,默认 50 GiB。任务结束后不持久化,不适合保存训练结果。
- 公共数据:如果所选规格位于支持的可用区,可只读挂载常用开源模型和数据集到
/infini-data/。 - 高性能存储:选择文件系统、存储卷和挂载路径。代码、数据、checkpoint 和 TensorBoard 日志应使用该路径。
例如开发机中把共享存储卷挂载为 /mnt/public,训练代码路径为 /mnt/public/projects/llm-train,创建训练任务时也应把同一存储卷挂载到 /mnt/public。这样 启动命令 和训练代码中的路径不需要改动。
警告
任务结束后,Worker 本地文件系统会被清理。只保存在本地路径中的模型权重、checkpoint 和日志无法找回。
配置任务告警
如果任务运行时间长、排队成本高或需要团队协作,建议配置告警。告警用于在任务失败、长时间排队或其他关键状态变化时通知相关人员。详见任务告警。
填写基本信息并提交任务
填写任务名称、描述和标签后,点击 确认创建。名称允许重复,但建议包含项目、模型、数据版本或实验编号,便于后续筛选和重跑。
提交后,任务通常进入以下状态之一:
- 排队中:资源池当前无法满足 Worker 规格和数量。可继续等待,也可停止后降低 Worker 数量或更换规格。
- 部署中:平台正在分配资源、准备存储和网络、初始化环境并拉取镜像。
- 运行中:训练脚本已经启动。
如果任务长时间停留在 部署中,请在任务列表状态栏中打开详细进度,判断卡在分配资源、准备存储、初始化还是拉取镜像。详见查看任务状态、日志与事件。
提交后确认状态和输出
任务进入运行后,先确认三个信号:
- 任务日志中能看到训练脚本输出,并且没有在第一个 batch 前失败。
- 资源监控中 GPU 利用率、显存和网络使用符合预期。
- 共享存储输出目录中开始出现 checkpoint、日志或中间结果。
任务完成后,使用 AICoder 或开发机挂载同一存储卷,进入输出目录检查训练结果。需要下载大文件时,优先使用支持断点续传的工具,避免依赖网页端传输大量模型权重。详见获取训练结果。
如果需要用相同配置再次训练,可在任务列表中点击 重跑。改配重跑 时可修改 启动命令、Worker 规格、Worker 数量 和 镜像,但不能修改 资源类型、资源池、名称和描述。如果需要更换资源池后再次训练,使用 克隆 创建新任务,并先准备目标资源池所在可用区的共享存储数据和镜像。详见重跑训练任务。
定位无法提交或启动失败的问题
遇到问题时,先按失败发生的阶段定位。只有确认问题来自镜像或启动脚本后,再重建镜像或重写 启动命令。
- 目标规格无法选择或 可启动数量 不足:检查 资源池、Worker 规格、Worker 数量、自定义卡数 和排队情况。
- 镜像找不到或拉取失败:检查镜像是否已导入、可用服务是否包含任务、可用区是否与当前资源池所在可用区一致,以及镜像仓库访问权限。
- 第一个 batch 前失败:检查环境变量、依赖包、数据路径、启动命令 和训练代码预检结果。
- 任务显示成功但训练实际失败:检查训练脚本报错时,创建页中的 启动命令 是否以失败状态结束。
- 多机通信异常或 RDMA 检测失败:检查 Worker 规格 是否为 8 卡、训练网配置 和自定义镜像 RDMA 依赖。
- 训练结束后找不到结果:检查输出路径是否位于挂载的共享存储,而不是 Worker 本地目录。
更多排查入口请查看训练故障处理。