题目重点:针对大模型一批占 8 卡、小模型一批占 1 卡且批时延相同的追问,推导容量、保留与回填调度。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版批执行时间均为 T,且不可抢占;大模型批需要同时锁定 8 卡,小模型批占 1 卡。两队列的 batch 在调度前已经成形,组成 batch 的规则见 q5。
- 大模型/小模型的每批请求数分别为 b_L、b_S;题目只说 latency same,并不代表 batch 吞吐相同。
- 目标采用最大化完成请求数,同时设大模型最长等待上限 W_L 和小模型最小服务份额;正式优先级和 SLA 须由题目确定。
解题路线
- 先算资源时间:大批消耗 8T GPU·秒,完成 b_L 请求;8 个小批并行也消耗 8T GPU·秒,完成 8b_S 请求。因此按纯吞吐比较 `b_L` 与 `8b_S`,再叠加等待与 SLA,不能凭两个队列 QPS 相等就断言优先大模型。
- 简单保留调度:大队列头等待超过阈值或已到预留时隙,就停止接新的小批,让运行中的小批自然完成,收齐 8 卡后启动大批。若大队列为空,空卡全部给小批;若大批刚开始运行,小批会等至少 T,因此小模型尾延迟需预算。
- 若小批执行时间分布有尾巴,凑齐 8 卡可能被一张慢卡阻塞;给小批设置最长执行/超时、提前保留或固定部分容量可降低抖动。大批不可抢占时不能仅让 scheduler 在已有 7 张空卡上等待,还继续占 1 张跑小批,否则大批可能永远启动不了。
- 指标按模型分开看入队/执行时延、GPU 空闲碎片、batch 填充、拒绝率和 deadline miss;用到达率预测在大批饥饿、小批饥饿与整体利用率之间选策略。
手动走一遍
训练例 T=100ms,b_L=16、b_S=2。一个大批完成 16 请求;8 个小批并行也完成 16 请求,纯吞吐相当,此时应比较排队时长与 SLA。若 b_L=8,小批并行可完成 16,请求吞吐倾向小批;但大模型等待逼近 W_L 时仍需提前清空 8 卡让它运行。所有数字都是为了展示调度判据。
规模与取舍
双队列 FIFO 的入队 O(1),选队列 O(1);保留计时/完成事件与 8 卡状态维护 O(8)。系统实际难点是批执行时长方差、资源碎片和 SLA,不是队列数据结构。
易错点与追问
容易失分的边界
- 只因为大模型更快凑 batch 就永远优先大批,未考虑每批请求数和小模型等待。
- 长期把 1 张 GPU 留给小批,则需要全 8 卡的大批根本无法启动。
- 先分配部分 GPU 给大批再等其他卡,持有等待会降低利用率且可能死锁式饥饿。
- 把“latency same”解释为请求数、token 数或成本也相同。
- 把候选人的两队列思路说成面试官规定实现。
继续深挖
- 若大模型也可 tensor parallel 在 4 卡上跑但时延变长,如何比较资源时间与 SLA?
- 小模型 batch 有长尾时怎样提前 drain GPU?
- 多模型版本共池时,权重加载/切换成本怎样纳入调度?
