一句话结论
DeepShare 用统一指标配额保障度 QAD 把多租户 GPU 集群的弹性配额借用、预测性调度和干扰感知合用三个子系统串成闭环,在保障租户 QoS 的前提下把 GPU 利用率从 39.64% 提到 70.58%,QoS 合规率 93%。
复习定位
| 维度 | 内容 |
| 所属模块 | 论文工作 |
| 章节类型 | 论文项目类 |
| 解决问题 | 围绕 Maestro 与 DeepShare 的问题背景、系统设计、实现细节、实验结果和高频追问建立项目叙事。 |
| 面试抓手 | 按背景、方案、实现、结果、局限回答。 |
问题背景
多团队共享 GPU 集群的核心矛盾:
- 配额闲置:某个团队暂时没有训练任务时 GPU 空转浪费,实测集群平均利用率只有 40%。
- 配额不够:另一个团队赶 deadline 想多用几块卡,却因超配额被拒。
固定配额简单但浪费严重,完全共享利用率高但无法保障 SLA。问题本质:在保障每个租户配额的前提下,把闲置资源借给需要的人,原主需要时及时收回。
额外问题:即使 GPU 被分配出去了,很多训练任务在 I/O 或 CPU 预处理阶段 GPU 是空闲的。两个任务合用同一块 GPU 可以提升利用率,但会互相干扰——抢占 SM 和显存带宽,搞不好两个任务都变慢。
系统设计
统一控制信号——配额保障度 QAD,同时驱动三个子系统:
$$\mathrm{QAD} = \frac{AG_i(t)}{\min(q_i,\, DG_i(t))}$$
QAD = 1.0 恰好满足,< 1.0 欠缺,> 1.0 使用借来的额外资源。经 EMA 平滑避免瞬时波动。
子系统一:弹性配额借用(DRA)
空闲 GPU 可被其他租户借走跑低优先级任务。原主提交新任务导致 QAD 下降时,按 QAD 优先级回收——最欠缺的租户最先被满足。和固定配额的区别:闲置资源不浪费,但需要时保证能收回。
子系统二:预测性调度
Random Forest 预测作业运行时间(MAPE 31.84%,R² = 0.73)。调度排序采用词典序:
$$\big(\tilde{Q}_i(t)\uparrow,\; \hat{T}(j)\uparrow\big)$$
先按 QAD 升序(优先欠缺的租户),再按预测运行时间升序(短作业优先)。
抢占牺牲者选择:代价基抢占效率
$$E_j = \frac{R_j \cdot \hat{T}(j)}{1 + \alpha \cdot C_p(j)}$$
综合释放资源量 \(R_j\)、剩余时间 \(\hat{T}(j)\) 和抢占代价 \(C_p(j)\)(已完成进度的浪费 + checkpoint 保存时间)。
子系统三:干扰感知 GPU 合用
Random Forest 预测两个任务共享同一块 GPU 时的性能保持率(R² = 0.902)。特征来自硬件计数器(SM activity、memory bandwidth),而非模型架构,保证跨框架泛化。只有预测保持率高于动态容忍阈值时才允许合用。运行时持续监控,实际性能下降超过容忍度时立即驱逐低优先级伙伴。
整个系统实现为 Kubernetes scheduler plugin,覆盖 Filter → Score → Reserve → PostFilter → Permit 五个扩展点,端到端调度延迟 < 50ms。
核心结果
70.58%
GPU 利用率 (基线 39.64%)
核心定位
不考虑 Gang Scheduling 时,可以把 DeepShare 的 Kubernetes 实现拆成两层:
- Controller:租户级资源治理 — tenant、quota、QAD、Guaranteed/Best-effort 队列、准入、抢占决策。
- Scheduler Plugin:Pod 级调度执行 — 谁先出队、能不能放到某个节点、放哪个节点、是否允许 colocation。
面试一句话总结:Controller 管"资源权益和队列准入",Scheduler Plugin 管"Pod 出队和节点放置"。
调度对象简化:一个 Job 对应一个 Pod,不引入 PodGroup / minAvailable / Permit。
5-10 分钟中文论文讲解稿
这版适合面试时完整介绍,目标是让面试官听完后清楚知道:
- 这篇论文解决什么问题;
- 为什么这个问题重要;
- DeepShare 的核心思想是什么;
- QAD 是什么;
- DRA、预测调度、colocation 分别做什么;
- Kubernetes 实现大概怎么落地;
- 实验效果说明了什么。
你可以按这个版本背,也可以根据面试时间压缩。
开场:论文定位
我介绍的这篇论文是 DeepShare: Assurance-Driven Resource Management for Multi-Tenant GPU Clusters。它主要研究的是 多租户 GPU 集群中的资源管理问题。
简单来说,这篇论文想解决的问题是:
在多个团队共享一批 GPU 的情况下,如何既保证每个租户的 quota 和 QoS,又尽可能提高 GPU 利用率、降低作业排队时间。
1. 背景和问题
现在很多 AI 平台或者云平台都会有多租户 GPU 集群。比如不同团队、不同项目共用一批 GPU。为了公平,平台通常会给每个租户分配一个 quota,比如 A 团队 32 张 GPU,B 团队 16 张 GPU。
但是实际使用中会有一个矛盾。
如果我们严格按照 quota 静态隔离资源,那么就会出现资源浪费。比如 B 团队当前没有任务,它的 16 张 GPU quota 是空闲的,但 A 团队有很多任务在排队。如果系统不允许 A 使用 B 暂时空闲的 GPU,那么集群整体利用率就会下降。
反过来,如果系统允许 A 临时借用 B 的 GPU,又会出现另一个问题:当 B 后面提交了 Guaranteed 作业,需要拿回自己的 quota 时,资源可能已经被 A 的作业占住了。如果系统不能及时回收资源,就会破坏 B 的 QoS。
所以这里的核心矛盾是:
静态 quota 会降低利用率,过度共享又会破坏 QoS。
论文认为,现有系统的问题不只是某一个调度策略不好,而是 quota 管理、作业调度、抢占回收和 GPU 共享之间缺少一个统一的控制信号。
比如:
- 调度器可能只看作业优先级;
- quota 模块只看租户有没有超过 quota;
- 抢占模块只看哪个作业优先级低;
- colocation 模块只看 GPU 是否空闲或者干扰是否低。
这些模块如果各自决策,就很难同时保证 QoS 和利用率。
2. DeepShare 的核心思想
DeepShare 的核心思想是引入一个统一指标,叫 QAD,Quota Assurance Degree,也就是 配额保障程度。
它用来衡量:
一个租户当前 Guaranteed 资源需求中,有多少已经被满足。
也就是说,QAD 不是简单看一个租户用了多少 GPU,而是看它 应该被保障的资源有没有被保障到。
论文中 QAD 的作用是连接三个关键模块:
- Elastic Quota Regulation,也就是弹性 quota 调节 / DRA;
- Predictive Scheduling,也就是基于预测的调度;
- Interference-Aware Colocation,也就是干扰感知的 GPU 共享。
这三个模块都围绕 QAD 来做决策。
可以简单理解为:
QAD 低,说明租户保障不足,系统应该优先恢复它的 Guaranteed 作业;QAD 高,说明租户保障充分,系统可以更积极地允许资源借用和 GPU 共享。
3. QAD 是什么?
QAD 的直观定义是:
QAD = 已满足的 Guaranteed 资源 / 当前应该被保障的 Guaranteed 资源
更具体一点,瞬时 QAD 可以理解为:
如果租户当前没有 Guaranteed demand:
QAD = 1
否则:
QAD = 当前已分配的 Guaranteed GPU / min(租户 quota, 当前 Guaranteed demand)
这里分母用 min(quota, demand) 很关键。
举个例子,一个租户 quota 是 32 张 GPU。
如果它当前只需要 8 张 GPU,那么系统只需要保障它 8 张。只要它拿到 8 张,QAD 就是 1,而不是 8/32。
如果它当前提交了 100 张 GPU 的需求,但 quota 只有 32,那么系统只承诺保障 32 张,不会因为它提交了 100 张就认为系统欠它 100 张。
所以 QAD 避免了两个问题:
- 租户不能通过提交超大 demand 来放大资源缺口;
- 租户当前需求小于 quota 时,也不会因为没用满 quota 而被错误认为保障不足。
论文还对 QAD 做了平滑处理,因为瞬时 QAD 会因为短任务完成、突发任务到来、资源释放等事件频繁波动。
平滑公式是:
Q̃_i(t) = λ Q_i(t) + (1 - λ) Q̃_i(t - 1)
默认 λ = 0.3。
也就是说:
当前平滑 QAD = 30% 当前瞬时 QAD + 70% 上一轮平滑 QAD
这样系统不会因为短期波动频繁重排队列或者抢占 Best-effort 作业,但如果一个租户持续保障不足,平滑 QAD 仍然会逐步下降,从而提高它的恢复优先级。
4. 模块一:Elastic Quota Regulation / DRA
第一个模块是 DRA,弹性 quota 调节。
它解决的是:
怎么允许租户借用别人暂时不用的资源,同时保证这些资源之后能被回收。
DeepShare 把作业分成两类:
Guaranteed 作业
Best-effort 作业
Guaranteed 作业是 quota 内应该被保障的作业。它们会计入租户的 quota,并且在调度时优先级更高。
Best-effort 作业是机会型作业。它们可以使用集群中暂时空闲的 GPU,或者其他租户当前没有用到的 surplus capacity,但它们是可回收的。
这里的关键是:
Best-effort 可以借资源,但不能破坏 Guaranteed QoS。
当某个租户 Guaranteed 需求回来,导致它的 QAD 降低时,系统会优先回收 Best-effort 作业占用的资源。
所以 DRA 的核心逻辑是:
有空闲资源时,提高利用率;
Guaranteed 保障不足时,回收借出去的资源。
这就是 DeepShare 同时提升利用率和保证 QoS 的基础。
5. 模块二:Predictive Scheduling
第二个模块是 预测调度。
论文使用预测模型,比如 random forest,去预测作业完成时间或者剩余运行时间。这个预测信息主要有两个用途。
第一个用途是 队列排序。
DeepShare 的排序不是简单 FIFO,也不是单纯短任务优先,而是:
Guaranteed 优先于 Best-effort;
同一类作业里,平滑 QAD 低的租户优先;
QAD 接近时,预测运行时间短的作业优先。
也就是:
先恢复保障不足的租户,再用短任务优先降低平均排队时间。
这点很重要。预测运行时间只是第二排序键,它不能覆盖 QAD。也就是说,一个已经保障充分的租户,不能仅仅因为它的作业更短,就排到一个保障不足的租户前面。
第二个用途是 抢占代价估计。
如果需要回收 Best-effort 资源,系统不应该随便杀任务,而要考虑:
- 这个任务已经运行了多久;
- 剩余运行时间大概多长;
- 是否有 checkpoint;
- 重启成本多高;
- 抢占它能不能真正释放足够 GPU;
- 抢占后能不能提升低 QAD 租户的保障程度。
所以这里是一个 cost-aware preemption,而不是简单 priority-based preemption。
6. 模块三:Interference-Aware Colocation
第三个模块是 干扰感知的 GPU colocation。
它解决的是:
很多 GPU 作业并不能一直打满一张 GPU,如果让它们完全独占 GPU,会造成利用率浪费;但如果随便共享,又可能互相干扰,破坏 QoS。
GPU 共享的干扰来源很多,比如:
- 显存容量;
- 显存带宽;
- SM 算力;
- L2 cache;
- PCIe / NVLink;
- CPU dataloader;
- 网络通信。
所以 DeepShare 不只是看 GPU 有没有空,而是预测两个作业放在一起会不会产生过大 slowdown。
论文中提到使用 random forest 模型预测 colocation 干扰。如果预测干扰低于阈值,才允许 colocation。
而且这个阈值不是固定的,会受到 QAD 影响。
如果某个租户 QAD 很低,说明它的 Guaranteed 资源已经保障不足,那系统会更保守,避免它的作业受到共享干扰。
如果租户 QAD 较高,说明保障比较充分,系统可以更激进地允许 colocation,提高 GPU 利用率。
所以 colocation admission 是:
干扰感知 + QAD 感知
而不是单纯基于利用率。
7. Kubernetes 实现怎么落地?
论文说 DeepShare 是 Kubernetes-native,也就是它不是重新造一个集群系统,而是集成到 Kubernetes 生态里。
我理解比较合理的实现方式是:
Controller + Scheduler Plugin
Controller 负责租户级状态管理,比如:
- TenantQuota;
- Guaranteed / Best-effort 队列;
- QAD 计算;
- DRA 准入;
- Best-effort 回收策略。
Scheduler Plugin 负责调度路径,比如:
- QueueSort:按 Guaranteed first、QAD low first、runtime short first 排序;
- Filter:检查节点 GPU 是否足够、是否允许 colocation;
- Score:做 bin packing、碎片控制和干扰最小化;
- Reserve / Unreserve:维护资源账本;
- PostFilter:当 Guaranteed 作业调度失败时,选择低代价 Best-effort 作业进行抢占。
这里有一个关键点:
Kubernetes 默认调度器是 Pod 级的,但 DeepShare 的核心是 tenant/job 级资源保障,所以需要 Controller 维护租户级语义,再通过 Scheduler Plugin 影响 Pod 级调度。
8. 实验结果
论文做了两类实验。
第一类是 trace-driven simulation,基于 23,859 个作业的 trace。
结果显示:
- 平均 GPU 利用率达到 70.58%;
- 比 Lucid 高 29.5%;
- 排队延迟降低 46%;
- per-tenant QoS compliance 达到 93%。
第二类是在 16-GPU Kubernetes 集群上的部署实验。
结果显示:
- Job Completion Time 降低 34%;
- 吞吐和资源利用都有明显提升;
- 说明系统不只是模拟有效,在 Kubernetes 原型上也有实际效果。
论文还做了 ablation study。
比如:
- DRA 能降低排队延迟;
- predictive scheduling 能进一步优化调度顺序;
- interference-aware colocation 对降低排队延迟也有明显贡献;
- DRA 和 colocation 结合后效果更好。
这说明 DeepShare 的收益不是来自单个技巧,而是来自:
QAD 统一控制下,资源借用、预测调度和干扰感知共享的协同。
9. 论文贡献总结
我理解这篇论文的核心贡献有三个。
第一,提出了 QAD 这个连续的租户保障指标。它不是简单 quota,也不是简单资源使用率,而是衡量租户当前 Guaranteed 需求被满足的程度。
第二,用 QAD 把多个原本分散的资源管理决策统一起来,包括 quota 借用和回收、队列排序、抢占、colocation admission 和 QoS reporting。
第三,做了一个 Kubernetes-native 的资源管理系统,把 DRA、预测调度和干扰感知 colocation 结合起来,在保证 tenant QoS 的同时提高 GPU 利用率。
所以如果用一句话总结 DeepShare:
DeepShare 不是单纯追求更高 GPU 利用率,也不是单纯做静态 quota 隔离,而是用 QAD 这个统一指标,在多租户 GPU 集群里动态平衡 QoS 保障和资源效率。
10. 面试时的收尾版本
我认为这篇论文最有价值的地方在于,它抓住了多租户 GPU 集群里的核心矛盾:资源空闲时希望共享,提高利用率;资源紧张时又必须恢复租户 quota 保障。DeepShare 用 QAD 把这个矛盾形式化,然后用 DRA 解决资源借用和回收,用预测调度降低排队和抢占成本,用干扰感知 colocation 提高共享效率,同时通过 Kubernetes Scheduler Framework 落地。
所以这篇论文的核心不是某一个单点调度算法,而是一个围绕租户资源保障的统一资源管理框架。
关联模块
GPU 硬件与资源共享:提供硬件、显存、互联和利用率诊断基础。LLM 推理系统 / 分布式训练:提供大模型系统中的实际落点。Kubernetes / 调度与集群:提供平台、资源和多租户治理语境。专题综合题 / 论文工作:把基础知识组织成可复述的方案和项目叙事。
一句话结论
这一节给出 DeepShare 在面试里可直接背诵的完整口述版:不考虑 Gang Scheduling 时,Controller 维护两级租户队列、计算 QAD 并做 quota 准入,Scheduler Plugin 用 QAD-aware QueueSort 加 Filter/Score/Reserve/PostFilter 完成 Pod 级排序、落点和抢占。
复习定位
| 维度 | 内容 |
| 所属模块 | 论文工作 |
| 章节类型 | 论文项目类 |
| 解决问题 | 围绕 Maestro 与 DeepShare 的问题背景、系统设计、实现细节、实验结果和高频追问建立项目叙事。 |
| 面试抓手 | 按背景、方案、实现、结果、局限回答。 |
面试版完整回答(背诵展开版)
如果先不考虑 Gang Scheduling,我会把 DeepShare 在 Kubernetes 里的实现拆成 Controller 和 Scheduler Plugin 两部分。Controller 负责租户级资源治理,Scheduler Plugin 负责 Pod 级调度。
Controller 维护每个租户的 Guaranteed 队列和 Best-effort 队列,也就是论文里的 Q_i^G 和 Q_i^B。它 watch 用户提交的 GPU Job 或 Pod,读取 tenant、class、GPU request 和预测运行时间,然后放入对应租户队列。Controller 还会周期性统计每个租户的 quota 使用量,计算 QAD,并维护 TenantQuota 的 status。
Controller 还负责准入。对于 Guaranteed 作业,只有满足 U_i^G + R_j ≤ q_i 时才允许进入调度候选集;对于 Best-effort 作业,只有在没有可放置的 Guaranteed 作业,并且 U_i^B + R_j ≤ η·q_i 时才允许进入候选集。被准入的 Pod 通过移除 schedulingGate,或打上 admitted annotation 进入 kube-scheduler。
第二级集群队列由 Scheduler Plugin 的 QueueSort 实现:Controller 负责生成 admitted Pod 集合,QueueSort 在 kube-scheduler 内部按 DeepShare 规则排序——Guaranteed 优先于 Best-effort;同一类中 QAD 低的租户优先;QAD 接近时预测运行时间短的作业优先;最后用提交时间作为 tie-breaker。
后续 Scheduler Plugin 负责真正的节点决策。PreFilter 解析 tenant、class、GPU 需求和预测时间;Filter 检查节点 GPU 是否足够、是否满足共享和干扰约束;Score 做 bin packing、碎片控制和干扰感知打分;Reserve/Unreserve 维护 DeepShare 自己的资源账本;PostFilter 在 Guaranteed 作业调度失败且租户 QAD 很低时,选择低代价 Best-effort Pod 进行抢占。
两个队列的实现总结:第一级租户队列在 Controller 中显式维护;第二级全局队列不一定是单独物理队列,而是由 Controller 准入后的 Pod 集合 + Scheduler Plugin 的 QAD-aware QueueSort 共同实现。这样既保留 Kubernetes-native 的调度框架,又能实现 DeepShare 的 QAD 驱动资源管理。
面试版 60 秒背诵版
不考虑 Gang Scheduling 时,Controller + Scheduler Plugin 的分工是:Controller 管 tenant/job 级逻辑,Scheduler Plugin 管 Pod/node 级逻辑。
Controller 维护每个租户的 Guaranteed / Best-effort 队列,计算 QAD,做 quota admission 和 Best-effort cap 控制。通过准入的 Pod 才进入 scheduler。
Scheduler Plugin 通过 QueueSort 实现全局排序:Guaranteed first,QAD low first,runtime short first。然后用 Filter/Score 做节点选择和 colocation 判断,用 Reserve/Unreserve 更新资源账本,用 PostFilter 做 Best-effort 抢占。
第一级队列在 Controller 里,第二级队列由 admitted Pod 集合 + QueueSort 逻辑实现。
关联模块
GPU 硬件与资源共享:提供硬件、显存、互联和利用率诊断基础。LLM 推理系统 / 分布式训练:提供大模型系统中的实际落点。Kubernetes / 调度与集群:提供平台、资源和多租户治理语境。专题综合题 / 论文工作:把基础知识组织成可复述的方案和项目叙事。