调度策略与超时重排
概述
百度百舸 · AI 计算平台支持基于优先级的负载调度,旨在帮助用户在复杂的多任务环境中,通过合理的策略配置,最大化算力资源的利用率与任务出队效率。本文档详细阐述了平台支持的调度策略、任务流转机制以及解决“资源卡死”问题的超时重排功能。
核心概念与任务流转
在百舸平台中,用户可为分布式训练任务及在线推理服务设置高、中、低三个优先级。优先级决定了任务在资源竞争中的权重。
任务从提交到运行,主要经历两个阶段:排队阶段(即预分配阶段) 和 调度阶段。

1. 任务流转流程
任务的调度过程分为“入队”与“出队”两个关键环节:
| 环节 | 定义 | 说明 |
|---|---|---|
| 入队过程 | 从排队阶段(任务状态为排队中)进入调度阶段(任务状态为调度中) | 申请队列配额,计算资源分配量。 |
| 出队过程 | 从调度阶段(任务状态为调度中)进入调度成功(Running) | 满足具体的资源申请要求(如GPU、CPU等),开始运行。 |
2. 关键判定条件
- 入队条件:任务申请总资源 >= 队列空闲量 - 调度中任务申请资源配额。
- 出队条件:满足调度中任务的各种资源申请要求。
注意:调度策略仅影响尚未开始执行的任务顺序,不会影响已经开始运行的任务。
调度策略详解
百舸平台在队列维度提供了两种核心调度策略,您可在资源配额界面进行配置。
1. FIFO策略 (先进先出)
适用场景:对任务调度顺序有严格要求,需严格按照创建时间顺序执行的场景。
-
策略逻辑:
- 入队:按优先级(高>中>低)排序,同优先级下按创建时间(早>晚)排序。
- 出队:同入队逻辑,优先级高且创建时间早的任务优先获得资源。
- 优势:保证最早提交的高优任务最先被调度;允许早提交的大规格任务持续积累资源直至成功。
- 局限:可能导致晚提交的小规格任务因大规格任务“占坑”而长期无法获取资源,降低整体资源碎片利用率。
-
场景示例:为帮助您快速理解FIFO调度策略,我们提供了以下典型场景示例。
-
场景1:任务A因资源需求持续占据队头
- 场景描述:队列当前空闲量为16卡,且无调度中任务。用户依次创建任务A、任务B、任务C,其中任务A因资源需求较大,将始终停留在队头位置,直至预分配资源成功并进入调度中阶段。
- 运维建议:将任务A的优先级调整为中优,将任务B的排队顺序调整到队首,让任务B入队,顺利进入调度阶段。
-
| 任务名称 | 优先级 | 创建时间 | 申请卡数 |
|---|---|---|---|
| 任务A | 高 | 10点 | 24卡 |
| 任务B | 高 | 12点 | 16卡 |
| 任务C | 中 | 11点 | 16卡 |
-
场景2:后提交的高优先级任务B可以排到调度中的中优先级任务A的前面
- 场景描述:T1时刻,队列空闲16卡(1整机+2机×4卡),任务A调度中。T2时刻,提交任务B,因优先级高于任务A,直接进入调度中,满足资源条件后顺利运行。
- 任务状态详情:
| 任务名称 | 优先级 | 创建时间 | 申请卡数 | 阶段 |
|---|---|---|---|---|
| 任务B | 高 | 11点 | 8卡(1机) | 优先级高于任务A,可直接入队首,满足资源条件即调度成功。 |
| 任务A | 中 | 10点 | 16卡(2机) | 10点提交时进入调度中,由于任务B的插入,导致该任务重新进入排队。 |
| 任务C | 高 | 13点 | 16卡(2机) | 排队中(预分配阶段) |
| 任务D | 中 | 12点 | 16卡(2机) | 排队中(预分配阶段) |
2. 遍历策略 (Best Effort)
适用场景:追求资源利用率最大化,允许任务插队以填补资源碎片的场景。
-
策略逻辑:
- 入队:遍历排队中(**即预分配阶段)**的任务。若队首任务无法入队(如资源不足),则跳过并尝试后续任务。
- 出队:遍历调度中的任务。若队首任务无法出队,跳过并尝试后续任务。
- 优势:能够灵活利用零散资源,让小规格任务有机会在大任务等待期间快速执行。
- 风险:若一个任务进入“调度中”但无法真正运行(如因资源碎片无法满足),它将一直占据配额,导致后续所有任务阻塞。
-
场景示例与调度行为解析:为了帮助您更直观地理解遍历策略在不同资源竞争环境下的表现,以下提供三个典型场景及其应对建议。
- 场景 1:资源不足时的“队头阻塞”与跳过机制
- 场景描述:队列当前空闲资源为 16 卡。此时,队头任务(任务 A)申请 24 卡,由于资源不足无法立即入队(进入调度阶段)。根据遍历策略的“跳过机制”,系统不会让后续的小任务无限等待,而是会暂时跳过任务 A,允许后续资源需求满足的任务(任务 B)优先入队。
- 任务状态详情:
| 任务名称 | 优先级 | 创建时间 | 申请卡数 | 行为解析 |
|---|---|---|---|---|
| 任务 B | 高 | 11点 | 16卡 | 优先入队:资源满足,跳过阻塞的 A 先行调度。 |
| 任务 A | 高 | 10点 | 24卡 | 阻塞(Pending):资源不足,暂时滞留预分配阶段。 |
| 任务 C | 中 | 12点 | 16卡 | 排队等待:等待 B 调度结果及资源释放。 |
-
场景 2:细粒度资源碎片导致的“调度死锁”
-
场景描述:队列空闲量 16 卡(分布为:1 整机 + 2 机 × 4 卡)。
- 任务 A(10点创建,需 2 整机)率先进入调度中阶段,但因缺乏连续的整机资源而无法启动。
- 任务 B(11点创建,需 1 整机)虽资源足够,但受限于调度中的任务A,,预分配资源不够,被卡在预分配阶段等待任务 A。
- 结果:若不开启超时重排,任务 A 会一直占用配额却不释放,导致任务 B 及后续任务无法运行,形成死锁。
-
运维建议:
- 开启超时重排:配置调度超时阈值。当任务 A 在“调度中”状态超过设定时间,系统将自动将其退回“预分配阶段”,释放调度中的配额,从而让任务 B 顺利进入调度中并成功运行。
- 人工干预:管理员手动停止任务 A,解除阻塞。
- 任务状态详情:
-
| 任务名称 | 优先级 | 创建时间 | 申请卡数 | 当前阶段 | 状态说明 |
|---|---|---|---|---|---|
| 任务 A | 高 | 10点 | 16卡 (2机) | 调度中 | 资源碎片化,无法启动,阻塞后续任务。 |
| 任务 B | 高 | 11点 | 8卡 (1机) | 排队中(预分配阶段) | 预分配资源不够(空闲16卡-调度中16卡 = 0卡),排队等待。 |
| 任务 C | 高 | 13点 | 16卡 (2机) | 排队中(预分配阶段) | 排队等待。 |
| 任务 D | 中 | 12点 | 16卡 (2机) | 排队中(预分配阶段) | 排队等待。 |
-
场景 3:大任务持续阻塞下的“资源利用优化”
- 场景描述:与场景 2 类似,队列空闲 16 卡(1 整机 + 2 机 × 4 卡)。任务 A(需 2 整机)卡在调度中,导致后续任务 B、C、D 全部阻塞。此时,队列后方的任务 E(11点创建,仅需 1 整机)本可以运行,却被前方庞大的任务群阻挡。
-
运维建议:
- 开启超时重排:任务 A 到D超时后自动退回“预分配阶段”,系统重新扫描队列,此时任务 E 因资源满足且顺序靠前(相对于被退回的 A),可进入调度中并成功运行。
- 人工干预:停止任务 A,并将任务 B 至 D 的优先级调整为“中”或“低”。这将使高优先级的任务 E 在重排序后排在前面,从而顺利进入调度中。
- 任务状态详情:
| 任务名称 | 优先级 | 创建时间 | 申请卡数 | 当前阶段 | 优化潜力 |
|---|---|---|---|---|---|
| 任务 A | 高 | 10点 | 16卡 (2机) | 调度中 | 阻塞源,需通过超时或人工移除。 |
| 任务 B | 高 | 10点 | 16卡 (2机) | 排队中(预分配阶段) | 大任务,建议降级优先级以释放通道。 |
| 任务 C | 高 | 10点 | 16卡 (2机) | 排队中(预分配阶段) | 同上。 |
| 任务 D | 高 | 10点 | 16卡 (2机) | 排队中(预分配阶段) | 同上。 |
| 任务 E | 高 | 11点 | 8卡 (1机) | 排队中(预分配阶段) | 小任务,若能越过 A-D,即可利用当前碎片资源运行。 |
超时重排机制 (Timeout Requeue)
为了解决遍历策略中可能出现的“任务卡死”问题(即任务长期占据配额但无法运行),百舸提供了超时自动重排功能。
机制原理
当任务在调度阶段(Inqueue)因资源碎片、节点亲和性不满足等原因长期无法调度时,系统会监控其等待时间。一旦达到设定的超时阈值,系统将自动对该任务执行重排操作:
- 将该任务重新置回预分配阶段(Pending)。
- 任务进入冷却期,冷却结束后再次参与排队。
- ⚠️风险提示:当前任务的默认冷却时间为1min。如果排队任务过多,会导致自动重排的高优任务在冷却时间后,依然进入排队的队首,导致排队死锁。
配置建议
在创建或编辑队列时,可开启超时重排并设置阈值(最小值1分钟):
- 阈值设置较大:适用于需要为大规格任务预留资源的场景,避免大任务频繁被挤出。
- 阈值设置较小:适用于希望快速遍历队列、提高资源碎片利用率的场景,让合适的小任务尽快调度成功。
注:下图为超时重排设置
策略配置与最佳实践
1. 配置入口
用户可在创建资源队列或编辑现有队列的界面中,找到“调度策略”选项进行调整。
2. 场景化建议
| 场景描述 | 推荐策略 | 配置说明 |
|---|---|---|
| 严格有序开发 | FIFO策略 | 无需额外配置。适用于流水线作业,必须等上一个任务结束才能开始下一个。 |
| 高并发推理 | 遍历策略 | 侧重快速响应,利用遍历策略填补空闲资源,提升服务启动速度。注意容易有调度中任务阻塞问题,建议开启超时重排。 |
| 混合负载生产 | 遍历策略 + 超时重排 | 建议开启超时重排。 阈值设置较大:适用于需要为大规格任务预留资源的场景,避免大任务频繁被挤出。 阈值设置较小:适用于希望快速遍历队列、提高资源碎片利用率的场景,让合适的小任务尽快调度成功。 |
3. 故障处理建议
若发现高优先级任务因前方任务“卡死”而无法调度:
- 推荐:开启超时重排功能,让系统自动处理。
- 手动:管理员可手动停止长期阻塞的“头任务”,或调整后续任务的优先级,以释放资源通路。
评价此篇文章
