课程导入:学习目标、课程结构、vLLM调度器在LLM推理中的重要性
1.1 为什么调度器是vLLM的“心脏”
在大语言模型(LLM)推理服务中,GPU显存是稀缺资源,而请求的到达模式却高度动态——有的请求长、有的短,有的突发、有的平稳。如果缺乏一个精细的调度器,GPU显存会被低效占用,吞吐量急剧下降,甚至出现显存溢出(OOM)导致服务崩溃。vLLM之所以能在业界获得广泛认可,核心原因之一就是其PagedAttention与连续批处理(Continuous Batching)机制,而这两者的落地都依赖调度器对请求、KV Cache、执行序列的全局编排。
调度器决定了三个关键问题:哪些请求进入本轮执行?、每个请求分配多少显存?、当显存不足时如何抢占或淘汰?。这三个问题的答案直接决定了服务的吞吐量、延迟和稳定性。可以说,调度器是vLLM推理引擎中连接前端请求与后端GPU算力的“交通指挥中心”。
1.2 学习目标:学完本章你将掌握什么
本课程围绕vLLM调度器展开,共30个章节,从基础概念到源码级剖析,再到生产环境调优。完成本课程后,你将具备以下能力:
- 理解调度器的核心职责:掌握Waiting、Running、Swapped三种队列的流转逻辑,以及调度器如何在这三者之间做决策。
- 掌握优先级机制:理解vLLM中的优先级定义、抢占策略(Preemption)以及如何通过调度参数控制请求的公平性与优先级。
- 深入源码实现:能够阅读并解释
scheduler.py中的核心函数,如_schedule_running、_schedule_swapped、_schedule_waiting的执行流程。 - 应对生产环境挑战:学会配置
max_num_seqs、max_num_batched_tokens、gpu_memory_utilization等参数,避免显存碎片化和请求饥饿。 - 诊断与调优:通过日志和监控指标(如
num_waiting_reqs、num_running_reqs)判断调度器瓶颈,并做出针对性优化。
vllm/core/scheduler.py),边读边对照本课程的流程图和表格,效果最佳。
1.3 课程结构:从原理到实战的递进路径
课程分为五个模块,每个模块聚焦调度器的一个侧面,层层递进:
| 模块 | 章节范围 | 核心内容 | 学习产出 |
|---|---|---|---|
| 基础篇 | 第1-5章 | 调度器定位、PagedAttention、连续批处理、队列结构 | 建立调度器整体认知框架 |
| 原理篇 | 第6-12章 | 调度策略、优先级算法、抢占机制、显存管理 | 理解调度决策的底层逻辑 |
| 源码篇 | 第13-20章 | scheduler.py逐行解析、SequenceGroup生命周期、多GPU调度 | 具备源码级阅读与修改能力 |
| 实战篇 | 第21-26章 | 参数调优、监控指标、性能对比、常见问题排查 | 能独立完成生产环境部署调优 |
| 进阶篇 | 第27-30章 | 与Ray集成、动态批处理、未来演进方向 | 把握调度器技术前沿 |
1.4 一个典型场景:为什么调度器决定服务质量
假设你部署了一个vLLM服务,同时收到以下请求:
- 一个来自在线客服的短查询(约50个token),要求低延迟;
- 一个来自离线分析任务的长文档摘要(约2000个token),对延迟不敏感;
- 三个中等长度的代码生成请求(约500个token)。
如果调度器不做优先级区分,按照先来先服务(FCFS)策略,长文档摘要可能占用大量显存和计算资源,导致在线客服请求排队等待,用户体验恶化。而vLLM调度器通过连续批处理,可以在长请求生成间隙插入短请求;通过优先级队列,可以让高优先级请求插队;通过抢占机制,在显存不足时挂起低优先级请求,保证关键请求的SLA。
1.5 本章小结与学习路径
本章作为课程导入,明确了调度器在vLLM中的核心地位——它是连接请求与GPU算力的决策中枢。我们梳理了课程的整体结构:从基础概念到源码剖析,再到生产调优,最终走向技术前沿。下一章将深入PagedAttention机制,这是理解调度器显存管理的前提。
在继续学习之前,请确保你已具备以下基础:
- 了解Transformer模型的基本推理过程(prefill + decode);
- 熟悉Python和基本的并发编程概念;
- 对GPU显存管理有初步认识(如显存池、碎片化)。
准备好后,让我们正式进入vLLM调度器的技术世界。