Dharma AI 团队构建了约束感知 GPU 分配器,与 FIFO 调度器在相同硬件上对比,利用率最高提升 33 个百分点,优先级加权产出平均提升 52%。关键不在硬件,而在分配顺序。
上一篇文章提出,企业 AI 的下一个真正瓶颈不在模型智能,而在 GPU 利用率;同时也指出,成熟的 GPU 管理实践尚无范式可循。本文给出的,正是这样一套实践。
Dharma AI 团队构建了一个约束感知的 GPU 分配器,并在七个基准场景下与 FIFO 调度器对比。在完全相同的硬件上运行完全相同的工作负载,GPU 利用率最高提升了 33 个百分点,优先级加权产出在全部场景中都提升,最高达 105%。硬件没有任何变化,变化的是分配决策的顺序。以下所有增益均以同场景 FIFO 结果为基准,利用率以百分点计,价值以优先级加权产出的百分比增长计。
决策,准确表述
“让 GPU 保持忙碌”不是系统能执行的决策。真正的问题更窄也更难:哪块 GPU 在哪个时间片运行哪个任务、以什么优先级。形式化地看,每个 GPU、任务、时间片的组合都是一个二元选择,输出是一张网格——整个调度周期内每块 GPU 的占用情况。
有四类工作负载竞争这张网格:训练、实时推理、批量推理和量化。它们分成两种分配形态:训练、批量推理和量化是批式的,一旦开始就需要连续占用一组 GPU 直到完成;实时推理则相反,是弹性的,跟随每个时间片的需求变化而伸缩。两种不相容的形态在同一时刻争抢同一批硬件,这是核心问题。同一类型内部也有异质性:同一基础模型的训练任务,短则几小时,长则数天,GPU 数从 1 到数十不等。
FIFO 在争抢下的代价
FIFO 的代价分两种。其一,预留。实时推理不能等容量,调度器若按到达顺序排任务,就无法在低谷释放 GPU 并在峰值前收回,唯一保证可用性的办法是按全天最大需求预留。一个中午需要 6 块 GPU、凌晨 4 点只需 2 块的应用,会占用全部 6 块整整 24 小时,其中 4 块空闲 GPU 一整天都不能给批任务用。在预留主导的两个场景中,基线利用率仅为 51.6% 和 53.6%。其二,排序。在真正争抢时,哪些任务能容下不仅取决于总容量,还取决于放置顺序。FIFO 按到达顺序放置,不考虑任务价值,也不考虑后续任务是否还有合适形状,于是高优先级任务排在先到者之后,容量被后续任务无法利用的放置方式提前占死。两者叠加,相当于航空公司把飞机先派给先来的包机,真正赚钱的航线反而无机可用。

