当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > vLLM 怎样设置连续批处理的并发上限

vLLM 怎样设置连续批处理的并发上限

来源:17golang原创 2026-10-25 00:56:20 0浏览 收藏

vLLM 连续批处理通常先用 --max-num-seqs 约束单个引擎每轮可处理的序列数量,再用 --max-num-batched-tokens 约束每轮 token 工作量。它们不是 HTTP 连接数限制,也不保证服务只接收同样数量的请求。若安装版本支持 --max-num-active-seqs,还可以在保留模型 runner 容量的同时,单独压低 RUNNING 状态的活跃请求数。

官方参数入口:https://docs.vllm.ai/en/latest/cli/serve/。本文讨论单个文本生成引擎、每请求一个输出的配置思路;多副本、数据并行、多个候选输出和推测解码需要另外核对计数范围。以下数值仅为配置例子,不代表任何显卡的安全容量或吞吐承诺。

把连续批处理的上限分成三个容量边界

连续批处理不是让所有请求凑齐后一起生成完整答案。请求的生成长度不同,服务会持续调度可运行的工作。因此,限制“一个批次多大”和限制“入口收了多少请求”是两件事。

需要控制的对象配置不能代替什么
每轮序列容量max_num_seqs入口连接与排队上限
每轮 token 工作量max_num_batched_tokens单请求上下文长度
RUNNING 活跃请求max_num_active_seqs(版本支持时)模型 runner 容量
入口在途请求max_num_queued_reqs(版本支持时)单个引擎的序列容量

可以把这组配置理解为“执行容量与入口容量分离”的模式:执行侧控制共享计算资源,入口侧控制积压的规模。执行侧仍可能因为 token 预算、KV cache 空间等条件而没有用满名义上的序列容量。

执行容量和入口容量分组中的序列、token及活跃请求限制
图1:静态容量结构说明图。执行侧的序列数、token 预算和活跃请求数具有不同作用;入口在途量不是每轮批次大小。图片不是运行结果。

给单个引擎配置序列数和 token 预算

先为普通文本生成准备一组易解释的显式值。假设模型已经完整保存到本地 /srv/models/text-model,GPU 和 vLLM 版本与该模型兼容,可以使用下面的启动写法。路径须替换为实际模型目录;这些命令未在本文环境执行。

# 仅监听本机;模型目录替换为已经准备好的本地模型
# 32 是每轮序列容量示例,2048 是每轮 token 预算示例
vllm serve /srv/models/text-model \
  --host 127.0.0.1 \
  --max-num-seqs 32 \
  --max-num-batched-tokens 2048 \
  --enable-chunked-prefill

显式启用 chunked prefill,是为了允许提示词预填充按剩余 token 预算分块。不要把 2048 理解成请求只能输入 2048 token;输入长度还受模型上下文配置等限制。反过来,不启用分块时也不能照搬这组预算关系,应查安装版本对完整 prefill 的要求。

配置后的判断重点不是“立刻看到 32 个请求同时输出”,而是启动参数及最终引擎配置是否对应预期,并且真实负载下的延迟、排队和内存压力是否可接受。序列容量是上限,不是调度器必须填满的目标。

保留 runner 容量时单独降低活跃请求数

当问题是“runner 已按较大容量准备好,但希望解码阶段少一些活跃请求”时,直接把 max_num_seqs 改小可能同时改变 runner 的逐请求缓冲区与 CUDA graph 容量。最新官方 CLI 列出的 max_num_active_seqs 用于把这两个选择分开:它约束调度器能放进 RUNNING 的请求数,数值不得大于 max_num_seqs;未设置时沿用默认的接纳行为。

# 仅用于安装版本明确支持 max-num-active-seqs 的情况
# 保留 64 的 runner 容量,活跃请求数示例设为 16
vllm serve /srv/models/text-model \
  --host 127.0.0.1 \
  --max-num-seqs 64 \
  --max-num-active-seqs 16 \
  --max-num-batched-tokens 2048 \
  --enable-chunked-prefill

这不是说模型已经能安全同时承载 64 条长上下文,也不是显存隔离开关。保留更大的 runner 容量本身仍有资源代价。若当前安装版本没有这个参数,应采用基础的 max_num_seqs 限制或先做版本迁移评估,不要靠写入同名环境变量假定它生效。

