尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
从排队到吐 Token:vLLM 请求调度与 KV Cache 管理的 5 个关键决策
从排队到吐 TokenvLLM 请求调度与 KV Cache 管理的 5 个关键决策【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllmvLLM 是主流的高吞吐 LLM 推理引擎它的请求调度与 KV Cache 管理直接决定服务在高压下的延迟表现。某电商问答服务的大促压测里P99 从 800ms 一路飙到 12sGPU 利用率曲线却看着很健康——事后定位瓶颈全在 LLM 推理调度的排队顺序和显存块分配上批次塞得越满吞吐越高但排在后面的请求等待时间也越长吞吐和延迟在这里正面相撞。下面跟着一个请求的视角把这 5 个关键决策拆开看。一次请求的完整旅程从 HTTP 进来到 Token 吐出先看全局。vLLM V1 把引擎拆成两段API Server 负责 tokenization 和流式输出Engine Core 里住着调度器与 KV Cache 管理器它每一步产出一份调度计划分发给 GPU Worker 执行。请求进入 waiting 队列后调度器每步先给 RUNNING 队列里的老请求续预算再腾出空间放新请求进来。完整旅程可以画成一张状态图关键在这里V1 调度器内部根本没有prefill 阶段和decode 阶段的区分每个请求只记两个数——已算 token 数要追平应有 token 数Chunked Prefill、前缀缓存、投机解码全被这套账法统一覆盖。请求被抢占时更干脆KV 块直接释放、已算进度清零、重新排队。这套逻辑的完整实现可以看 调度器源码。理解了这条时间线问题就收敛成一句每一步谁有资格占 GPU谁先跑怎么排Continuous Batching 与 Chunked Prefill 的取舍静态批处理要求整批进、整批出最慢的请求拖住整批的完成时间。Continuous Batching 把粒度压到每一步请求完成即刻让位新请求即刻补位GPU 不再为等齐而空转。vLLM 更进一步——不做先跑完 prefill 再统一 decode的两段式而是用一个 token 预算max_num_batched_tokens把 prefill 和 decode 混进同一个批次。为什么敢这么混因为长 prompt 的 Prefill 计算量是 Decode 的几十倍若让它独占一步整批 decode 请求都得陪跑等它。Chunked Prefill 就是解法长 prompt 按long_prefill_token_threshold切块每步只消化一块剩余预算分给 decode。说白了这是拿长请求的总耗时换整批的步间延迟——单个长请求的 TTFT 会变长但所有请求的 step latency 都被保护住了。优先级与抢占是配套的保险。waiting 队列支持按 (priority, 到达时间) 排序数字小者优先当新请求挤不进预算调度器从 running 队列尾部挑一个抢占并释放它的 KV 块。为什么抢占走释放后重算而不是搬去 CPU因为块表很轻、重算一段 prompt 的代价可控远便宜于维护一套 GPU↔CPU 交换的簿记——这个取舍直接决定了下一节的内存账怎么算。排队逻辑在 请求队列。这些账本落到配置上就是几个旋钮但拧之前得先算清显存这本账。KV Cache 管理的内存经济学分块、水位线与 LRU 驱逐GPU 显存是推理服务里最稀缺的资源KV Cache 是最大的变量。vLLM 的做法是把显存切成固定大小的块默认 16 token/块请求按块申请、按块释放——这就是 PagedAttention 的核心思想像操作系统管虚拟内存一样管 KV块不连续也没关系块表负责逻辑到物理的映射外部看到的永远是连续的上下文。块用完了怎么办vLLM 有三级防线。第一级是前缀缓存复用释放的块不立刻清零而是按内容哈希留在缓存里同前缀的新请求直接认领空闲块统一挂在 LRU 队列上最久没被触碰的块优先被新分配拿走刚被使用的块优先留存等缓存命中——驱逐谁由最后一次使用时间自动决定不用人工规则。第二级是水位线思想调度器放新请求进来前会确认预算有富余宁可让新请求等一步也不给边界情况留坑。第三级才是把 KV 挪出 GPU——通过 KV offloading 或分布式 KV 连接器把冷请求的块换到 CPU 或外部存储等它重新排上前时再换回来换句话说vLLM 把腾显存做成了成本递增的阶梯先捡现成的再动低价值请求最后才付重算或换页的代价。实现分别在 块池与 LRU 空闲队列 和 KV Cache 管理器。vLLM 调优实操三档负载的配置基线vLLM 调优参数不用背多先分清自己属于哪档负载再拧对应的旋钮旋钮管什么起手值什么时候拧它max_num_batched_tokens每步最多推进多少 token8192短请求多、预算吃不满时调大decode 延迟抖动时调小max_num_seqs每步最多并发多少个请求256队列积压但 token 预算没用满时调大long_prefill_token_threshold长 prompt 的单块切分上限4096长文档 TTFT 超标时调小让切块更细block_sizeKV 块粒度16默认很稳除非命中率异常再动enable_prefix_caching前缀缓存开关开多轮对话、固定系统提示词场景收益最大KV offloading冷请求 KV 换到 CPU关显存长期吃紧、重算代价高时才开三档典型负载的起手姿势高并发短请求问答、分类token 预算和并发数都拉高prefill 阈值调小追求步间均衡、压低 P50。长文档生成RAG、摘要token 预算收敛long_prefill_token_threshold压小让长 prompt 细水长流地切块避免独占一步。混合负载生产常态取中间值重点盯 waiting 队列深度和抢占次数再定向调整。最小可运行示例vllm serve Qwen/Qwen2.5-14B-Instruct \ --max-num-batched-tokens 8192 \ --max-num-seqs 256 \ --long-prefill-token-threshold 4096 \ --enable-prefix-caching调参别靠手感靠指标 ⚠️waiting 队列深度涨 抢占次数涨说明预算和显存双重紧张前缀缓存命中率掉说明复用没吃上。各旋钮的取值语义可对照 调度配置。上生产前勾掉的 5 件事vLLM 请求调度与 KV Cache 管理的价值一句话概括把显存怎么分、请求谁先跑从人工经验变成可核算的账本。上线前把这 5 项勾掉用真实负载形状长短请求比例、对话轮次分布压测过而不是只跑单一 benchmarkP99 延迟、waiting 队列深度、KV 块使用率、前缀缓存命中率已进监控看板 正常流量下抢占次数接近 0若持续发生先查max_num_batched_tokens与显存水位多轮对话 / 固定系统提示词场景已开 prefix caching 并实测命中率长 prompt 场景验证过 TTFT 在long_prefill_token_threshold下的表现是否可接受【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Tolaria ADR 0038:用 Frontmatter 双系统属性实现侧边栏收藏夹(`_favorite` 与 `_favorite_index`)

