vLLM 实战

vLLM 推理引擎性能分析基准测试 本文为 vLLM 推理引擎根据官方提供的数据集进行的性能基准测试,主要测试分析 --enable-chunked-prefill 的启用/禁用以及 --max-num-batched-tokens 参数的调整对性能的影响情况... 阅读详情

引言

随着人工智能技术的飞速发展,以及今年以来 ChatGPT 的爆火,大语言模型 (Large Language Model, LLM) 受到越来越多的关注。

为了实现 LLM 部署时的推理优化,全球各地有众多团队做出了各种优化框架。本文以加州大学伯克利分校开发的 vLLM 框架为例,进行实战探索。

1. 整体介绍

根据公开文档中的实验结果, vLLM 吞吐量比 Hugging Face Transformers 高出 24 倍,比 TGI 高出 3.5 倍。

c78f68ab6d900f3595edd2647edd06e3.png

vLLM 整体框架如下图所示。

69bc9c9da0f93d074b499906e7c3edfc.jpeg

其中的关键技术点包括:

  • KVCache 显存优化

  • PagedAttention

  • Continuous Batching

笔者通过实际使用,认为该框架优点如下:

  • 调试方便: 主框架由 Python 实现,便于用户断点调试。

  • 系统设计工整规范: LLMEngine、Scheduler、Worker 结构清晰,初学者可以方便地理清脉络。

  • 推理速度快: 经过理论计算与实测, 8 卡 A100-40G 足以支持千人试用。

2. offline_inference 示例复现分析

(1) 调试环境配置

为方便复现,笔者制作了 dockerfile 用于编译 base 镜像,base 镜像把 vllm 的依赖库都安装好,基于 base 镜像直接再安装 vllm 库即可复现。

docker build -t vllm_ci-benchmark:base -f ci/docker/ci-benchmark-base.dockerfile .

docker build -t vllm_ci-benchmark:v1 -f ci/docker/ci-benchmark.dockerfile .

镜像是基于 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04 (95d242fe9108) (9.83GB) 制作而来,篇幅所限,此处只展示 ci-benchmark.dockerfile 内容。

FROM vllm_ci-benchmark:base

COPY . /code/vllm

RUN cd /code/vllm && \
    python3 -m pip install -e . && \
    rm -rf ~/.cache

而后基于 vllm_ci-benchmark:v1 镜像创建容器,配置 vscode 断点调试环境,便于跟踪 offline_inference 示例的全流程。

(2) 模型下载与复现

提前从 facebook/opt-125m 下载 pytorch_model.bin 格式的模型和源码文件夹,而后将 offline_inference 中的模型路径改为本地路径,复现结果如下图所示。

631049104eee660beaa5a0837399ebd8.png

(3) offline_inference 流程梳理

(a) Create sampling_params

根据用户设置,创建采样参数类对象 sampling_params,只指定 temperature=0.8, top_p=0.95 的情况下,其他默认值如下所示。

SamplingParams(n=1,
               best_of=1,
               presence_penalty=0.0,
               frequency_penalty=0.0,
               temperature=0.8,
               top_p=0.95,
               top_k=-1,
               use_beam_search=False,
               stop=[],
               ignore_eos=False,
               max_tokens=16,
               logprobs=None)

各参数的取值范围见 vllm/sampling_params.py 里相关 _verify_xxx 函数。

(b) Create an LLM

LLM 类对象的构造函数中,首先创建 EngineArgs 类对象 engine_args 如下。

EngineArgs(model='/bigdata/shared/models/huggingface/opt-125m',
           tokenizer='/bigdata/shared/models/huggingface/opt-125m',
           tokenizer_mode='auto',
           trust_remote_code=False,
           download_dir=None,
           use_np_weights=False,
           use_dummy_weights=False,
           dtype='auto',
           seed=0,
           worker_use_ray=False,
           pipeline_parallel_size=1,
           tensor_parallel_size=1,
           block_size=16,
           swap_space=4,
           gpu_memory_utilization=0.9,
           max_num_batched_tokens=2560,
           max_num_seqs=256,
           disable_log_stats=True,
           quant_mode=None)

然后基于 engine_args ,构造 LLM 类内核心变量 llm_engine ,最后添加一个类内计数器 request_counter。

self.llm_engine = LLMEngine.from_engine_args(engine_args)
self.request_counter = Counter()
(c) Generate

在 LLM.generate 的处理过程中,核心操作分为两步。

