解锁高并发LLM推理:动态批处理、令牌流和使用vLLM的KV缓存秘密

网罗开发(小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 摘要
    • 引言
    • 用 vLLM 搭建高效并发推理服务
      • 什么是动态批量合并?为什么它很重要?
      • Token 流式输出:为什么不能等所有 Token 生成完再返回?
    • 实战代码示例:用 vLLM 搭建一个并发推理服务
      • 环境准备
      • Inference 服务代码
      • 代码解读:
    • 应用场景示例 1:实时对话平台
    • 应用场景示例 2:文档摘要 API 服务
    • QA 问答环节
    • 总结

摘要

随着 AI 应用从实验室走向真实世界,服务端的高效并发推理成了一道绕不开的坎。大语言模型(LLM)计算量巨大,逐个请求处理显然不现实。像 动态批量合并(Dynamic Batching)Token 流式输出(ChatGPT 式响应)KV Cache 管理 这些技术,正是让大模型推理服务化落地的关键。

vLLM 作为代表性的推理框架,把这些能力整合在一起,帮助开发者实现高吞吐、低延迟的并发推理。本文将结合实战代码,带你搭建一个能真正并发高效响应的推理服务。

引言

大家平时用 ChatGPT,看到的效果是边打字边出字,像是 AI 正在“思考”。但实际上,后台有成千上万个用户在同时发起请求,共享着有限的算力资源。

如果简单粗暴地“一人一张 GPU”,不光烧钱,连资源都撑不住。这时候,就需要 动态批量合并(Dynamic Batching)KV Cache 复用(Cache Reuse) 出马了。

vLLM 就是专门为这种高并发场景做优化的框架,它不仅能动态合批,还能在批次中灵活插入新请求、移除完成的请求,让算力利用率拉满。

本文将会详细讲解:

  1. 并发推理为什么离不开批量合并?
  2. Token 流式输出对服务架构有啥挑战?
  3. KV Cache 如何帮我们省下大把算力?
  4. vLLM + FastAPI,手把手带你搭一个并发推理服务。

而且每个环节都会配上实战代码,写出来就能跑。

用 vLLM 搭建高效并发推理服务

什么是动态批量合并?为什么它很重要?

设想下:你有 100 个用户同时发起生成请求。如果一条条慢慢跑,不光慢,还浪费 GPU 算力。

大模型是矩阵乘法专家,最擅长一锅端(批量处理)。但现实中用户请求来的时间点、需求长度都不一样,怎么凑够一个完整 batch 呢?

动态批量合并(Dynamic Batching) 就是动态凑批次,来了就塞进 batch,保证响应及时,又能吃满算力。

vLLM 在这个基础上,还做了 Token Swapping 优化:一个 batch 里,谁先跑完就被踢出去,新的请求随时能顶上,不浪费 Cache,不重新算,真正做到批次动态变化、GPU 一刻不停。

Token 流式输出:为什么不能等所有 Token 生成完再返回?

普通推理服务通常是“结果算完再发回去”,但像 ChatGPT 这种对话类应用,必须一边生成一边发回去(Token Streaming),否则体验很糟糕。

流式输出面临的挑战:

  • 用户感知的延迟必须低。
  • 服务端还要合批提高效率。
  • 每个用户生成的 token 数量不同,流式拆分难度大。

vLLM 在引擎内部实现了 连续解码(Continuous Decoding),在批量推理的同时,把每个用户的 token 单独分流回去,实现低延迟的 token 流式输出体验。

实战代码示例:用 vLLM 搭建一个并发推理服务

环境准备

pip install vllm fastapi uvicorn

Inference 服务代码

from fastapi import FastAPI, WebSocket
from vllm import LLM, SamplingParams
import asyncioapp = FastAPI()
llm_engine = LLM(model="facebook/opt-1.3b")  # 可替换为任意支持的模型@app.websocket("/chat")
async def chat_websocket(websocket: WebSocket):await websocket.accept()user_prompt = await websocket.receive_text()sampling_params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=128)# 启动流式生成任务async for output in llm_engine.generate(user_prompt, sampling_params, stream=True):token = output.outputs[0].textawait websocket.send_text(token)await websocket.close()

代码解读:

  • 用户通过 WebSocket 连接 /chat
  • 接收到用户 prompt 后,启动 vLLM 的流式生成。
  • 每生成一个 token,就通过 WebSocket 立即发回给用户。
  • 多个用户同时访问时,vLLM 会自动做批量合并和 KV Cache 复用。

应用场景示例 1:实时对话平台