特别要避免一边把活跃数降到 16,一边把 token 预算、模型长度和并行方式也全部改掉。那样即使体验变化,也无法解释是哪一个配置造成的。合理的配置记录应保留模型、版本、硬件、上下文分布和修改项。

入口积压不能靠缩小批次解决

假设入口已经接收了很多请求,把每轮序列容量设成 16,并不自动把第 17 个 HTTP 请求拒绝掉。执行容量变小而进入速度不变时,更多工作可能停留在等待区域。排队时间还占用客户端的超时预算。

最新官方 CLI 还提供 --max-num-queued-reqs。名称中虽有 queued,它计算的却是 waiting 或 running 的在途请求总量,不是“仅等待队列长度”。到达限制时,新请求返回 HTTP 503。该限制位于 API server 进程侧,覆盖它路由的多个 data-parallel rank;不能误当成全公司所有副本共享的一个计数器。

# 仅用于安装版本同时支持 active 与 queued 两个参数的情况
# 单 API server 示例:活跃上限 16,在途总量上限 48
vllm serve /srv/models/text-model \
  --host 127.0.0.1 \
  --max-num-seqs 64 \
  --max-num-active-seqs 16 \
  --max-num-batched-tokens 2048 \
  --max-num-queued-reqs 48 \
  --enable-chunked-prefill

这里的 48 不是额外允许等待 48 个,也不能简单断言永远恰好等待 32 个:RUNNING 数可能低于 16,状态也会变化。它只是这个入口的在途总量阀门。若版本不支持,应在网关或业务层设计独立的有限队列、超时与过载响应,不要让排队无限增长。

入口在途总量与引擎活跃数量分离的静态关系
图2:入口与引擎的静态边界说明图。入口在途集合包含 waiting 和 running,请求接纳限制与 runner 容量分开配置;不表示真实队列快照或执行顺序。

客户端收到过载响应后,也不能立即无限重试。需要有重试上限、退避和总超时预算;否则重试流量本身会继续挤压入口。本文不展开网关实现,也不把该阀门当作用户配额系统。

按负载判断这组上限是否适合

交互式服务更关心首 token 等待和生成间隔;离线任务通常更重视完成总工作量。相同的序列容量不一定适合这两种目标。增大容量可能提高资源利用,也可能加重竞争;减小容量可能改善部分请求的体验,同时降低整体吞吐或拉长等待。没有脱离模型、硬件与请求长度的通用最佳值。

给部署人员的判断顺序是:明确当前限制的是执行侧还是入口侧;确认参数在所装版本存在;保留一组可回退配置;在代表性负载下分别观察等待数量、首 token 延迟、生成间隔、完成吞吐和 KV cache 压力。本文只提供配置和取舍解释,没有提供实测数据,也没有宣称这些数值已经过容量测试。

max-num-seqs 等于在线用户数吗?

不等于。用户可能没有正在推理,也可能发出多个请求;连接、请求与序列不是统一计数。多输出等模式更不能直接按用户数换算。

只降低 max-num-batched-tokens 能把并发固定为 16 吗?

不能。它限制每轮 token 工作量,不是固定请求数开关。要按对象选择序列容量或活跃请求限制。

用了 tensor parallel,序列容量是否按 GPU 张数相乘?

不要这样计算。tensor parallel 的多张 GPU 协作承载引擎,不是自动生成多个独立接纳池。data parallel、多副本及 API server 路由范围也必须分别理解。

新参数报 unrecognized arguments 应怎么处理?

按安装版本的 CLI 和对应版本文档调整配置;删去不支持的参数时,还要重新评估它原本承担的容量边界,不能只为了启动成功而保留“已限制入口”的错误预期。

官方参考:vLLM serve 参数;vLLM 优化与调优。阅读时选择与安装版本匹配的文档;latest 页面中的新增参数不能自动套用到旧版本。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Hugging Face PEFT 怎样用 LoRA 保存适配器而不保存底模Hugging Face PEFT 怎样用 LoRA 保存适配器而不保存底模
上一篇
Hugging Face PEFT 怎样用 LoRA 保存适配器而不保存底模
Java Console.charset 确定终端读写字符集的处理方法
下一篇
Java Console.charset 确定终端读写字符集的处理方法
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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模型性能。
    673次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    691次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    735次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    701次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    539次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码