Tolaria ADR 0038:用 Frontmatter 双系统属性实现侧边栏收藏夹(`_favorite` 与 `_favorite_index`)

Tolaria ADR 0038:用 Frontmatter 双系统属性实现侧边栏收藏夹(_favorite 与 _favorite_index) 【免费下载链接】tolaria Desktop app to manage markdown knowledge bases 项目地址: https://gitcode.com/GitHub_Trending/to/tolaria …

📅 2026/9/13 21:20:12
BigQuery BigFrames 线性回归实战:用 pandas 风格 API 在云端训练企鹅体重预测模型

BigQuery BigFrames 线性回归实战:用 pandas 风格 API 在云端训练企鹅体重预测模型

BigQuery BigFrames 线性回归实战:用 pandas 风格 API 在云端训练企鹅体重预测模型 【免费下载链接】skills Agent Skills for Google products and technologies 项目地址: https://gitcode.com/GitHub_Trending/skills29/skills 本文基于 google/skills 仓…

📅 2026/9/13 21:20:12
Metabase 数据透视表(Pivot Table)完整实战指南:从查询构建器配置到 GROUPING SETS 源码原理

Metabase 数据透视表(Pivot Table)完整实战指南:从查询构建器配置到 GROUPING SETS 源码原理

Metabase 数据透视表(Pivot Table)完整实战指南:从查询构建器配置到 GROUPING SETS 源码原理 【免费下载链接】metabase The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data…

📅 2026/9/13 21:20:12
MORE NEWS

更多资讯

📰

为 Pydantic AI 添加 Provider API 能力:跨 Provider 抽象、默认值策略与能力门控的完整工程指南

为 Pydantic AI 添加 Provider API 能力:跨 Provider 抽象、默认值策略与能力门控的完整工程指南 【免费下载链接】pydantic-ai How Python does AI. Agents, realtime voice, image generation, embeddings. Every model, every interface, typed end to end. 项…

📰

Review Rules

Review Rules 【免费下载链接】qwen-code An open-source AI coding agent that lives in your terminal. 项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code All API endpoints must validate authenticationDatabase queries must use parameterized state…

📰

OBSEA 数据集介绍、下载及YOLO/VOC/COCO训练格式转换

OBSEA 完整数据集下载目录 同时包含三种主流标注格式:COCO JSON、VOC XML、YOLO TXT OBSEA 数据集🌊:数据集介绍、下载📥 | 目标检测 | 水平框📌|原始图像✅|VOC标签✅ | COCO 标签✅ | YOLO …

📰

containerd 路线图解析:基于 Issues 与 Milestones 的开源项目规划机制

containerd 路线图解析:基于 Issues 与 Milestones 的开源项目规划机制 【免费下载链接】containerd An open and reliable container runtime 项目地址: https://gitcode.com/GitHub_Trending/co/containerd 导读 本文以 containerd 仓库根目录的 ROADMAP.…

📰

Kilo Code Agent Manager 中的紧凑 PR Checks:按状态分桶、去重与持久化的实现方案

Kilo Code Agent Manager 中的紧凑 PR Checks:按状态分桶、去重与持久化的实现方案 【免费下载链接】kilocode Kilo is the all-in-one agentic engineering platform. Build, ship, and iterate faster with the most popular open source coding agent. 项目地址…

📰

Spring框架核心解析:IoC、AOP与企业级开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