第一步是调用 LLM._add_request ,通过 LLM.llm_engine.add_request 将用户传入的请求添加到请求列表中,添加完后,请求列表 LLM.llm_engine.scheduler.waiting 中内容如下。

[ \
    SequenceGroup(request_id=0, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1),
    SequenceGroup(request_id=1, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1),
    SequenceGroup(request_id=2, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1),
    SequenceGroup(request_id=3, sampling_params=SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, temperature=0.8, top_p=0.95, top_k=-1, use_beam_search=False, stop=[], ignore_eos=False, max_tokens=16, logprobs=None), num_seqs=1)
]

第二步是调用 LLM._run_engine,通过 LLM.llm_engine.step(),转到 LLM.llm_engine._run_workers 函数中进行处理。

在 LLM.generate 的处理过程中,LLMEngine, Scheduler, Worker 协作配合,LLMEngine 负责总控,Scheduler 负责调度,Worker 负责执行,脉络清晰,其设计思路很值得学习借鉴。

3. 总结

vLLM 框架通过 PagedAttention 等关键技术,在多 batch 推理时,与传统 Hugging Face Transformers 框架相比,大幅提高了推理速度和吞吐量。

本文针对 vLLM 框架的 offline_inference 示例进行了复现与梳理分析,接下来准备进一步深入探索 PagedAttention 等特性。受限于笔者知识水平,文中可能会存在某些理解身上的偏差,欢迎各位大佬进行交流,共同进步。

a7612462870fa1f4bcfeb6beaa04aeda.png

只需 24G 显存,用 vllm 跑起来 Yi-34B 中英双语大模型 上次介绍了用 vllm 去部署 mixtral 8x7b 的 GPTQ 量化版本,只是跑了一下 benchmark,这次玩一下 Yi-34b 这个模型的量化版本,看看怎么使用 vllm 直接暴露出来一个 API 服务。 阅读详情

相关推荐

利用vLLM本地安装和配置大语言模型-猎户星空

这次本地安装和配置是通过一系列Dockerfile指令,构建了一个兼容OpenAI接口标准的vLLM推理框架镜像。这意味着用户可以轻松地在自己的电脑上设置并启动大语言模型的推理服务。如果你是第一次使用Docker(一个可以让软件在隔离环境运行的工具),不用担心。你可以去Docker的官方网站,那里有很多教程可以帮助你开始。确保你已经在你的电脑上安装了Docker。

Michael的博客 2880

【vLLM】【基准测试】:vLLM部署大模型的基准测试

从以上基准测试来看,在使用Qwen2___5-Coder-32B-Instruct-GPTQ-Int8和QwQ-32B-Preview模型进行vllm推理时,模型本身就比较大,外加生成的文本质量高就会带来更多的负担,更改为7B级别的chat模型之后,会有比较高的一个正确率,但是相应的文本质量就会降低,综上vllm启动的OpenAI的APi端口,有不错的稳定性,并不会因为大量的请求出现宕机的情况,但是由于本身算力的限制和迫切生成高质量文本的本能,会导致请求的成功率比较低,换言之,即API的并发性不高。模型。

qq_53690996的博客 6349

LLM 推理卡顿?vLLM 核心技术原理 + 最佳实战全攻略:让你的大模型推理飞起来!

vLLM 是一款专为大语言模型推理优化的高性能推理引擎,凭借创新的 PagedAttention 技术与动态批处理机制,在提升吞吐量、降低延迟、节省显存方面表现卓越。本文将深入剖析 vLLM 的核心架构设计原理,包括其对 KV Cache 管理的优化策略、多请求并发调度方式以及对 OpenAI 接口协议的兼容能力。同时,文章还将手把手带你完成 vLLM 的本地部署、API 启动、模型调用等实战操作,帮助你快速构建一个响应迅速、资源友好的大模型推理服务。无论你是构建私有化 LLM 服务,还是开发 RAG 系统

博客虽小,世界尽在其中 2636

在docker中使用vLLM部署大模型

注意,如果在启服务的时候遇到了下面这个错误,需要进入到模型所在的文件夹,找到config.json,修改其中的max_position_embeddings字段和你的max_model_len匹配。这里注意,–limit-mm-per-prompt参数尽量加上,如果不加的话,一个对话里最多只能有一张图片,多了就会报错400,这里我随便设成了5,一个对话中对于5张图片就会报400。这个网站就可以实现,直接把转换内容替换到上面 “url” 的值就可以了,因为那个编码太长了,贴一张图片作为例子。

m0_52827625的博客 5571

用vllm/SGLang部署专属你的Qwen3大模型【附实战代码】

