同一集群利用率提升33个百分点,关键在任务排序

Hugging Face Blog 介绍了一套面向 GPU 集群的约束感知分配器。在相同硬件和相同工作负载下,该系统在训练密集型场景中将利用率从 53.6% 提升至 87.0%,核心变化不是增加 GPU,而是同时优化实时推理弹性需求与批处理任务的执行顺序。

提升 GPU 集群利用率,未必首先需要采购更多硬件。Hugging Face Blog 近日介绍了一套约束感知的 GPU 分配器,并将其与基于先进先出(FIFO)的调度器进行对比。测试使用相同硬件和相同工作负载,覆盖 7 个基准场景,结果显示,分配器在训练密集型场景中将利用率从 53.6% 提升至 87.0%,提高 33.4 个百分点;优先级加权产出提升 105.1%。

同一集群利用率提升33个百分点,关键在任务排序主题相关图片
图片来自:新浪财经网

这项工作的关键并不是简单地让 GPU 保持忙碌,而是重新决定“哪个任务在什么时间使用哪些 GPU”。文章将任务分为两类:训练、批量推理和量化通常需要连续占用一定数量的 GPU,直到任务结束;实时推理则会随流量变化,需要在不同时间点动态扩缩容。两类任务同时竞争集群资源,使得容量分配不仅取决于 GPU 总量,也取决于任务的排列顺序。

FIFO 调度的主要问题在于,它通常按照任务到达顺序分配资源,并为实时推理预留其日间最大需求。这种方式能够保证峰值流量下有足够资源,但在低谷时段,部分 GPU 会处于“已预留但未使用”的状态。文中一个示例显示,某实时应用中午需要 6 张 GPU、凌晨只需要 2 张 GPU,如果按照最大需求全天预留,就会有 4 张 GPU 在大部分时间无法交给批处理任务。

新的分配器将实时推理需求表示为随时间变化的曲线,而不是固定容量上限,并允许批处理任务填补流量低谷。同时,批处理任务不再单纯按到达顺序排队,而是根据优先级和整个调度时间窗口进行安排。系统还会考虑 GPU 连续占用、任务不可中断、实时任务在相邻时间点之间的 GPU 变动上限等约束,避免当前决策破坏后续任务的可执行空间。

测试结果显示,在 5 个存在明显资源竞争的场景中,利用率从 52%至 85%的区间提升到 72%至 88%,优先级加权产出提升幅度为 24.6%至 105.1%,平均提升 52%。在 64 张 GPU、30 个任务的规模测试中,FIFO 与分配器的利用率同为 44.9%,完成任务数也都是 30 个中的 27 个,但分配器的优先级加权产出仍高出 15.9%。这说明利用率和完成任务数相同,并不意味着集群产出了同等价值。

调度器的实现采用两层设计。形式化模型用于定义合法分配和目标函数,实时路径则由启发式分配器负责快速返回结果。文章称,该启发式分配器在 5 个竞争场景中的运行时间为 1 至 2 毫秒,在 64 张 GPU、30 个任务的测试中为 15 毫秒。系统同时提供快速模式和完整模式:快速模式直接返回分配结果,完整模式则以快速模式的结果为起点,进一步尝试优化,适合周期性评估。

这套方法仍然依赖准确的需求预测。文章指出,训练任务的 GPU 数量和运行时长会受到微调策略、训练方法等因素影响;量化任务则需要根据模型参数规模和具体算法单独估算;实时推理需求也不能简单按照峰值设定,而是要根据历史流量生成持续校准的需求曲线。

为降低预测误差带来的影响,系统规划 24 小时调度窗口,但只提交当前时间点的资源分配,并在新的数据到来后持续重新计算。正在运行的任务会被继承并固定,后续计划则根据实际状态更新。由此,较长的规划窗口用于避免短视决策,较短的提交周期用于吸收预测误差。

从结果看,任务排序并不是调度系统中的次要规则,而是直接影响资源能否被有效利用的容量决策。相同 GPU、相同任务和相同任务数量下,是否能识别实时需求的低谷、是否为后续任务保留合适的 GPU 组合,以及是否让高优先级任务先获得资源,都可能改变最终产出。