大模型本地部署,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,共享前缀只算一次,后续请求直接复用
两个典型场景:
- 多用户共享 system prompt:算一次,所有人用
- 多轮对话:第二轮的上下文包含第一轮的全部内容,重复部分直接从缓存取
课程里给的数据:当缓存命中率达到 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 tokens | 7 MB |
| 256 tokens | 28 MB |
| 1024 tokens | 112 MB |
| 4096 tokens | 448 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%免费】🆓
