【vLLM 源码解析】引擎 Front
VLLM 架构LLMEngineLLMEngine类是 vLLM 引擎的核心组件。它负责接收来自客户端的请求并调度模型生成输出。LLMEngine包括输入处理、模型执行可能分布在多个主机和/或GPU上、调度和输出处理。Input Processing使用指定的分词器处理输入文本的分词。Scheduling选择每一步要处理的请求。Model Execution管理模型的执行包括跨多个GPU的分布式执行。Output Processing处理模型输出将 Token 解码为人类可读取的文本。LLMEngine源码vllm/engine/llm_engine.pyInputProcessordefmain():llmLLM(modelgpt2,trust_remote_codeTrue)sampling_paramsSamplingParams(temperature0.8,top_p0.95,max_tokens100)prompts[The future of artificial intelligence,Once upon a time in a galaxy far away]print(正在生成文本...)outputsllm.generate(prompts,sampling_params)# 打印结果fori,outputinenumerate(outputs):print(f\n{*50})print(f提示{i1}:{output.prompt})print(f生成文本:{output.outputs[0].text})print(f{*50})if__name____main__:main()推理请求入口llm.generate()Prompt - EngineCoreRequestInputPreProcessor 模块支持多种 prompt 输入格式string, TextPrompt, TokensPrompt, or EmbedsPromptPrompt 处理核心逻辑InputPreProcessor.parse_singleton_prompt(prompt)。LLMEngine 会在服务启动时同步初始化 InputPreProcessor因此该模块是全局的。tokenizer 随之初始化用于分词编码 prompt。支持的 tokenizer如下v0.12.0以输入 prompt ‘The future of artificial intelligence’为例经过 InputProcessor 模块处理后生成的 prompt_token_ids [464, 2003, 286, 11666, 4430]。input_socket 转发数据请求经过InputProcessor处理所产生的 EngineCoreRequest 会交由OutputProcessor维护请求状态request_states字典结构dict[str, RequestState] {}以 request_id 粒度存储请求 RequestState。 模型自回归每次生成的 token 和 text 都会根据 request_id 更新至对应的 RequestState。然后请求会通过 SyncMPClient 发送至 input_socket供 EngineCore 异步调度处理。SyncMPClient 初始化时基于ZMQ socket创建 (launch_core_engines()) 配对的地址addresses.inputs 和 addresses.outputs 是预设的通信通道。addresses 为 vLLM 引擎的全局共享地址作为异步传输通道。ZMQ Socket 类型* ROUTER (input_socket)路由模式可接收来自多个客户端的消息* PULL (output_socket)拉取模式聚合来自多个上游的消息def_send_input(self,request_type:EngineCoreRequestType,request:Any):self.ensure_alive()self.free_pending_messages()# (Identity, RequestType, SerializedRequest)msg(self.core_engine,request_type.value,*self.encoder.encode(request))iflen(msg)3:# No auxiliary buffers no tensor backing buffers in request.self.input_socket.send_multipart(msg,copyFalse)returntrackerself.input_socket.send_multipart(msg,copyFalse,trackTrue)self.add_pending_message(tracker,request)EngineCoreProcEngineCoreProc 推送请求至调度器 waiting 队列请求 EngineCoreRequest 通过 (Sync)MPClient 推送 Socket 后需要被处理引擎如何感知MPClient 实例初始化时会启动 EngineCoreProc 异步线程 input_thread从 input_sockets 中 poll 数据。这里的数据就来源于 OutputProcessor 添加的请求 EngineCoreRequest最终会转换为Request。那么其实可以看出 input_thread 的核心逻辑是从 input_socket 中读取数据并转换数据类型它会通过队列 input_queue 将 Request 加入 Scheduler 的waiting调度队列供调度器分发请求。调度队列类型先到先服务FCFSRequestQueue / 优先级PriorityRequestQueue队列classSchedulingPolicy(Enum):Enum for scheduling policies.FCFSfcfsPRIORITYpriorityEngineCore 调度请求并获取结果schedule()方法是 vLLM 调度器的核心负责在每个调度步骤中决定哪些请求应该被执行并返回包含所有调度信息的 SchedulerOutput 对象。其核心工作流程就是根据 token 数量来分配 kv_cache_block。调度器会从 waiting 队列中取出任务判断其是否可以分配资源如果资源允许则将其移至running 队列。调度不区分 prefill 和 decoding 阶段每个请求有num_computed_tokens已计算和num_tokens_with_spec需要计算含推测目标让num_computed_tokens追上num_tokens_with_spec以输入 prompt_token_ids [464, 2003, 286, 11666, 4430] 为例经 scheduler 调度并由 ModelExecutor 执行后生成的输出sampled_token_ids [[13]]OutputProcessor请求被调度执行生成 token 后需要做进一步消费和解析核心逻辑由 OutputProcessor 模块执行。SyncMPClient 初始化时会启动异步线程output_queue_thread循环监听 output_sockettoken 由 EngineCore 调度 Model 生产并发送至 output_socket然后将数据放入output_queue队列由 OutputProcessor 异步消费。 值得注意的是模型自回归单次生成一个 token那么最终的 token 以及输出文本如何组装prompt 请求初次进入 OutputProcessor 时会被封装为RequestState实例以 req_id 为索引维护该请求在模型推理时的状态。这里的状态就包括已生成的 token / text维护在 RequestState 实例属性 Detokenizer 中。fornew_token_idinnew_token_ids:self.token_ids.append(new_token_id)self.output_textself.decode_next(new_token_id)如果遇到终止符标识或者输出文本中匹配停止字符串则输出最终的结果AsyncLLMEngineAsyncLLMEngine类是LLMEngine类的异步包装器。它使用asyncio创建一个后台循环持续处理传入的请求。AsyncLLMEngine专为在线服务设计能够处理多个并发请求并向客户端流式传输输出。AsyncLLMEngine源码vllm/engine/async_llm_engine.pyWorkerWoker是运行模型推理的进程。vLLM 遵循使用一个进程控制一个加速设备如GPU的常规做法。例如如果我们使用大小为 2 的张量并行和大小为 2 的流水线并行那么总共会有 4 个工作进程。工作进程通过rank和local_rank来标识。rank用于全局编排而local_rank主要用于分配加速设备以及访问本地资源如文件系统和共享内存。Model Runner每个Woker都有一个Model Runner负责加载和运行模型。大部分模型执行逻辑都位于此处例如准备输入张量和捕获 CUDA Graph。Model每个Model Runner对象都有一个Model对象该对象是实际的torch.nn.Module实例。有关各种配置如何影响最终实现类见 huggingface_integration。类层次结构

