时间片轮转求解器
时间片轮转让多个长时间求解任务分段共享计算资源:任务执行一段时间,安全返回结果与恢复点,释放资源,随后再次排队。异构调度进一步决定每一片应在哪个节点上执行,在解的质量、等待时间、恢复开销与费用之间取得平衡。
本页建立在远端求解之上,介绍异构计算与时间片轮转的设计和实施边界。下文的策略公式和参数示例用于说明调度方案,不是可以直接复制的配置或新增客户端 API;具体可用能力以部署版本的协议、节点能力与实际执行后端为准。轮转不会改变数学模型,也不保证硬实时期限或更快找到最优解。
1. 联合决定任务、节点与时间片
一次调度的结果是三元组
| 对象 | 调度所需信息 |
|---|---|
| 任务 | 模型类型与指纹、租户、优先级、期限、预算、预计求解时间与内存、恢复能力、可信恢复点 |
| 节点 | 支持的模型与后端、可用并发及许可证、健康状态、同类任务性能、价格与计费粒度、恢复兼容性 |
| 切片 | 任务及执行尝试标识、节点、时间额度、输入恢复点、输出结果与恢复点、实际耗时和费用 |
dispatcher 负责准入、排队、选点、时间片和重新调度;calculator 与执行桥接器负责模型重建、后端执行和恢复点生成。调度层使用结构化能力与报告,不通过分析日志猜测后端能力,也不直接依赖厂商 SDK。
简单任务适合一次执行完毕:如果求解耗时远小于保存、传输和重建开销,切片只会增加成本。一次执行并不意味着没有任务超时、预算和取消控制。
2. 可恢复性是轮转的准入条件
只有后端能够安全结束当前片,并为下一片提供有效恢复输入,才允许轮转。
| 能力组合 | 可采用的执行方式 |
|---|---|
| 原生中断 + 原生 checkpoint | 在兼容后端上恢复原生状态;具体恢复深度由后端声明 |
| 受控返回 + 可移植 checkpoint + warm start | 重建模型并注入历史可行解等信息,不承诺恢复搜索树 |
| 不满足以上条件 | 不可抢占执行,不用强杀进程模拟正常切片 |
可移植文件不等于可在任意求解器间迁移。每次恢复都要校验租户、任务、模型指纹、协议与格式版本、后端能力和对象完整性。原生 checkpoint 还可能受求解器版本及运行环境限制。
CP 的可移植恢复可以采用“模型快照 + incumbent + 指纹”,重新构建并 warm start。它与原生搜索树恢复是两种能力,不能混用名称或作相同的性能承诺。
3. 先筛选节点,再比较收益
先筛出健康、兼容、具有可用容量和许可证、租户允许且能够承担最低执行费用的节点。恢复不兼容的节点即使便宜,也不能加入候选集。
对候选节点,采用分量归一化后的评分,分数越低越优:
这里
若节点按粒度
应按实际计费规则另外纳入传输、存储、恢复及冷启动费用。若按每片 30 秒向上取整,六个 5 秒切片可能计费 180 秒,而一个 30 秒切片只计费 30 秒;缩短时间片不一定省钱。
对于剩余期限
已经过期的任务单独处理,不依赖公式中的小量继续运行。即使最快节点也无法满足期限,也应明确报告风险,由任务策略决定拒绝、降级或继续尽力求解。
4. 加权轮转与防饥饿
轮转的单位是可恢复的任务切片,不是操作系统线程。优先级可综合期限紧迫程度、等待时长、进展不足和饥饿补偿;各因素应有界并归一化,避免临近期限的单个任务无限压制其他任务。
仅按动态优先级反复排序不构成公平性保证。实施加权轮转时,应明确每轮服务配额或 deficit 记账、队列轮转规则与稳定的同分顺序,并为长时间未服务的任务保留机会。
例如只有一个可用执行槽,任务 A、B、C 的权重为 2、1、1,示意服务顺序可以是:
第 1 轮:A → B → A → C
第 2 轮:A → B → A → C这是服务机会的示例,不表示每片耗时或费用相等。若时间片可变,按片数公平与按计算时间公平并不相同,必须选择并记录计量口径。只有在容量、准入负载、单片时长和安全返回时间受到约束时,才能讨论有界等待;持续过载需要准入控制,不能只靠优先级补偿解决。
5. 动态时间片:兼顾开销与响应
时间片应随预计求解耗时、恢复成本、节点费用和期限调整。下面给出可解释的策略形式,而不是现有配置承诺:
这里两个时间估计以相同时间单位表示,
假设每片保存和下一片恢复总开销为
例如
方案可从最小 5 秒、基准 30 秒、最大 300 秒开始压测;这些只是调优起点,不是部署默认值。实际下限还受后端安全返回延迟影响。任务剩余期限必须预留保存、结果上传和收尾时间;剩余时间不足时可以不再派发,不能让最小片长覆盖任务期限。
6. 一片的生命周期与可信结果
一次切片执行按以下顺序组织:
- 选择任务与节点,计算时间片,预留预计费用。
- 校验输入模型和最近可信 checkpoint,创建新的切片及执行尝试标识。
- 重建或恢复模型,在支持的时间控制下执行。
- 正常结束或受控返回,产生执行报告、候选结果和恢复点。
- 校验身份、指纹和摘要,将对象可靠保存后再更新权威状态。
- 结算费用、更新进展、释放执行槽;任务完成,或进入后续调度。
切片可经历 PLANNED → RUNNING → CHECKPOINTING → SUSPENDED,也可能直接 COMPLETED 或 FAILED。重新排队是任务层面的行为;下一次执行创建新切片,不把任务的 QUEUED 混入切片状态机。具体任务转移见远端求解。
预期的时间片返回不是故障超时。切片额度、任务总时限、进程硬超时和节点心跳分别控制不同边界。旧执行尝试的迟到结果不能覆盖新尝试;状态写入需要幂等与并发版本检查。
保存失败时保留上一个可信恢复点与最优可信 incumbent。节点失联后,只有存在合格恢复输入才能恢复;否则只能按策略从固定模型输入重新执行。调度成功、切片完成或文件生成都不代表获得可行解,更不代表已经证明最优。
7. 异构迁移与进展反馈
迁移应把上传、下载、冷启动、模型重建、warm start 和许可证费用计算在内。可采用归一化评分的加性滞回阈值
配合最小驻留片数,避免节点间来回切换。若使用百分比阈值,必须明确分母和零值处理,不能直接对可能为负的评分取“改善 10%”。
非紧急任务可以先选经济节点;进展不足或期限风险上升时再评估升级。也可以先在高性能节点寻找 incumbent,再迁往经济节点继续改进或收紧界,但前提始终是恢复兼容且迁移后预计净收益为正。
反馈可包含目标值、界、gap、耗时、实际费用和后端可用的搜索统计。不同模型类型、规模和后端应分别估计性能;比较目标值时应统一最小化/最大化方向,限定相同模型指纹与目标。缺失的 gap 不应当作零,warm start 也不保证本片结果一定比上一片好。
可用 EWMA 更新同类任务的耗时估计:
估计需要样本数、时效和异常值控制。系统应保留跨片最优的可信解,不能用最新但较差的结果覆盖它。
8. 预算、协议与跨语言一致性
派发前预留费用,返回后按实际计费规则结算。剩余预算不足时,可以在能力允许的前提下降级节点、调整并发或片长,或者等待追加预算、返回可接受的 incumbent、按明确原因终止。预算不足不能映射为数学不可行。
Kotlin 与 Rust 客户端共享服务端协议语义;轮转策略留在服务端,不要求两端各自实现一个调度器。任务字段、节点能力、恢复方式和审计信息遵循统一的协议约定:
- 两种客户端提交相同模型时,时间单位、默认值、错误语义与恢复引用一致。
- 时长在线格式中采用约定的整数毫秒;字段缺失不意味着后端支持对应能力。
- 未知可选元数据可按协议忽略,但未知执行模式不能被静默解释为受支持模式。
- 恢复点跨端读取遵守格式版本、摘要、模型指纹及后端兼容性要求。
这里不提供虚构的 Kotlin/Rust 时间片配置调用。客户端接入与实际源码入口见远端求解,扩展字段在协议发布后再按对应版本使用。
服务端实现与部署说明见 remote-solver 源码和设计文档。