Skip to content

使用 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 库存列表中,按以下顺序判断是否可用:

  1. 选择训练数据和共享存储所在的可用区;如果使用公共数据,确认该可用区支持公共数据挂载。
  2. 选择训练代码支持的 GPU 型号和 GPU 数量。
  3. 确认可用库存大于 0。
  4. 确认价格和预算符合预期。
  5. 如果需要多机通信,确认训练网配置符合分布式训练需求。

如果目标规格没有库存,先改选其他可用区或规格,再决定是否需要调整训练代码。

信息

多 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 仍为该任务保留并继续运行”的情况。费用明细请以费用中心账单为准。