一文详解用vllm/SGLang部署专属你的Qwen3大模型

m0_55303420的博客 3899

vLLM与SGLang实战:构建高效并行大模型推理服务

大语言模型推理服务的核心挑战在于如何在有限GPU显存下实现高吞吐、低首字延迟与灵活编排。PagedAttention通过类虚拟内存的块化KV缓存管理,显著提升显存利用率并支持跨请求缓存复用;SGLang则将推理流程升维为可编程函数,天然支持EPLB(高效并行大语言模型后端)范式,实现模型调用、外部API、条件分支的统一调度与并发执行。该技术路径广泛适用于客服对话、代码补全、多模态协同等生产场景,尤其契合vLLM部署大模型、SGLang EPLB等高频工程实践需求。

weixin_34146805的博客 457

Python vLLM 实战应用指南

动态批处理:可以高效处理多个请求并动态优化批处理大小。高效内存管理:通过零拷贝缓存技术减少显存使用。简单易用:提供类 PyTorch API 接口,支持 Hugging Face 模型。vLLM 支持从 Hugging Face Hub 加载模型,也可以加载本地模型。vLLM 支持在本地运行一个服务,接收 HTTP 请求来生成文本。这非常适合构建 API 服务。vLLM 是一个高效的生成式模型推理引擎,适合各种文本生成任务。通过简单的代码,你可以快速实现聊天机器人、文本补全、API 服务等应用。优点。

爱死亡机器人 2950

大模型推理加速框架vllm部署的实战方案

本文主要介绍了大模型推理加速框架vllm部署的实战方案,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 3. 运行vllm

herosunly的博客 3万+

vLLM量化推理与极致显存优化实战

本文系统梳理vLLM在大模型量化推理与显存优化方面的核心原理与主流方案,详细讲解BitsAndBytes、AWQ、FP8、Quark、GGUF等量化技术,结合KV缓存量化机制,配合丰富的Python实战代码、Mermaid架构图、流程图、思维导图、甘特图、饼图等多种可视化手段,帮助中国AI开发者全面掌握大模型量化推理的最佳实践。文末附常见问题解答、性能优化建议及权威参考资料,助力高效落地大模型推理服务。vLLM通过灵活的量化推理与KV缓存量化机制,极大降低了大模型推理的显存门槛与部署成本。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1817

通义Qwen实战(2): vllm框架部署实战

通义千问推荐我们使用vllm推理框架,这是国外开源的针对大模型的推理框架。它区别于直接使用huggingface 或者modescope 调用大模型的代码,使用vllm推理时它的速度会更快,并且显存的时候会下降。它会对模型进行结构化的优化,使得推理时耗费更低的显存和算力。因此,通常大模型的在线服务,不会直接使用huggingface 或modescope提供的api, 而是把底层的transformer模型交给专业的推理框架。vllm 推理框架的官网地址:(1) 通过使用。

@bangbang的博客 1066

基于QwenAgent解锁Qwen3无思考高效模式:vLLM部署实战与Ollama模板定制

本文探索了Qwen3混合推理模型在不同部署方式下的表现优化方案。测试发现:Qwen3相比Qwen2.5在推理能力上显著提升,但默认会输出冗长的思考过程,影响响应效率。通过对比Ollama和vLLM两种部署方式,最终采用修改Ollama模板的方法,创建了自定义模型qwen3nt(no think),成功实现了推理能力与响应简洁性的最佳平衡。

羊城迷鹿的博客 1533

实战:vLLM多机多卡部署大模型

【代码】实战:vLLM多机多卡部署大模型。

weixin_46316820的博客 3611

魔兽世界怀旧服宏命令全解析:从自动换装到智能判定,老玩家才知道的黑科技

本文全面解析魔兽世界怀旧服宏命令的高级应用,从自动换装到智能判定,揭秘老玩家专属的黑科技技巧。深入探讨怀旧服特有的宏命令机制,包括施法队列、装备切换系统和职业专属技巧,帮助玩家在经典旧世版本中提升战斗效率。

weixin_29230865的博客 727

从零部署Qwen大模型:vLLM实战指南

本文详细介绍了如何使用高性能推理引擎vLLM部署Qwen大模型,并提供了Python和Java两种语言的实现代码。首先,文章推荐了适合的硬件配置,包括GPU、CPU、内存等,并指导如何搭建vLLM推理环境,包括创建Python虚拟环境和安装vLLM引擎。接着,文章详细说明了如何下载Qwen模型并启动API服务,以及如何通过curl、Python和Java进行服务验证。最后,文章展示了如何实现基础对话功能,并提供了PostMan、Python和Java的调用示例。总结部分强调了环境准备、vLLM安装、大模型下

2401_84204207的博客 1338

OpenIddict实战:5步搞定.NET Core应用的OIDC单点登录集成

本文详细介绍了如何使用OpenIddict在.NET Core应用中快速实现OIDC单点登录集成。通过五个关键步骤,包括环境准备、数据库集成、客户端注册、令牌配置和多应用SSO集成,帮助开发者高效构建安全的企业级单点登录解决方案。

lambda的博客 726

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 895

【建议收藏】vLLM高性能推理框架实战:数据并行部署破解大模型落地难题

【建议收藏】vLLM高性能推理框架实战:数据并行部署破解大模型落地难题

AI大模型的博客 2181

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

vLLM多模态推理与扩展能力实战

本文系统梳理vLLM在多模态推理与扩展能力方面的核心原理与实现机制,详细讲解多模态架构、模型适配、API用法、典型场景、扩展机制等关键技术,结合源码与官方文档,配合丰富的Python实战代码、Mermaid架构图、流程图、思维导图、甘特图、饼图等多种可视化手段,帮助中国AI开发者全面掌握大模型多模态推理与能力扩展的最佳实践。文末附常见问题解答、性能优化建议及权威参考资料,助力高效落地多模态AI应用。vLLM通过灵活的多模态推理与扩展机制,极大拓展了大模型的应用边界。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1435

Vue - 最新详细实现滑块拖动拼图验证,网站登录验证滑块验证功能,拖动滑块到图片缺口的位置即为成功,滑块验证安全检测(详细示例代码,一键复制运行)

您一定见过很多系统都“配备”了滑块验证、拼图验证、找不同等,本质上都是为了验证登录系统的是人还是机器(代码),如下图所示效果: 您打开项目根目录,终端执行如下命令:拼图式拖动滑块验证 验证拖动滑块验证,滑动拼图/图片点选验证 接下来,在中加入以下代码: 如下图所示: 更多配置示例和参数详见官方文档,以下便是如上效果图的代码:.........

🏆 前端领域优质创作者 1万+

【芯片设计- RTL 数字逻辑设计入门 番外篇6 -- 术语 Tile 介绍】

在系统级芯片(System on Chip, SoC)设计中,“tile” 是一个可以指代不同概念的术语,但通常它指的是芯片上的一个独立的功能单元或核心。一个 tile 可以包含一个或多个处理器核心、缓存、内存控制器、输入输出设备、外设接口或其他功能模块。在 SoC 上,多个 tile 可以被组合和连接起来,以形成一个完整的系统。

CodingCos的博客 3065

vLLM项目规划与工程落地全流程实战指南

本文系统梳理vLLM项目从需求分析、技术选型、架构设计、开发实现、测试优化、部署上线到运维监控的全流程,结合源码与官方文档,详细讲解大模型推理服务的工程化落地路径、项目管理、团队协作、风险控制、最佳实践与常见问题,配合丰富的Python实战代码、Mermaid架构图、流程图、思维导图、甘特图、饼图、时序图等多种可视化手段,帮助中国AI开发者高效推进vLLM项目的工程落地与持续优化。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1224

ParaView: GUI 轴网格

ParaView: GUI 轴网格

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1923

LLM大模型学习必知必会——基于Swift的VLLM推理加速与部署实战

哈喽,今天我们玩点高科技!。你可能会想,Swift不是写iOS和macOS应用的语言吗?居然还能和VLLM(可扩展大语言模型推理库)搭上关系?今天就带你探索如何使用Swift与VLLM进行推理加速与部署,结合这两者的优势,实战解决大模型的推理性能问题。

资深程序员,曾自学JAVA,C#,如今从业于网安行业 1716

S32K144 UDSdoCAN 升级刷写实现笔记

本篇旨在描述如何开发“车规级”的软件升级程序,通过在S32K144平台上实现基于UDSdoCAN的刷写升级功能,带你一步步建立安全升级的“工程思维”,在这里既能收获经验还能获得工程源码、测试脚本,助你起飞,避坑提速!

汽车电子软件领域知识分享 811

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 大语言模型微调实践——LoRA 微调细节
下一篇: <span class=“js_title_inner“>vLLM 实战</span>
Linux基金会AI&Data基金会
博客等级 码龄6年 100粉丝 47原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux基金会AI&Data基金会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值