【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/8/6 8:18:53 阅读更多 →
本地部署开源大模型与图像生成:ChatGPT-5.6 Sol项目实践指南

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

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

2026/8/6 8:18:53 阅读更多 →
RabbitMQ分片插件:突破单队列性能瓶颈的分布式消息队列解决方案

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

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

2026/8/6 8:18:53 阅读更多 →

最新新闻

Navicat无限试用终极指南:3种简单方法轻松管理数据库工具试用期

Navicat无限试用终极指南:3种简单方法轻松管理数据库工具试用期

Navicat无限试用终极指南:3种简单方法轻松管理数据库工具试用期 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你…

2026/8/7 11:04:13 阅读更多 →
FigmaCN中文汉化插件:设计师必备的界面本地化终极解决方案

FigmaCN中文汉化插件:设计师必备的界面本地化终极解决方案

FigmaCN中文汉化插件:设计师必备的界面本地化终极解决方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 作为一名中文设计师,面对Figma全英文界面时是否感到困…

2026/8/7 11:04:13 阅读更多 →
PlayCover:在Apple Silicon Mac上运行iOS应用和游戏的终极指南

PlayCover:在Apple Silicon Mac上运行iOS应用和游戏的终极指南

PlayCover:在Apple Silicon Mac上运行iOS应用和游戏的终极指南 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover是一款革命性的开源工具,专为Apple Silicon Mac用户设计…

2026/8/7 11:04:13 阅读更多 →
立库堆垛机通信升级:KAXA工业无线替代光通讯

立库堆垛机通信升级:KAXA工业无线替代光通讯

光纤光通讯是仓储传统联网方式,但场景适配性差,布线施工复杂、改造成本高,无法适配货架与设备变动;且不支持堆垛机移动漫游,严重影响仓储自动化作业效率。KAXA工业无线方案可替代传统光通讯,具备远距离传输…

2026/8/7 11:04:13 阅读更多 →
从“削顶”到“黄金参数”:记一次压电薄膜电荷放大器前端调参实战

从“削顶”到“黄金参数”:记一次压电薄膜电荷放大器前端调参实战

从“削顶”到“黄金参数”:记一次压电薄膜电荷放大器前端调参实战 摘要 在开发基于压电薄膜(PVDF)的心跳/呼吸监测设备时,我们经常面临一个难题:为什么理论计算完美的参数,在实际测试中却频频“削顶”或“信…

2026/8/7 11:04:13 阅读更多 →
MySQL REPLACE INTO 语句详解与批量更新优化

MySQL REPLACE INTO 语句详解与批量更新优化

1. REPLACE INTO 基础原理与语法解析 REPLACE INTO 是 MySQL 中一个特殊的 DML 语句,它的工作方式可以理解为"先删除后插入"的二合一操作。当执行 REPLACE INTO 时,MySQL 会首先尝试查找表中是否存在与主键或唯一索引冲突的记录。如果存在冲突…

2026/8/7 11:03:13 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →