当前位置: 首页 > news >正文

大模型本地部署,vLLM_推理优化,动手实验

周末刚刷完 DeepLearning AI 一门新课,vLLM 团队联合吴恩达出品,讲的是大模型本地部署的推理优化,免费的,质量极高,直接让我理解了为什么 vLLM 能成为开源推理引擎的事实标准

这门课是什么

课程叫Fast & Efficient LLM Inference with vLLM,由 Red Hat 高级开发者布道师 Cedric Clyburn 主讲,吴恩达团队联合打造,1.5 小时 9 节视频 + 3 个动手实验

核心内容分三大块:压缩(Compress)→ 部署(Serve)→ 评测(Benchmark),覆盖了从量化模型到本地跑服务再到性能压测的完整链路

今天我重点聊聊 Part I 和 Part II 讲的推理优化三板斧——Continuous Batching、PagedAttention、Prefix Caching,以及动手跑 vLLM 服务的实操代码

下面这张图概括了 vLLM 的三板斧分别解决什么问题:

为什么需要推理优化

LLM 推理有个致命问题:每生成一个 token 都要做一次完整的前向传播,把整个模型权重从显存搬到计算单元

如果一次只服务一个请求,GPU 的 tensor cores 大部分时间都在等数据搬运,计算利用率极低。打个比方,就像你开了一辆大卡车,每次只运一个快递包裹

解决方案很简单:批处理——把多个请求打包在一起处理。读一次模型权重,给多个用户同时算。同样的内存开销,干的活儿多了好几倍

第一板斧:Continuous Batching(连续批处理)

传统的Static Batching有个大问题:一批请求里,有人问"2+2等于几"(5 个 token 就搞定),有人要一篇 2000 字小作文。短请求早就算完了,但必须等那个最慢的请求结束,整批才能释放。GPU 空转,浪费严重

Continuous Batching 的思路:不再等整批结束,而是在token 级别调度。某个请求一结束,新请求立刻补上它的槽位

效果肉眼可见——GPU 永远在干活,没有空闲槽位

第二板斧:PagedAttention(分页注意力)

即使 GPU 算力够用,还有第二个瓶颈:显存

每个活跃请求都有自己的 KV Cache(键值缓存),随着生成 token 不断增长。传统方案一上来就按最大长度预分配一整块连续内存——比如给每个请求留 2048 个 slot

问题来了:

  • 内部碎片:请求只用了 200 个 token,剩下 1848 个 slot 白白浪费
  • 外部碎片:两个预分配块之间的空隙放不下新请求
  • 过度预留:还没用到的空间一直被锁着,别的请求用不了

vLLM 的论文指出,传统方案只有 20%~40%的 KV Cache 显存真正存了有用数据。其余全浪费了

PagedAttention 的核心创新:借鉴操作系统的虚拟内存分页机制。不再预分配大块连续内存,而是把 KV Cache 切成固定大小的小块(Block),散落在显存各处,用一张 Block Table 记录映射关系

KV Cache可视化

好处是:

  • 按需分配,用多少占多少
  • 块可以不连续,没有碎片
  • 请求结束后块立即释放,立即可被复用
  • 同样的显存能塞进更多并发请求

第三板斧:Prefix Caching(前缀缓存)

很多应用场景里,所有请求共享同一个 system prompt。比如你的 AI 客服可能有一段 500 token 的系统指令

没有 Prefix Caching 时,每来一个用户请求,vLLM 都要重新算这 500 token 的 KV Cache——做了大量重复计算

有了 Prefix Caching,共享前缀只算一次,后续请求直接复用

两个典型场景:

  1. 多用户共享 system prompt:算一次,所有人用
  2. 多轮对话:第二轮的上下文包含第一轮的全部内容,重复部分直接从缓存取

课程里给的数据:当缓存命中率达到 75% 时,吞吐量提升约4 倍。这是白捡的性能

动手实操:启动 vLLM 服务

理论讲完,上代码

启动一个 vLLM 推理服务只需要一行命令:

vllm serve Qwen/Qwen3-0.6B --dtype=bfloat16 --max-model-len 4096

各参数含义:

  • vllm serve:启动内置推理服务器,默认开启 PagedAttention + Continuous Batching + Prefix Caching,监听 8000 端口
  • Qwen/Qwen3-0.6B:Hugging Face Hub 上的模型 ID,首次运行自动下载
  • --dtype=bfloat16:以 BF16 精度加载权重
  • --max-model-len 4096:上下文窗口限制为 4096 token,vLLM 会据此预估 KV Cache 块池大小

服务启动后暴露 OpenAI 兼容的 HTTP API,直接用openai官方 Python SDK 调用,无需改代码

用 OpenAI SDK 连接本地 vLLM

import time, requests, json, osVLLM_URL = "http://localhost:8000"# 等待服务就绪print("Waiting for vLLM server...")for attempt in range(60): try: r = requests.get(f"{VLLM_URL}/v1/models", timeout=5) if r.status_code == 200: MODEL = r.json()["data"][0]["id"] break except requests.ConnectionError: pass time.sleep(5)print(f"Connected to {VLLM_URL} — model: {MODEL}")

连接上之后,用标准 OpenAI client 发请求:

from openai import OpenAIclient = OpenAI(base_url=f"{VLLM_URL}/v1", api_key="unused")resp = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "What is PagedAttention in one sentence?"}], max_tokens=80, temperature=0.7, extra_body={"chat_template_kwargs": {"enable_thinking": False}},)print(resp.choices[0].message.content)

注意api_key="unused"—— 本地服务不需要真的 API key,但 SDK 要求传一个非空值。base_url改成本地地址就行,应用代码零修改即可从 OpenAI 切换到自部署模型

查看 Logprobs:模型到底有多确定

vLLM 还能让你看到模型对每个 token 的置信度:

resp = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "The capital of France is"}], max_tokens=15, temperature=0.0, logprobs=True, top_logprobs=5, extra_body={"chat_template_kwargs": {"enable_thinking": False}},)for tok in resp.choices[0].logprobs.content[:8]: print(f" Chosen: '{tok.token}' (logprob {tok.logprob:.2f})")

在课程实验里,模型对 “Paris” 的置信度高达 92.5%——这对于判断模型是"知道答案"还是"瞎猜"非常有用

实战:Continuous Batching 效果观测

发 5 个并发请求,观察 vLLM 的 metrics:

import concurrent.futuresprompts = [ "What is quantization?", "Explain KV caching briefly.", "What is continuous batching?", "Why is LLM inference memory-bound?", "What is PagedAttention?",]def _ask(prompt): return client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": prompt}], max_tokens=60, temperature=0.7, extra_body={"chat_template_kwargs": {"enable_thinking": False}}, )start = time.time()with concurrent.futures.ThreadPoolExecutor(max_workers=5) as pool: futures = {pool.submit(_ask, p): p for p in prompts} for f in concurrent.futures.as_completed(futures): resp = f.result() print(f" done: \"{futures[f][:40]}\" -> {resp.usage.completion_tokens} tokens")elapsed = time.time() - startprint(f"\nAll 5 completed in {elapsed:.2f}s")

关键观察:5 个请求的总耗时远小于逐个串行的 5 倍,因为 Continuous Batching 让调度器把这些请求打包在同一个 batch 里并行生成

实战:Prefix Caching 效果验证

发 5 个请求,共享同一个 system prompt:

SYSTEM_PROMPT = ( "You are a helpful AI teaching assistant for a course on " "LLM optimization. You specialize in explaining concepts like " "quantization, inference optimization, and model serving. Keep " "answers concise -- one or two sentences.")questions = [ "What is weight quantization?", "How does vLLM handle memory?", "What is continuous batching?", "Why use prefix caching?", "What is GPTQ?",]for i, q in enumerate(questions): t0 = time.time() resp = client.chat.completions.create( model=MODEL, messages=[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": q}, ], max_tokens=60, temperature=0.7, extra_body={"chat_template_kwargs": {"enable_thinking": False}}, ) dt = time.time() - t0 print(f" [{i+1}] {q:<35} {dt:.2f}s")

通过/metrics端点可以看到prefix_cache_queries计数持续增长——vLLM 确实在复用 system prompt 的 KV Cache。课程实验里从 235 涨到 550,每次请求都省掉了 system prompt 的重算开销

KV Cache 到底占多大显存

来算笔账(以 Qwen3-0.6B 为例):

num_layers = 28num_kv_heads = 8 # GQA: 16 Q heads, 8 KV headshead_dim = 128dtype_bytes = 2 # BF16per_token = 2 * num_layers * num_kv_heads * head_dim * dtype_bytes# = 114,688 bytes ≈ 112 KB / token
上下文长度KV Cache 大小
64 tokens7 MB
256 tokens28 MB
1024 tokens112 MB
4096 tokens448 MB

10 个并发 × 4096 上下文 = 4.4 GB——这就是为什么 KV Cache 管理如此关键。PagedAttention 让每一字节都物尽其用

vLLM 的生态位

截至 2025 年 1 月,vLLM 日安装量超过10 万次,2024 年使用量增长了10 倍,是 GitHub 上贡献者数最多的 AI/ML 项目之一

它的定位很清晰:一个平台覆盖所有场景

  • 支持模型:Llama、Qwen、DeepSeek、Gemma、Mistral、Granite…
  • 支持硬件:NVIDIA GPU、AMD Instinct、Intel Gaudi、Google TPU、AWS Neuron、IBM Spyre
  • 部署环境:边缘、私有云、公有云通吃

最后唠两句

为什么AI大模型成为越来越多程序员转行就业、升职加薪的首选

很简单,这些岗位缺人且高薪

智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

那0基础普通人如何学习大模型 ?

深耕科技一线十二载,亲历技术浪潮变迁。我见证那些率先拥抱AI的同行,如何建立起效率与薪资的代际优势。如今,我将积累的大模型面试真题、独家资料、技术报告与实战路线系统整理,分享于此,为你扫清学习困惑,共赴AI时代新程。

我整理出这套 AI 大模型突围资料包【允许白嫖】:

  • ✅从入门到精通的全套视频教程
  • ✅AI大模型学习路线图(0基础到项目实战仅需90天)
  • ✅大模型书籍与技术文档PDF
  • ✅各大厂大模型面试题目详解
  • ✅640套AI大模型报告合集
  • ✅大模型入门实战训练

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

①从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点

② AI大模型学习路线图(0基础到项目实战仅需90天)

全过程AI大模型学习路线

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

④各大厂大模型面试题目详解

⑤640套AI大模型报告合集

⑥大模型入门实战训练

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

http://www.gsyq.cn/news/1500877.html

相关文章:

  • 别再硬猜了!教你写一个智能的AES密钥内存扫描器(Java实现,支持128/256位)
  • 使用Qt6 QML以及第三方库FluentUI、PCapPlusPlus开发一个自定义抓包软件
  • 2026年近期临沂全季5.0千里书卷品牌厂商选型指南 - 品牌鉴赏官2026
  • 从排名到转化:2026年五大SEO服务商服务能力多维度测评 - GEO优化
  • 2026年东莞硅胶制品厂家推荐:硅胶洗澡刷/酒吧垫/家居用品/公仔/钥匙扣/企业吉祥物,定制源头实力榜 - 品牌发掘
  • Matlab车型判别小工具:拖图进GUI,自动算车高比例分轿车/公交/面包车
  • 2026郑州大平层装修公司排行:郑州大平层装修/郑州新房毛坯装修/郑州装修公司/郑州全屋翻新/合规选型参考推荐 - 优质品牌商家
  • 多维聚合实战:超越GROUP BY的数据操作手册
  • 陕西透水混凝土施工技术全解析:西安彩色混凝土/西安彩色路面/西安生态透水路面/适配本地气候与合规标准 - 优质品牌商家
  • 2026年SEO服务商选型指南:五大优选品牌全维度解读与实力盘点 - GEO优化
  • 2026年新发布:探寻河北的悬浮拼接地板源头厂家联系方式 - 品牌鉴赏官2026
  • 2026年火锅底料加盟品牌排行及费用参考推荐:火锅店底料厂家供应/社区火锅店加盟真实回本周期多久/排行一览 - 优质品牌商家
  • BCU 平台 RS485 驱动适配:从 THVD1406 到 ISO3082
  • Obsidian同步太贵?手把手教你用Git+GitHub免费搭建个人知识库云端备份
  • Matlab口罩识别GUI工具:带语音提醒的本地图片检测程序
  • 2026年企业SEO服务商采购决策参考:五家口碑服务商全维度对比 - GEO优化
  • MC9S12伪停止模式与时钟监控:嵌入式低功耗与系统可靠性的核心实践
  • 数据的加密与解密(01:18)
  • S12ZVHY/ZVHL MCU外设电气规格与寄存器配置实战详解
  • 如何深度挖掘微信对话价值:WeChatMsg打造个人记忆数字档案库
  • AI 电动仿真树智能功率 MOSFET 完整选型方案
  • 2026北京好用的纤维素抑尘剂厂家排名参考 - 品牌排行榜
  • S12Z微控制器内存映射与中断控制:嵌入式系统稳定性的硬件基石
  • MC9S08MP16数据手册实战解读:从引脚配置到低功耗设计的硬件设计指南
  • 从SDH到OTN:老网工亲述骨干网升级踩过的那些‘坑’(含华为/中兴设备配置差异)
  • 4步搭建AI头像生成平台:从零到专业级SaaS的实战路径
  • Java 中创建线程:继承 Thread vs 实现 Runnable 的区别
  • 数据的加密与解密(01:00)
  • 数据的加密与解密(01:09)
  • 基于AT89C52和MPX4115的胎压监测Proteus仿真套件(含源码、电路图、论文)