相关新闻

Windows Server 2022/2025 启用图片缩略图、预览窗格和照片查看器

Windows Server 2022/2025 启用图片缩略图、预览窗格和照片查看器

作者:非凡大爹|版本:v1.0|日期:2026-08-05 DocID:WIN-SERVER-2026-PHOTO-PREVIEW-V1.0 适用环境:Windows Server 2022 / Windows Server 2025(桌面体验) 原创声明&#x…

2026/9/18 9:59:41 阅读更多 →
本地部署开源大模型与图像生成:ChatGPT-5.6 Sol项目实践指南

本地部署开源大模型与图像生成:ChatGPT-5.6 Sol项目实践指南

这次我们来看一个名为“ChatGPT-5.6 Sol”的项目,它声称可以免费、无限制地使用。同时,项目还附带了“GPT-Image2”功能。对于关注AI应用,尤其是希望低成本或本地化体验类GPT对话和图像生成能力的开发者来说,这类信息总是充满吸引…

2026/9/13 14:59:39 阅读更多 →
RabbitMQ分片插件:突破单队列性能瓶颈的分布式消息队列解决方案

RabbitMQ分片插件:突破单队列性能瓶颈的分布式消息队列解决方案

1. 项目概述:为什么我们需要关注RabbitMQ分片?在构建现代分布式系统的过程中,消息队列早已成为不可或缺的基石。RabbitMQ凭借其成熟、稳定和协议友好的特性,在众多场景中扮演着“数据高速公路”的角色。然而,随着业务规…

2026/9/21 1:08:20 阅读更多 →

最新新闻

razzle-dev-utils 工具集完全指南:从日志、错误美化到 Loader 查找的 Razzle 开发辅助库

razzle-dev-utils 工具集完全指南:从日志、错误美化到 Loader 查找的 Razzle 开发辅助库

前端构建工具前端构建后端 【免费下载链接】razzle ✨ Create server-rendered universal JavaScript applications with no configuration 项目地址: https://gitcode.com/gh_mirrors/ra/razzle 点击查看 免费下载 本指南以 Razzle 仓库中 packages/razzle-dev-ut…

2026/9/23 23:07:30 阅读更多 →
医疗AI生成PPT的数据安全与完整性保障方案

医疗AI生成PPT的数据安全与完整性保障方案

1. 医疗场景下AI生成PPT的数据安全挑战在医疗信息化快速发展的今天,医护人员使用AI工具辅助制作学术报告、病例讨论PPT已成为普遍现象。某三甲医院统计显示,2023年有78%的临床科室使用过AI生成演示文档。但随之而来的数据安全问题不容忽视——去年国内医…

2026/9/23 23:07:30 阅读更多 →
数据安全与隐私计算技术深度解析与应用实践

数据安全与隐私计算技术深度解析与应用实践

1. 活动背景与核心价值解析这场由云创数安创始人兼总经理白云先生主讲的上海站活动,本质上是一场聚焦数据安全领域的行业深度交流会。作为国内数据安全赛道的早期实践者,白云及其团队在金融级数据加密、企业隐私计算架构等领域有多个标杆案例。活动选址上…

2026/9/23 23:07:29 阅读更多 →
OSPF课程设计:从配通到可验证的路由决策

OSPF课程设计:从配通到可验证的路由决策

简介:本资源是一份面向计算机网络专业本科生的课程设计实践文档,聚焦OSPF路由协议在多局域网互连中的实际应用,帮助学习者系统掌握子网划分、OSPF原理与配置、拓扑设计及Cisco设备实操等核心技能。压缩包为1个1.16MB的Word文档(.d…

2026/9/23 23:07:29 阅读更多 →
使用 PHP 与 AWS SDK 开发 Ceph RGW(S3 兼容)应用:从连接创建到签名 URL 的完整指南

使用 PHP 与 AWS SDK 开发 Ceph RGW(S3 兼容)应用:从连接创建到签名 URL 的完整指南

存储分布式文件系统对象存储后端高可用 【免费下载链接】ceph Ceph is a distributed object, block, and file storage platform 项目地址: https://gitcode.com/gh_mirrors/ce/ceph 点击查看 免费下载 本文以 Ceph 对象网关(RADOS Gateway&#xff0…

2026/9/23 23:07:29 阅读更多 →
星图识别全解析:从几何特征到姿态解算的工程实践

星图识别全解析:从几何特征到姿态解算的工程实践

简介:面向天文观测、航天导航与星图识别应用场景的MATLAB实现工具包,围绕星图识别全流程组织代码,适合需要开展星体特征提取、位置解算或BP网络识别实验的研究人员、工程师与相关专业学生。资源共18个文件,以15个m脚本为主&#x…

2026/9/23 23:06:29 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →