同一集群,利用率提升33个百分点:改变的是顺序

Hugging Face Blog 工具

摘要

本文提出了一种约束感知的GPU分配器,与FIFO调度相比,GPU利用率最高可提升33个百分点,突显了基于优先级的分配在企业AI系统中的关键作用。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/17 21:39

同一个集群,利用率提升33个百分点:改变的只是调度顺序

来源:https://huggingface.co/blog/Dharma-AI/gpu-management-pt2 返回文章列表 (https://huggingface.co/blog)

上一篇文章指出,企业AI面临的下一个真实瓶颈将是利用率而非计算能力,并在结尾提到目前尚无成熟GPU管理实践的标准方案。本文将阐述我们的解决方案。

我们构建了一个约束感知型GPU分配器,并在七种基准测试场景中将其与FIFO调度器进行对比。在相同硬件条件下运行相同工作负载,GPU利用率最高提升了33个百分点,优先级加权输出在所有场景中均有提升,最高达105%。硬件未做任何改动,改变的仅仅是分配决策的执行顺序。

在展示具体数据前需说明:以下所有改进数据均以相同场景下的FIFO基准为参照。利用率以百分点表示;价值提升以优先级加权输出的百分比增长表示。


精确定义的决策

“保持GPU繁忙“并非系统可执行的决策。决策需更明确也更复杂:在哪个时间步,哪块GPU以何种优先级运行哪个任务。形式化地说,这是针对每个GPU、任务和时间步组合做出的二元选择,输出结果是一个网格——在整个调度周期内,每个单元格对应一个任务名称或留空。

四种工作负载竞争该网格:训练、实时推理、批处理推理和量化。它们分为两种分配形态,而分配的难点正由此产生。训练、批处理推理和量化具有批处理特性:一旦启动,每个任务都需要连续占用GPU块且不被中断,直至完成。实时推理则相反:具有弹性,随需求曲线变化,每个时间步都可能随流量增减。

两种不兼容的形态在同一硬件同一时间步竞争,是核心矛盾所在。此外,单一类型内部还存在异构性:同一基础模型的训练任务可能持续数小时至数天,占用从一块到数十块GPU不等。


争用环境下FIFO的代价

本文所有对比的基准均为基于FIFO的调度器:实时推理从固定预留资源中分配,其他所有任务按到达顺序放置,不考虑优先级。

在集群有闲置容量时,这是合理的策略。此时分配顺序对利用率无影响,无论何种序列都能容纳所有任务,因此FIFO与更复杂的调度器填充的资源比例相同。一旦出现争用,排序成本就会从无形变为实际容量损失。这种损失体现在两个方面,且值得分别探讨。

**预留机制。**实时推理不能等待资源就绪;必须在流量需要时立即提供GPU。按到达顺序放置任务的调度器无法在低谷期释放GPU并在下一个高峰期前重新获取,因此保证可用性的唯一方式是取每个实时应用当日的峰值需求,并全天预留对应数量的GPU。这导致非峰值时段的资源闲置。一个中午需六块GPU、凌晨四点只需两块的应用会全天占用六块GPU,导致四块空闲GPU无法被任何批处理任务使用。它们既未被利用,也非真正可用。这解释了为什么在预留机制占主导的两个场景中,基准线仅略高于集群容量一半:混合控制场景为51.6%,训练密集型场景为53.6%。约半数资源池中,大部分空闲资源是被预留而非真正可用。无论集群是否争用,此成本都存在——争用只是使其显现。

**排序机制。**在真实争用下,能容纳哪些任务不仅取决于容量,更取决于放置顺序。顺序并非容量问题解决后的平局决胜因素,而是容量决策本身。FIFO按任务到达顺序分配,既不评估任务价值,也不检查剩余时间窗口还需容纳什么,因此高优先级工作不得不等待先到的任务,容量在后续任务无法使用的分配中被占用。

两者相互叠加。为实时需求峰值预留的资源块全天对队列中的所有批处理任务关闭,剩余资源则按请求的偶然顺序分配。

这就像航空公司把飞机分配给最先致电的包机客户,却发现无机可飞真正盈利的航线。全天预留用于数小时峰值的GPU,正如上文描述的停场飞机:处于待命状态,零产出,且无法为他人所用。

分配标注示意图 (https://cdn-uploads.huggingface.co/production/uploads/6825e93ede3594c18b8d97ac/OZn_vdP4F-2NZ0jvaKnQC.png)

[图示:并排的分配网格——上方为分配器,下方为FIFO,相同场景]

在五个针对真实争用设计的基准场景中,分配器同时提升了两个维度。利用率从52-85%区间提升至72-88%区间。优先级加权价值提升24.6%至105.1%,平均提升52%。每个场景的两项指标均有改善,无需权衡取舍。

最显著案例是8 GPU下的训练密集型负载:利用率从53.6%提升至87.0%,价值翻倍提升105%。通过回收预留的待机容量并按优先级分配剩余资源,挽回了33个百分点的已折旧固定资产利用率。(此数据仅反映单一基准排序。)

分配器消除了上述两种行为。实时需求被视为动态曲线而非固定上限,在每个时间步按实际需求分配,批处理类工作填充需求低谷,同时受实时任务连续时间步可切换GPU数量上限的约束。批处理类任务则按优先级在全时间窗口内排序而非按到达顺序放置。以下将阐述具体实现方式。


利用率是基础,优先级决定其价值

利用率衡量资源占用率:可分配GPU时间中被使用的比例。它不反映使用内容的价值。一个场景将两者完全分离,且其差距方向容易被忽视。

在规模测试中,30个任务在64块GPU上,FIFO与分配器产生相同的利用率(均为44.9%)和相同的吞吐量(30个任务完成27个)。但分配器多交付了15.9%的优先级加权价值。所有监控指标读数相同,但集群产出的实际价值却截然不同。

不量化优先级的分配目标可能使集群占用率完全相同、完成任务数完全相同,但交付价值更低。前文论证了占用率难以反映集群盈利能力;本数据实证了该观点。


问题形式化描述

替代方案不是更长的启发式规则列表。某些约束仅在全局层面有意义,任何局部规则无法表达:连续资源块、全周期GPU流转量预算保证、正在运行的任务不可被抢占。为满足这些要求,问题必须被形式化为一个整体。

五个约束条件定义了合法分配:

  • 每个GPU在每个时间步至多服务一个任务。
  • 每个任务需遵守其需求范围,且已运行任务的状态需延续保持。
  • 批处理类任务占用连续的GPU块,大小为2的幂次。
  • 实时任务在连续时间步间可切换的GPU数量存在硬性上限。
  • 已启动的任务不可被中断。

目标函数包含两项。将GPU分配给批处理类任务获得奖励,等于其优先级乘以时间衰减权重。未满足实时需求则产生惩罚,与缺口规模成正比。

权重比例即服务等级策略的数值化表达。实时需求惩罚权重是分配奖励权重的5至10倍。因此一单位未满足的实时需求成本等同于5至10个同等优先级批处理工作的GPU时间成本。这种不对称性是有意为之,意味着延迟义务通过同一优化框架强制实现,而非通过独立的自动扩缩容器与调度器竞争相同GPU。

这也使得弹性处理实时需求成为可能。分配器可在低谷期将GPU交给批处理工作,因为后续服务不足实时需求的惩罚成本远高于该批处理工作收益——是惩罚机制(而非静态预留)保障了可用性。

时间权重在调度周期内衰减的设计原因仅在在线系统中成立:到下一次调度时将有新任务到达。现在使用的容量价值高于未来承诺的容量。


已知约束条件的分配器

形式模型定义了合法且高分分配的形态。响应实时请求是独立任务,属于独立组件。这是NP难的组合分配问题,且调度器在每次任务到达时重新调用,因此决策必须在两次API请求间隔内完成。该延迟预算成为架构设计的固定约束,因此启发式算法在热路径运行,形式模型作为其规格说明在后台运行。

该启发式算法并非通用贪心分配器。其规则形式模型的结构约束,意味着它生成的每个网格都是合法分配。不是通常有效,而是设计保证有效。

该设计作用于全时间窗口而非逐个到达,是提升利用率的关键。分配器在放置任何任务前可见所有排队任务,可将空闲池保持为剩余工作实际可占用的形态,使需要特定大小连续块的批处理任务在轮到时仍有可用空间。优先级决定谁优先使用该空间。FIFO不具备此全局视图:它将容量分配给最先请求的任务,后到但需要特定形态的任务可能无合适资源可用,导致其无法调度,相应的GPU时间也被浪费。

在五个争用场景中运行时间为1至2毫秒,64 GPU 30任务场景为15毫秒——足以在每个请求到达时执行。

系统提供两种模式。快速模式仅运行分配器并返回网格,用于热路径。完整模式以该网格为起点,由形式模型尝试优化,适用于周期性审查而非逐请求决策。


实验结果

场景利用率价值价值提升延迟
混合控制(8 GPU,10任务)51.6% → 72.4%7,093 → 10,980+54.8%1 ms
实时争用(8 GPU,8任务)75.0% → 80.2%3,233 → 4,029+24.6%1 ms
训练密集(8 GPU,16任务)53.6% → 87.0%8,553 → 17,545+105.1%2 ms
大规模混合(14 GPU,16任务)76.8% → 82.7%13,977 → 20,101+43.8%2 ms
超配场景(8 GPU,9任务)85.4% → 87.5%4,311 → 5,760+33.6%1 ms
规模测试(64 GPU,30任务)44.9% → 44.9%44,233 → 51,248+15.9%15 ms
统一优先级(14 GPU,16任务)76.8% → 87.5%25,219 → 31,052+23.1%2 ms

除一个场景持平外,所有场景利用率均有提升。价值在所有七个场景中均有提升。

规模测试的重要性在于其在大规模下的有效性:64 GPU,30任务,15毫秒响应,价值提升15.9%。

统一优先级测试的重要性在于回应明显的怀疑:将所有任务覆盖为相同优先级,使任何优先级信号均不区分任务,分配器仍能将利用率从76.8%提升至87.5%,价值提升23.1%。收益并非完全源于优先级排序,全周期规划分配本身即贡献显著。


需求预测不准则一切徒劳

上述所有分析均假设调度器知道每个任务需要多少GPU时间,以及实时流量规模。两者均为预测值而非输入,调度器的效能受限于预测质量。

单一通用预测器无效,因为四种工作负载具有本质不同的成本驱动因素。这与前文的专业化论证相呼应:使任务专用模型超越通用模型的逻辑,同样适用于为调度器提供输入的预测器。

**训练并非单一工作负载。**它沿两个独立且可自由组合的轴变化。策略决定模型更新范围(全量微调 vs. LoRA等参数高效方法)。技术决定优化目标与训练循环(SFT、DPO、RLHF、RLVR、CPT)。差异显著:在相同基础模型上,LoRA将可训练参数减少最多10,000倍,GPU显存减少约3倍。DPO移除了RLHF的奖励模型与采样循环。仅基于模型大小的预测会平均数量级差异显著的训练运行,而这正是调度器决策的关键量——持续时间与GPU数量。我们的训练预测器基于22个特征,包括区分10种具体训练变体的分类变量。

**量化是可调度任务,而非后台杂务。**量化…

相似文章

GPU集群因等待存储而闲置,比我想象的更常见

Reddit r/ArtificialInteligence

在一次AI基础设施聚会上,多人反映GPU集群经常闲置,因为存储系统在训练期间无法足够快地提供数据,尤其是在使用旧NAS上的大型非结构化数据集时。与会者提到转向高吞吐量、针对S3优化的平台,如Cloudian HyperStore和VAST Data,以解决这一瓶颈。

@injaneity: https://x.com/injaneity/status/2075659478096376158

X AI KOLs Timeline

本文解释了批处理和并行操作如何改善AI计算机使用系统中的延迟和效率,重点介绍了pi-computer-use和cua-driver等开源实现,它们在Codex出现类似功能之前就取得了显著的性能提升。