假设你正在做一个 Chatbot 平台,需要同时服务成千上万的用户,每个响应都要求实时流式返回。

解决方案:

  • 后端用 vLLM 部署 LLM 推理服务。
  • 前端 WebSocket 接 token 流式输出。
  • 动态批量策略根据流量自动调整 batch size。
  • KV Cache 复用减少重复计算,提升吞吐。

应用场景示例 2:文档摘要 API 服务

一个文档摘要 API 接口,用户请求不稳定,高峰低谷交替,单个请求计算量较大。

解决方案:

  • vLLM 动态批量将多个文档摘要请求合批处理。
  • 流式返回每个摘要片段,用户边看边收。
  • 监控队列延迟,根据请求密度动态调整 batch 合并策略。

QA 问答环节

Q1:vLLM 支持多大的模型?
可以支持 13B 以上的模型,但需要多卡配合,vLLM 在 KV Cache 管理上做了极致优化,可以在硬件条件允许下最大化模型载入。

Q2:KV Cache 在并发推理中有啥作用?
KV Cache 会保存模型前面 token 的注意力结果,后续生成新 token 时不用重复计算,尤其在多用户动态合批时,Cache 复用能极大提升效率。

Q3:batch 中如果有用户提前生成完成,其他用户会受影响吗?
不会。vLLM 的 Token Swapping 机制会把完成的请求踢出 batch,同时把新的请求无缝插入,batch 动态变换,后续请求不受影响。

Q4:可以自定义合批调度策略吗?
vLLM 提供了部分批量策略参数调节,如果有更复杂的需求,也可以通过修改源码实现自定义调度逻辑。

总结

做 LLM 服务,GPU 不是越堆越多就能解决问题。动态批量、流式返回、KV Cache 复用 是三大核心优化手段,真正让并发推理跑得快、跑得稳。

vLLM 把这些复杂度封装起来,让开发者用几行代码就能搭出一个高效的推理服务。无论是做 Chatbot、摘要 API,还是文档问答系统,这些优化都是必备武器。

掌握好这些技巧,才能在有限资源下跑出最好的用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92200.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨域场景下的Iframe事件监听

背景在当前window窗口,对于一些浮窗组件,一般需要点击当前window下的其他位置才能够隐藏浮窗。但如果当前窗口中存在iframe区域,那么由于一些特殊的性质,无法通过常规的click点击事件监听iframe元素的点击,而通过conte…

零知识证明入门应用指南:原理与Python实践

目录 零知识证明入门应用指南:原理与Python实践 1. 引言:隐私计算的革命 2. 零知识证明基础原理 2.1 数学基础:离散对数问题 2.2 基本协议流程 2.3 核心概念 3. Schnorr协议:经典ZKP实现 3.1 协议数学描述 3.2 Python实现 4. 非交互式证明:Fiat-Shamir变换 4.1 原理 4.2 P…

PyTorch中三角函数与特殊运算详解和实战场景示例

在 PyTorch 中,三角函数(如 sin, cos, tan 等)和一些特殊数学运算(如双曲函数、反三角函数、hypot, atan2, clamp, lerp, sigmoid, softplus, special 模块等)被广泛用于科学计算、机器学习、深度学习中的前向推理或梯…

论文阅读: Mobile Edge Intelligence for Large LanguageModels: A Contemporary Survey

地址:Mobile Edge Intelligence for Large Language Models: A Contemporary Survey 摘要 设备端大型语言模型(LLMs)指在边缘设备上运行 LLMs,与云端模式相比,其成本效益更高、延迟更低且更能保护隐私,因…

JavaWeb(苍穹外卖)--学习笔记17(Websocket)

前言 本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,🙌用户下单并且支付成功后,需要第一时间通…

WebForms 简介

WebForms 简介 概述 WebForms 是微软公司推出的一种用于构建动态网页和应用程序的技术。自 2002 年推出以来,WebForms 成为 ASP.NET 技术栈中重要的组成部分。它允许开发者以类似于桌面应用程序的方式创建交互式网页,极大地提高了 Web 开发的效率和体验。 WebForms 的工作…

vsCode软件中JS文件中启用Emmet语法支持(React),外加安装两个常用插件

1.点击vsCode软件中的设置(就是那个齿轮图标),如下图2.在搜索框中输入emmet,然后点击添加项,填写以下值:项:javascript 值:javascriptreact。如下图3.可以安装两个常用插件&#xf…

【第2话:基础知识】 自动驾驶中的世界坐标系、车辆坐标系、相机坐标系、像素坐标系概念及相互间的转换公式推导

