欣淇
发布于 2026-05-10 / 1 阅读
0
0

vLLM79k Stars LLM OpenAI API:

项目地址:vllm-project/vllm | ⭐ 79.5k Stars | 🛠 Python | UC Berkeley Sky Computing Lab

老实说,跑 LLM 推理这事,过去两年我一直被两个问题折磨:显存不够用,吞吐上不去。单张 A100 跑 Llama-70B,batch size 开大了 OOM,开小了 GPU 利用率不到 20%。直到 vLLM 出现——这玩意儿靠一个叫 PagedAttention 的骚操作,直接把 KV cache 碎片化问题干掉了,吞吐能翻 10-20 倍。

一、PagedAttention:像操作系统管理内存一样管理 KV Cache

传统推理框架里,KV cache 是连续分配的,prefill 阶段就得把整个序列的内存预占好。但实际生成时 token 一个接一个来,前面预占的很多位置压根用不上,造成大量碎片浪费。

vLLM 的做法很粗暴:把 KV cache 切成一页一页的 16KB block,按需分配、按页管理——就像操作系统管理虚拟内存一样。缺页了就分配新 block,用完了就回收。就这么一个改动,显存利用率从 30% 拉到 95%+

二、一行命令拉起 OpenAI 兼容 API

安装:

uv pip install vllm

老规矩,pip 也行:

pip install vllm

拉起服务:

vllm serve meta-llama/Llama-3.1-8B-Instruct \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.9 \
  --dtype bfloat16

默认 8000 端口,直接当 OpenAI API 用:

curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-3.1-8B-Instruct",
    "messages": [{"role": "user", "content": "用 Python 写一个快排"}],
    "temperature": 0.7,
    "max_tokens": 512
  }'

实测单张 H100 跑 Llama-70B,vLLM 的 throughput 比 Hugging Face 原生推理高了 15 倍。不是玩具,是真能抗生产流量。

三、Offline 推理:当 Python 库用

不想起 HTTP 服务?直接 import 当库调用:

from vllm import LLM, SamplingParams

llm = LLM("meta-llama/Llama-3.1-8B-Instruct")
params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=1024)

outputs = llm.generate([
    "解释一下什么是 PagedAttention",
    "写一个 Python 装饰器实现重试逻辑",
], sampling_params=params)

for output in outputs:
    print(f"Prompt: {output.prompt}")
    print(f"Generated: {output.outputs[0].text}\n")

连续批处理是自动的——你扔一批请求进去,vLLM 自己决定哪些可以一起算,不用你管 batch size。

四、硬核功能一览

  • 连续批处理:动态塞请求,GPU 不闲着
  • 前缀缓存:相同 prompt 前缀只算一次,重复请求提速明显
  • FP8 / INT4 量化:半精度不够?直接压到 8bit,跑更大模型
  • 推测解码 (EAGLE):小模型先猜,大模型验证,加速 2-3x
  • 分离式 Prefill/Decode:Prefill 和 Decode 跑不同机器上,资源隔离
  • 多模态:LLaVA、Qwen-VL 也能 serving
  • 支持 200+ 模型架构:Llama、Qwen、DeepSeek、Mixtral、Gemma,几乎 HF 上能跑的都支持。

    五、踩坑记录

    别踩的坑有两个:

  • max-model-len 设太小:上下文窗口不够会截断,设 8192 起步。但设太大显存也涨,按需调。
  • 2. gpu-memory-utilization 别拉满:设 0.85-0.9 比较稳,0.95 以上在量化模型上容易崩。留点余量给 tokenizer 和其他开销。

    3. 多卡时设好 tensor-parallel-size

    vllm serve meta-llama/Llama-3.1-70B-Instruct \
      --tensor-parallel-size 4 \
      --pipeline-parallel-size 1
    

    70B 模型用 4 张 H100 跑 tensor parallel,单卡显存从 140GB 降到 35GB,基本线性扩展。

    六、总结

  • vLLM = PagedAttention + 连续批处理 + 量化 + 多卡并行,核心价值是把 GPU 显存榨干
  • 一行命令起服务,兼容 OpenAI API,迁移成本为 0
  • 离线推理扔 list 进去自动批处理,不用手动调 batch
  • 生产环境建议 gpu-memory-utilization=0.9 + max-model-len=8192
  • 想上 production 做 LLM serving,vLLM 是当前最成熟的选择,没有之一

  • 评论