⚔️ 前言:推理框架的战国时代
如果你直接用HuggingFace Transformers的原生代码model.generate()去跑服务,那你就是在浪费 GPU。
原生推理存在显存碎片化严重、无法连续批处理(Continuous Batching)等致命弱点。
为了榨干显卡的每一滴算力,三大流派应运而生:
- 极致吞吐派 (vLLM):一切为了并发。
- 便携易用派 (Ollama):一切为了在笔记本上能跑。
- 工业标准派 (TGI):一切为了生产环境的稳定与生态。
🏗️ 一、 核心技术栈对比
在开打之前,先看看它们的武器库。
| 特性 | vLLM | TGI (Hugging Face) | Ollama |
|---|---|---|---|
| 核心技术 | PagedAttention(显存分页) | Flash Attention + Rust | llama.cpp(GGUF 量化) |
| 开发语言 | Python + CUDA Kernels | Rust + Python | Go + C++ |
| 量化支持 | GPTQ, AWQ, FP8 | GPTQ, AWQ, EETQ | GGUF (CPU/GPU 混合) |
| 部署难度 | 中 (Python 环境) | 中 (Docker 容器) | 极低 (一键安装) |
| 适用场景 | 高并发服务器 | 企业级集群生产环境 | 个人电脑 / 边缘设备 |
架构原理逻辑图 (Mermaid):
🏎️ 二、 为什么 vLLM 快得离谱?(技术硬核)
vLLM 的杀手锏是PagedAttention。
在传统推理中,KV Cache(键值缓存)需要占用连续的显存空间。但生成的 Token 长度是不确定的,为了防止显存溢出,系统通常会预留最大长度(比如 2048)的空间。这导致了严重的显存碎片和浪费(有时浪费率高达 60%)。
vLLM 借鉴了操作系统的虚拟内存分页思想:
- 它将 KV Cache 切分成很多小块(Block)。
- 这些块在物理显存中是不连续的。
- 通过查表法,动态地将逻辑 Token 映射到物理 Block。
结果:显存利用率接近 100%,意味着同一张显卡可以塞进更大的 Batch Size,吞吐量(Throughput)自然暴涨。
📊 三、 实战评测:Llama-3-8B 谁更强?
测试环境:
- GPU: NVIDIA RTX 4090 (24GB)
- Model: Meta-Llama-3-8B-Instruct
- Prompt: 输入 128 tokens,输出 256 tokens。
- 并发数: 1, 10, 50 (模拟不同负载)
1. 单用户低负载 (Latency 延迟测试)
场景:你自己一个人在本地和 AI 聊天。
| 框架 | 首字延迟 (TTFT) | 生成速度 (Tokens/s) | 显存占用 |
|---|---|---|---|
| Ollama (FP16) | 0.3s | 65 t/s | 16GB |
| Ollama (Q4_0) | 0.2s | 85 t/s | 6GB |
| vLLM (FP16) | 0.4s | 72 t/s | 20GB (预占) |
| TGI (FP16) | 0.5s | 70 t/s | 18GB |
结论:在单用户场景下,Ollama凭借优秀的 GGUF 量化加载速度和轻量化,体验最好。vLLM 甚至因为预分配显存稍显笨重。
2. 高并发高负载 (Throughput 吞吐量测试)
场景:公司内部 50 人同时调用 API。
| 框架 | 并发数 (Batch) | 总吞吐量 (Tokens/s) | 显存利用率 |
|---|---|---|---|
| Ollama | 50 | 约 300 t/s (排队严重) | 低 |
| TGI | 50 | 约 1800 t/s | 高 |
| vLLM | 50 | 约 2600 t/s | 极高 (近100%) |
结论:vLLM 完胜。
当并发上来后,Ollama 基本是串行处理(或 Batch 很小),用户要排队。
TGI 虽然支持 Continuous Batching,但在极致的显存管理上输给了 vLLM 的 PagedAttention。vLLM 可以在同样的显存里塞进更多的请求,总吞吐量遥遥领先。
💻 四、 部署代码速查
1. vLLM (Python 方式)
# 安装pipinstallvllm# 启动兼容 OpenAI 的 API 服务python-mvllm.entrypoints.openai.api_server\--modelmeta-llama/Meta-Llama-3-8B-Instruct\--gpu-memory-utilization0.95\--port80002. TGI (Docker 方式)
dockerrun--gpusall --shm-size 1g-p8080:80\-v$PWD/data:/data\ghcr.io/huggingface/text-generation-inference:latest\--model-id meta-llama/Meta-Llama-3-8B-Instruct3. Ollama (一键方式)
# 安装完成后ollama run llama3# 或者启动服务ollama serve🎯 五、 最终裁决:谁是你的菜?
- 如果你是后端开发/MLOps,需要搭建一个给全公司用的 AI 中台,或者你的业务 QPS 很高 ——请无脑选 vLLM。它是目前的吞吐量之王,能帮你省下昂贵的 GPU 费用。
- 如果你是 Hugging Face 重度用户,或者需要用到一些非常新的模型架构(vLLM 还没来得及适配),或者需要极其稳定的企业级支持 ——选 TGI。
- 如果你是个人开发者、Mac 用户,或者显存很小(只有 8G/12G),只想在本地跑个 AI 玩玩 ——Ollama 是你的神。别折腾 vLLM 了,环境配置能搞死人。
Next Step:
手里有 NVIDIA 显卡的同学,立刻安装 vLLM,用下面的命令测测你的显卡极限吞吐量:python -m vllm.entrypoints.openai.api_server --model <你的模型路径>,然后用ab或wrk压测一下,看看能飙到多少 Tokens/s?