在五个专为争抢构建的场景中,分配器同时改善了这两个指标:利用率从 52%–85% 区间提升到 72%–88%;优先级加权价值增长 24.6% 至 105.1%,平均 52%。最强单例是 8 卡上的训练密集型负载:利用率从 53.6% 升至 87.0%,价值翻倍以上(+105%)。这 33 个百分点的收益来自收回预留的备用容量,并按优先级放置其余工作。
利用率是必要条件,优先级才把利用率变成价值
规模测试中,30 个任务分布在 64 块 GPU 上,FIFO 与分配器的利用率完全相同,都是 44.9%,完成的任务数也相同,都是 27/30,但分配器多交付了 15.9% 的优先级加权价值。仪表盘读数完全相同,产出却实实在在不一样。不考虑优先级的指标,可以在利用率相同、完成数相同的情况下,交付更少的价值。
把问题写下来
合法的分配由五个约束定义:一个 GPU 每个时间片最多服务一个任务;每个任务遵守需求区间,且已运行的部分继承并保持;批式任务占用 2 的幂大小的连续 GPU 块;实时任务在相邻时间片之间可调换的 GPU 数有硬上限;已开始的任务不可中断。
目标函数有两项:把 GPU 分配给批式任务,获得等于优先级乘以时间衰减权重的收益;未满足实时需求,则按短缺规模成比例惩罚。实时惩罚权重是分配权重的 5 到 10 倍,这意味着一个单位的实时需求缺口,代价相当于 5 到 10 个 GPU-时间片的同等优先级批任务。非对称是有意为之,延迟义务被写进与批任务同一个优化问题,而不是由独立的自动扩缩器去和调度器抢 GPU。时间衰减权重存在是因为在线系统中,下一轮调度会有新任务到达,现在使用的容量比未来承诺的容量更值钱。
约束感知的分配器
求解这个 NP 难的组合分配问题,必须放在热路径上。Dharma AI 的做法是:启发式调度器负责在线响应,形式模型作为规范在后台校验。启发式规则本身就是形式模型的结构性约束,因此它产出的每一张网格按构造就是合法的——不是碰巧有效,而是设计上合法。分配器会先看到队列里的全部任务再逐个放置,能保持自由池的形状与剩余工作匹配,批式任务要的连续块总能有空间;优先级决定谁先选。FIFO 两者都做不到。在五个争抢场景下,运行耗时 1 到 2 毫秒;64 卡 30 个任务时 15 毫秒。系统提供两种模式:快速模式只运行启发式,完整模式以启发式结果作为形式模型的起点做改进,适合周期性复核。
结果
| 场景 | 利用率 | 价值增益 | 延迟 |
|---|---|---|---|
| 混合控制(8卡,10任务) | 51.6%→72.4% | +54.8% | 1ms |
| 实时争抢(8卡,8任务) | 75.0%→80.2% | +24.6% | 1ms |
| 训练密集(8卡,16任务) | 53.6%→87.0% | +105.1% | 2ms |
| 大规模混合(14卡,16任务) | 76.8%→82.7% | +43.8% | 2ms |
| 超订(8卡,9任务) | 85.4%→87.5% | +33.6% | 1ms |
| 规模测试(64卡,30任务) | 44.9%→44.9% | +15.9% | 15ms |
| 统一优先级(14卡,16任务) | 76.8%→87.5% | +23.1% | 2ms |
统一优先级测试排除了“只是按优先级排序”的怀疑:把所有任务优先级设为相同,分配器仍将利用率从 76.8% 提升到 87.5%,价值提升 23.1%。跨周期的放置规划本身就能带来收益。
需求预测不准,一切都白搭
这一切都建立在预测准确的前提上:调度器要提前知道每个任务需要多少 GPU 小时、实时流量会是多少。四类负载的成本驱动因素不同,不能用单一通用估计器。训练本身不是一种负载:策略轴(全量微调 vs LoRA)和技法轴(SFT、DPO、RLHF 等)可自由组合;LoRA 可让可训练参数减少最高 1 万倍、GPU 显存约为全量微调的 1/3。Dharma AI 的训练预测器基于 22 个特征,其中包含区分 10 种具体训练变体的类别变量。量化是一个可调度的任务,需要单独的预测器。实时推理则按小时流量历史重建每周需求曲线,再映射到 GPU 数,预测器与优化器对“切换成本”的假设一致,这是替代峰值预留的前提。
优化一整天,只承诺当前一小时
预测会错怎么办?架构用滚动优化吸收误差:调度器优化 24 小时周期,但只提交当前时间片,每 30 到 60 分钟重跑一次。上午 9 点的分配是真实的,10 点到下午 5 点的计划只为了让 9 点的决策知道未来存在。真实的 10 点分配来自 10 点那次运行、基于新数据。误差被再优化吸收,而不是累积。周期计划本身也是预测产品,能提前暴露实时覆盖风险和可预见的空闲窗口。
这能推广到什么
航空业解决利用率问题,靠的不是计算最优时刻表,而是把运营纪律编码进事情发生的顺序里。这里同理:33 个百分点的利用率提升、平均 52% 的优先级加权产出增长,来自把集群物理允许的约束编码进决策顺序。结构战胜了精巧。GPU 早已安装、早已折旧,增益来自选择如何花掉它们。
原文链接:Hugging Face
本文由前途科技编辑整理
免费获取企业 AI 成熟度诊断报告,发现转型机会
关注公众号

扫码关注,获取最新 AI 资讯
3 步完成企业诊断,获取专属转型建议
已有 200+ 企业完成诊断