使用 Spot 资源提交训练任务
Spot 资源适合可以接受资源被回收、并且训练代码已经支持 checkpoint 恢复的训练任务。创建前先确认训练数据、checkpoint、TensorBoard 日志和训练输出都写入共享高性能存储,避免只保存在任务容器系统盘中。
如果需要使用租户已购买的固定周期资源,请改用包年包月资源提交训练任务。
提示
Spot 资源类型需要申请开通。如需使用 Spot 资源,请咨询商务或售后。
警告
Spot 资源可能因库存不足被中断回收。请不要将 Spot 资源用于不能接受中断的生产关键流程;使用前请确认代码、模型文件、日志、输出结果和其他重要数据已经保存到可持久化的位置。
开始前确认可恢复能力
Spot 资源可能因为库存变化或资源回收而中断。提交前先确认:
- 训练代码定期保存 checkpoint。
- 启动脚本会在开始训练时加载最近 checkpoint。
- checkpoint、TensorBoard 日志和训练输出都写入共享高性能存储。
- 确认训练脚本报错时,创建页中的 启动命令 也会以失败状态结束。
- 如果使用公共数据,确认所选 Spot 规格所在可用区支持公共数据挂载。公共数据为只读路径,不能作为输出目录。
如果还没有验证恢复流程,请先完成验证 checkpoint 保存与恢复。
创建 Spot 训练任务
本节说明如何从当前 Spot 库存中选择可用 GPU 规格,配置自动排队规则,并提交能在中断后从 checkpoint 恢复的训练任务。
以下步骤为完整创建流程。
Step 0 选择训练任务和 Spot 资源
在任务创建页中,任务类型选择 训练任务,资源类型选择 Spot 资源。Spot 创建流程不需要选择包年包月资源池,也不会展示资源池的占用情况和负载排队情况。
如果页面中没有 Spot 资源选项,通常表示当前租户或账号尚未开通 Spot 资源类型。
Step 1 选择可用库存
在 Spot 库存列表中,按以下顺序判断是否可用:
- 选择训练数据和共享存储所在的可用区;如果使用公共数据,确认该可用区支持公共数据挂载。
- 选择训练代码支持的 GPU 型号和 GPU 数量。
- 确认可用库存大于 0。
- 确认价格和预算符合预期。
- 如果需要多机通信,确认训练网配置符合分布式训练需求。
如果目标规格没有库存,先改选其他可用区或规格,再决定是否需要调整训练代码。
信息
多 Worker Spot 训练任务按整任务成组调度。平台会等待任务所需的全部 Worker 同时满足后再启动任务。例如选择 8 卡规格、Worker 数量为 2 时,需要两个 8 卡 Worker 同时可用。
运行中如果 Spot 资源被回收,任务会作为整体中断并按自动排队规则重新等待资源,不会只保留其中一个 Worker 继续运行。
Step 2 配置自动排队
创建 Spot 工作负载时,需要配置是否开启自动排队。自动排队默认关闭;开启后,可用资源不足时工作负载会自动进入队列等待资源,运行中工作负载被抢占后也可按规则重新排队。
- 单次最大排队时长:每次进入队列后可等待的最长时间,取值范围为 1-12 小时,需填写整数。重新排队后从 0 重新计时。
- 最大重新排队次数:因资源不足或工作负载被抢占导致重新排队时,最多允许再次进入队列的次数,取值范围为 0-3 次,需填写整数。设置为 0 表示不允许再次重新排队。
提示
排队时长不按重新排队次数叠加计算;每次排队单独计时。任一规则达到上限后,系统停止自动排队,工作负载进入异常状态,需要人工处理。部分详情页可能将“最大重新排队次数”显示为“最大重试次数”,两者对应同一项配置。
对训练任务来说,自动排队只负责重新等待并获取整任务所需的算力资源。任务重新运行时会再次执行 启动命令,不会恢复 Python 进程内存中的训练状态;训练代码需要自己加载 checkpoint。
Step 3 配置训练任务
在训练配置区域中,按训练代码需要配置以下信息:
- 镜像:选择已验证可运行训练脚本的镜像。详见准备并验证容器镜像。
- 分布式框架:单机训练选择 单机;PyTorch DDP 训练选择 PyTorch DDP,并使用torchrun 启动脚本。
- 启动命令:调用训练脚本,并确认训练脚本报错时,创建页中的 启动命令 也会以失败状态结束。详见编写可靠启动命令。
- 容错:Spot 训练建议开启 自动重启,但前提是训练代码能从 checkpoint 恢复。详见配置训练任务容错。
信息
自动排队和训练任务的自动重启不是同一项能力。自动排队用于重新等待 Spot 算力资源;自动重启用于任务进程失败后的重启。两者都不能恢复进程内存状态,长期训练仍需依赖 checkpoint。
Step 4 挂载存储
为训练任务挂载共享高性能存储,并把数据、checkpoint、日志和输出路径都指向该存储。
如果使用公共数据,确认所选 Spot 规格所在可用区支持公共数据挂载。公共数据为只读路径,不能作为输出目录。
Step 5 填写基本信息并创建
填写任务名称、描述和标签后,点击 确认创建。创建后在任务列表中查看任务状态;如果自动排队达到上限,任务会进入异常状态,需要人工处理。
配置状态通知
Spot 训练任务可能因资源回收进入排队,并在自动排队重新获取资源后再次运行。为减少人工刷新任务列表,建议按需配置飞书机器人告警通知。
常用触发条件包括任务进入排队中、任务进入运行中、任务状态异常和任务运行失败;如果需要在训练完成时收到提醒,也可以配置任务运行成功。同一条通知规则只能选择一个触发条件,如需接收多个状态变化通知,请创建多条规则。
收到任务进入运行中通知后,仍需检查训练日志中的 checkpoint 加载记录。通知只提示任务状态变化,不会恢复 Python 进程内存中的训练状态。
中断后检查恢复结果
任务被中断、重新排队或重启后,检查训练日志中是否出现 checkpoint 加载记录,并确认 global step、epoch 或样本进度已经恢复到预期位置。
如果任务重启成功但训练进度丢失,优先检查训练代码的 checkpoint 保存和加载逻辑。请回到编写可恢复的训练代码检查恢复流程。
常见问题
多 Worker Spot 训练会只回收其中一部分 Worker 吗?
不会。训练任务按整任务成组调度。如果任务需要多个 Worker,平台会整体分配、整体运行;资源被回收后,也会按整任务重新排队。
Spot 训练任务排队中会继续占用一部分资源并计费吗?
任务处于排队中时,不会保留已经抢到的一部分 Worker 等待其他 Worker。因此,不会出现“一个 8 卡 Worker 已经被回收,另一个 8 卡 Worker 仍为该任务保留并继续运行”的情况。费用明细请以费用中心账单为准。