请求调度基础:调度的目标、策略分类与批处理的关系

好,咱们接着往下聊。上一章我们把动态批处理的整体框架搭起来了,你可能会问:批处理是批处理,调度是调度,这两者到底怎么配合?

我个人习惯把调度看作是批处理的“大脑”。没有调度,批处理就像无头苍蝇,乱撞一气。今天我们就来拆解这个大脑——请求调度。

一、请求调度的目标:到底在调度什么?

说白了,调度就是决定“下一个该处理谁”。但决定权背后,藏着几个核心目标。

  • 高吞吐量:单位时间内处理完的请求越多越好。我见过一个团队,调度策略没选好,GPU利用率只有30%,换了策略直接飙到85%。
  • 低延迟:尤其是P99延迟,用户可不想等太久。你想想看,一个聊天机器人如果每次回复都要3秒,谁受得了?
  • 公平性:不能让某个请求一直饿死。我曾经遇到过一个大模型服务,短请求总是被长请求插队,结果短请求的P99延迟飙升到10秒。
  • 资源利用率:GPU显存、算力、带宽,这些都是钱。调度不好,就是浪费。

核心矛盾:高吞吐和低延迟往往是对立的。批处理越大,吞吐越高,但单个请求的等待时间也越长。调度就是在这两者之间找平衡。

二、调度策略分类:三种经典玩法

调度策略有很多种,但最基础的三种,你必须要掌握。我当年刚入行时,就是靠这三种策略打天下的。

1. FCFS(先来先服务)

最简单的策略。谁先到,谁先上。就像排队买奶茶,先来的人先拿到。

  • 优点:实现简单,公平性直观。
  • 缺点:短请求容易被长请求阻塞。我记得有一次,一个长文本生成任务占了整整30秒,后面几十个短查询全部排队,用户体验极差。

避坑指南:我曾经在早期项目里直接用FCFS,结果被用户投诉“服务卡死了”。后来才发现,FCFS在请求长度差异大的场景下,简直就是灾难。

2. SJF(最短作业优先)

谁的任务短,谁先处理。这听起来很合理,对吧?

  • 优点:平均等待时间最短,理论上最优。
  • 缺点:长任务可能永远得不到执行——这就是“饥饿”问题。你想想看,如果一直有短请求进来,长请求就永远排不上队。

嗯,这里要注意。SJF需要你提前知道任务的执行时间。但在推理场景下,我们往往不知道一个请求要生成多少个token。所以,实际中我们常用的是“预估SJF”——根据prompt长度和历史数据来估算。

3. 优先级调度

给每个请求打一个优先级标签。VIP用户优先,普通用户排队。

  • 优点:灵活,可以满足业务需求。
  • 缺点:低优先级请求可能被饿死。而且,优先级怎么定?定错了反而更糟。

注意:优先级调度一定要配合“老化机制”。如果一个低优先级请求等待太久,就自动提升它的优先级。否则,你可能会被用户骂死。

三、调度与批处理的关系:不是各自为战

很多人以为调度和批处理是两回事。其实不然。它们的关系,我可以用一句话概括:调度决定“谁进批”,批处理决定“怎么批”

具体来说:

  • 调度器:从等待队列中选出一批请求,交给批处理器。
  • 批处理器:把选出的请求合并成一个batch,送到GPU执行。

举个例子。假设有10个请求在排队:

  • 调度器用SJF策略,选出5个最短的请求。
  • 批处理器把这5个请求拼成一个batch,一次推理搞定。

你看,调度器决定了batch的组成,批处理器决定了batch的执行效率。两者配合得好,才能发挥最大威力。

我的经验:我曾经在一个项目中,调度器用优先级,批处理器用动态批处理。结果发现,高优先级请求总是凑不够一个batch,导致批处理效率低下。后来我改成“优先级+等待超时”的混合策略,才解决了问题。

四、一张图看懂调度与批处理

下面这张SVG图,展示了请求从进入队列到最终执行的完整流程。你可以看到调度器和批处理器是如何协同工作的。

请求队列 Req1 (长) Req2 (短) Req3 (中) Req4 (短) Req5 (长) ... 调度器 调度器 策略:SJF 选出短请求 Req2, Req4 批处理器 批处理器 合并batch [Req2, Req4] 一次推理 GPU

五、实际项目中的调度策略选择

说了这么多理论,咱们来点实际的。我在项目中总结了一个简单的选择指南:

场景 推荐策略 原因
请求长度差异小 FCFS 简单,公平,没有饥饿问题
请求长度差异大 SJF + 老化 降低平均延迟,防止长请求饿死
有VIP用户 优先级 + 超时 保证高优用户,同时防止低优饿死
混合场景 多级队列 不同队列用不同策略,灵活

我的建议:不要一开始就追求完美策略。先用FCFS跑起来,然后观察请求分布,再逐步优化。我见过太多团队在调度策略上过度设计,结果浪费了大量时间。

好了,关于请求调度的基础,我们就聊到这里。记住,调度不是孤立存在的,它和批处理是“搭档”关系。下一章我们会深入探讨如何把这两者结合起来,实现真正的动态批处理。

专注资料整理