自动驾驶中的坐标系概念及相互间的转换公式推导 在自动驾驶系统中,多个坐标系用于描述车辆、传感器和环境的相对位置。这些坐标系之间的转换是实现定位、感知和控制的关键。下面我将逐步解释常见坐标系的概念,并推导相互转换的公式。推导基于标准几何变换…

深度拆解Dify:开源LLM开发平台的架构密码与技术突围

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

tomcat处理请求流程

1.浏览器在请求一个servlet时,会按照HTTP协议构造一个HTTP请求,通过Socket连接发送给Tomcat. 2.Tomcat通过不同的IO模型接收到Socket的字节流数据。 3.接收到数据后,按照HTTP协议解析字节流,得到HttpServletRequest对象 4.通过HttpServletRequest对象,也就是请求信息,找到该请求…

【音视频】WebRTC 一对一通话-信令服

一、服务器配置 服务器在Ubuntu下搭建,使用C语言实现,由于需要使用WebSocket和前端通讯,同时需要解析JSON格式,因此引入了第三方库:WebSocketpp和nlonlohmann,这两个库的具体配置方式可以参考我之前的博客…

Spring(以 Spring Boot 为核心)与 JDK、Maven、MyBatis-Plus、Tomcat 的版本对应关系及关键注意事项

以下是 Spring(以 Spring Boot 为核心)与 JDK、Maven、MyBatis-Plus、Tomcat 的版本对应关系及关键注意事项,基于最新技术生态整理: 一、Spring Boot 与 JDK 版本对应 Spring Boot 2.x 系列 最低要求:JDK 1.8推荐版本…

03-基于深度学习的钢铁缺陷检测-yolo11-彩色版界面

目录 项目介绍🎯 功能展示🌟 一、环境安装🎆 环境配置说明📘 安装指南说明🎥 环境安装教学视频 🌟 二、系统环境(框架/依赖库)说明🧱 系统环境与依赖配置说明&#x1f4c…

24. 前端-js框架-Vue

文章目录前言一、Vue介绍1. 学习导图2. 特点3. 安装1. 方式一:独立版本2. 方式二:CDN方法3. 方式三:NPM方法(推荐使用)4. 搭建Vue的开发环境(大纲)5. 工程结构6. 安装依赖资源7. 运行项目8. Vue…

Spring 的依赖注入DI是什么?

口语化答案好的,面试官,依赖注入(Dependency Injection,简称DI)是Spring框架实现控制反转(IoC)的主要手段。DI的核心思想是将对象的依赖关系从对象内部抽离出来,通过外部注入的方式提…

汇川PLC通过ModbusTCP转Profinet网关连接西门子PLC配置案例

本案例是汇川的PLC通过开疆智能研发的ModbusTCP转Profient网关读写西门子1200PLC中的数据。汇川PLC作为ModbusTCP的客户端网关作为服务器,在Profinet一侧网关作为从站接收1200PLC的数据并转成ModbusTCP协议被汇川PLC读取。配置过程:汇川PLC配置Modbus TC…

【计组】数据的表示与运算

机器数与真值机器数真值编码原码特点表示范围求真值方法反码特点补码特点表示范围求真值方法移码特点表示范围求真值方法相互转换原码<->补码补码<->移码原码<->反码反码<->补码移位左移右移逻辑右移算术右移符号扩展零扩展整数小数符号扩展运算器部件…

视频水印技术中的变换域嵌入方法对比分析

1. 引言 随着数字视频技术的快速发展和网络传输的普及,视频内容的版权保护问题日益突出。视频水印技术作为一种有效的版权保护手段,通过在视频中嵌入不可见或半可见的标识信息,实现对视频内容的所有权认证、完整性验证和盗版追踪。在视频水印技术的发展历程中,变换域水印因…

电动汽车电池管理系统设计与实现

电动汽车电池管理系统设计与实现 1. 引言 电动汽车电池管理系统(BMS)是确保电池组安全、高效运行的关键组件。本文将详细介绍一个完整的BMS系统的MATLAB实现,包括状态估计(SOC/SOH)、参数监测、电池平衡和保护功能。系统设计为模块化结构,便于扩展和参数调整。 2. 系统架构…

JVM(Java Virtual Machine,Java 虚拟机)超详细总结

一、JVM的基础概念1、概述JVM是 Java 程序的运行基础环境&#xff0c;是 Java 语言实现 “一次编写&#xff0c;到处运行” &#xff08;"write once , run anywhere. "&#xff09;特性的关键组件&#xff0c;具体从以下几个方面来理解&#xff1a;概念层面JVM 是一…