当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > vLLM continuous batching 的请求调度观察点

vLLM continuous batching 的请求调度观察点

来源:17golang原创 2026-11-01 03:28:44 0浏览 收藏

观察 vLLM continuous batching,先把等待请求、正在运行的请求、每轮处理的 token、KV 缓存占用和延迟放在同一时间窗口里看。单独看到 Running 增多或吞吐上升,不能证明调度更合理;还要确认首 token 等待和持续输出是否满足业务目标。

官方地址:https://docs.vllm.ai/

以下面向单实例在线生成服务,重点是升级前后如何保留指标含义。latest 文档会继续变化,部署时应保存实际版本、镜像标识和启动参数;本文不指定一个所有版本通用的最优参数,也不提供实测性能结论。

先限定调度观察的版本与服务范围

continuous batching 可以把不同请求的计算组织到持续变化的批次中。请求长度不同,完成时刻不同,因此一个服务的并发请求数并不是固定的“批大小”。观察时至少记录模型、输入长度分布、输出上限、请求到达速率、并行配置和前缀缓存状态,避免把工作负载变化误认为升级效果。

先在一个明确的实例上建立视图,再比较副本。集群总量适合看容量,实例视图适合发现负载倾斜:总等待量一样,集中在一台实例和均匀分布的处理办法可能完全不同。下面用 instance 区分 Prometheus 抓取目标;它是采集侧标签,不是所有环境都会自动具有的 vLLM 标签。

把旧监控表达式迁移为四组观察点

观察组当前文档中的指标读数含义及限制
请求状态vllm:num_requests_running、vllm:num_requests_waiting区分执行批次中的请求与等待处理的请求;不是所有 HTTP 连接数量。
缓存压力vllm:kv_cache_usage_percKV 缓存使用比例,1 表示全部使用;不是 GPU 总显存利用率。
调度工作量vllm:iteration_tokens_total每个 engine step 的 token 数直方图;不能按名称中的 total 当成普通计数器。
用户等待vllm:time_to_first_token_seconds、vllm:request_queue_time_seconds分别观察首 token 与排队时间分布,不能把前者全部归因于队列。

旧版设计资料可见 gpu_cache_usage_perc 和 time_per_output_token_seconds 等名称。迁移时应逐条对照部署版本的指标说明,不要全局字符串替换后就认为统计口径一致。当前设计文档还区分流式输出事件之间的 ITL 和每请求统计的 TPOT;一个输出事件含多个 token 时,两者尤其不能直接互换。

这些名称和口径来自 官方生产指标说明、当前指标设计与旧版设计资料。不存在的时间序列不能用补零伪装成“没有等待”。

避免把请求数和 token 预算混为一谈

max_num_seqs 与 max_num_batched_tokens 约束的对象不同:前者限制单轮的序列数量,后者限制单轮的 token 数量。KV 缓存又是另一项资源条件。即使请求数量没有达到上限,也不能据此断言还有充足的调度余量。

在支持并启用 chunked prefill 的 V1 场景,官方调优说明描述了优先安排 decode、用剩余 token 预算安排 prefill 的策略;放不下的 prefill 可以分块。因此,同样数量的请求,长输入和短输入的调度压力不同。图中三个分组只表达约束归属,不代表执行顺序。

请求状态、调度预算和缓存资源的静态关系
图1:调度约束结构图。等待请求和运行请求都与调度预算有关,KV 缓存属于独立资源条件;连线不表示请求的实际执行过程。

该策略及参数取舍参见 vLLM 官方调优说明。具体能力仍取决于引擎、模型及部署配置,不能把文档中的典型策略当成所有扩展调度器的实现承诺。

用最小指标查询保留实例和直方图语义

下面是给已有 Prometheus 服务使用的查询示例,未在本文环境执行。把 job 名替换为实际采集任务;五分钟窗口只是起点,需结合抓取间隔和业务流量调整。

# 按实例观察等待请求,保留负载倾斜信息
sum by (instance) (vllm:num_requests_waiting{job="vllm"})

# 对累计桶先求速率,并保留 le,得到各实例首 token 的 P95
histogram_quantile(
  0.95,
  sum by (instance, le) (
    rate(vllm:time_to_first_token_seconds_bucket{job="vllm"}[5m])
  )
)

# 迭代 token 直方图的和除以次数,表示每轮平均 token 数
sum by (instance) (
  rate(vllm:iteration_tokens_total_sum{job="vllm"}[5m])
)
/
sum by (instance) (
  rate(vllm:iteration_tokens_total_count{job="vllm"}[5m])
)

最后一个表达式的分母是迭代次数速率,不是请求数速率,所以结果不能称为“每请求输出 token”。空闲时分母可能为零,应显示无有效样本。短时间尖峰也可能被抓取间隔或平均窗口平滑掉,不能从一张平稳曲线推断逐轮调度完全平稳。

状态量、迭代直方图和延迟直方图的统计归属
图2:指标口径结构图。状态量描述当前数量,直方图描述样本分布;迭代 token 与请求延迟属于不同样本对象,不能相互替代。

对照工作负载解释参数取舍

假设升级后输出吞吐上升,但首 token P95 变差。先比较输入长度和到达速率是否一致,再把排队时间、运行请求和缓存比例并排观察。若排队也明显增加,容量不足或分配不均值得继续调查;若排队变化小而长输入增多,则不能只靠扩大并发来解释或修复。这是排查假设,不是单凭指标即可成立的因果结论。

在 chunked prefill 下,缩小 token 预算通常有利于减少 prefill 对 decode 的干扰,扩大预算则给 prefill 更多空间;官方说明将其与 ITL、TTFT 的取舍联系起来。实际选择应由交互体验目标决定:聊天关注持续输出,长文档问答也关注长输入后的首 token 等待。

如果缓存占用高且抢占增加,应把缓存压力纳入判断;官方 V1 调优资料说明默认抢占使用 RECOMPUTE。不要沿用旧面板上的 SWAP 解释所有暂停,也不要只提高序列上限。每次只改变一个参数,并保留同一负载下的延迟、错误和吞吐记录,才能判断收益是否伴随代价。

迁移清单与常见问题

  • 保留旧版本、旧启动参数和旧指标定义,给新面板标注适用部署。
  • 检查指标名称、单位、类型和标签;缺失序列与真实零值分别处理。
  • 保留实例维度,在同一窗口观察队列、缓存、迭代工作量与延迟。
  • 固定请求分布后比较调整效果,不把示例参数当成生产最优值。

等待请求多,一定是 GPU 算力不够吗?不能这样判断。还应调查单实例倾斜、token 预算、KV 资源及额外调度约束;指标提供线索,最终原因需要对应配置和请求记录。

running 越多越好吗?更多请求同时参与计算可能提高吞吐,也可能延长单请求输出间隔。应同时满足业务延迟目标,不能把 running 设成单独的优化终点。

集群 P95 能平均各实例 P95 吗?不能。应在桶边界一致的条件下聚合直方图桶后再求分位数;同时保留各实例视图。使用不同桶定义的版本混跑时,先解决口径兼容,再进行聚合比较。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
ONNX Runtime IO Binding 怎样减少 GPU 张量拷贝ONNX Runtime IO Binding 怎样减少 GPU 张量拷贝
上一篇
ONNX Runtime IO Binding 怎样减少 GPU 张量拷贝
LangChain structured output 怎样固定工具返回 schema
下一篇
LangChain structured output 怎样固定工具返回 schema
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    820次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    811次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    903次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    873次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    695次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码