Ollama 性能瓶颈大揭秘:vLLM、llama.cpp 等主流推理引擎横评
来源:微信公众号 原文链接:https://mp.weixin.qq.com/s/Egf8ORQ1anVPgFP9VLLVEg 版权声明:本文为原创文章转载整理,版权归原作者所有
背景
Ollama 确实好上手——一条命令就能把模型跑起来,API 调起来跟 OpenAI 一个样,小打小闹搞个 demo 简直爽到飞起。
但是,当你真正把它推到生产环境,或者想在一张 4090 上跑出真正能用的吞吐量的时候,你会发现 Ollama 开始拉胯了:
- 显存占用感人
- GPU 利用率上不去
- 高并发直接跪了
- 批量推理慢得像蜗牛
结论:Ollama 适合快速实验,不适合生产部署。

Ollama 的性能瓶颈
1️⃣ 显存占用高得离谱
同样的 DeepSeek-R1 7B 模型,Ollama 跑起来显存占用能比 vLLM 高出 30%~50%。
原因: Ollama 的 KV Cache 管理策略相当原始,没有做精细化的显存优化。
2️⃣ GPU 利用率像过山车
单请求延迟 Ollama 确实不差,但一旦并发请求多了,GPU 利用率就开始剧烈波动,大量时间浪费在等待上。
- vLLM: PagedAttention 能把 GPU 利用率稳定在 85%+
- Ollama: 能稳住 60% 就谢天谢地了
3️⃣ 批量推理几乎是残血
批量文本处理、批量代码生成这类场景,Ollama 的吞吐量跟 vLLM 比起来简直是 5 倍起步的差距。

主流推理引擎横评
| 推理引擎 | 吞吐量 | 显存占用 | GPU利用率 | API兼容性 | 上手难度 |
|---|---|---|---|---|---|
| Ollama | ⭐⭐(基准) | ⭐⭐(偏高) | ⭐⭐⭐(60%) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| vLLM | ⭐⭐⭐⭐⭐(5x+) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐(85%+) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| llama.cpp | ⭐⭐⭐⭐(2-3x) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| LM Studio | ⭐⭐⭐⭐(2x) | ⭐⭐⭐⭐ | ⭐⭐⭐(60-70%) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| HuggingFace TGI | ⭐⭐⭐⭐⭐(5x+) | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
各引擎适用场景
👉 vLLM:生产环境首选
优势: PagedAttention + Continuous Batching 组合拳,显存利用率和吞吐量直接拉满
适用: 高并发 API 服务、批量推理任务、GPU 性能压榨
缺点: 配置比 Ollama 复杂一点
👉 llama.cpp:低配党和量化党的心头好
优势: 支持纯 CPU 推理,GGUF 量化格式能把模型体积压缩到原来的 1/4
适用: 无 NVIDIA 显卡、Mac 用户、老机器跑 7B 模型
数据: Q4_K_M 量化版本 7B 模型只需要 4GB 内存就能跑
👉 LM Studio:不想写命令行的懒人神器
优势: 图形界面一键安装模型、支持 LoRA 微调、本地 Chat 界面
适用: 不想折腾命令行的 Windows/Mac 用户
特点: 虽然性能不一定比 vLLM 强,但胜在直观
👉 HuggingFace TGI:大模型部署的行业标准
优势: Flash Attention 2、DeepSeek-V2 优化、量化支持都安排好了
适用: HuggingFace 生态、大厂生产环境
缺点: 资源占用比 vLLM 高那么一丢丢

vLLM 零基础部署教程
前置条件
- NVIDIA 显卡(至少 8GB 显存,建议 12GB+)
- CUDA 12.1+
- Python 3.10+ pip 环境
方法一:Docker 一键部署(推荐懒人)
# 拉取 vLLM 镜像(自动包含 CUDA 环境)
docker pull vllm/vllm-openai:latest
# 启动容器,映射模型路径和端口
docker run --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--quantization awq \
--tensor-parallel-size 1方法二:pip 直接安装(适合有 Python 环境的)
# 安装 vLLM(这步可能需要等几分钟)
pip install vllm# 写个启动脚本 server.py
from vllm import LLM, SamplingParams
# 加载模型(会自动下载到 HuggingFace 缓存目录)
llm = LLM(model="deepseek-ai/DeepSeek-R1-Distill-Qwen-7B")
# 推理
sampling_params = SamplingParams(temperature=1.0, top_p=0.95, top_k=64)
outputs = llm.generate(["请用 Python 写一个快速排序"], sampling_params)
for output in outputs:
print(output.outputs[0].text)方法三:OpenAI API 兼容模式启动(最常用)
# 启动 vLLM OpenAI 兼容 API 服务
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--dtype half \
--quantization awq \
--max-model-len 8192 \
--gpu-memory-utilization 0.9API 调用示例(完全兼容 OpenAI 格式)
import openai
client = openai.OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY" # 本地部署不需要 API Key
)
response = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
messages=[{"role": "user", "content": "解释一下什么是 PagedAttention"}]
)
print(response.choices[0].message.content)
踩坑预警
1. vLLM 量化慎用 CPU Offload
vLLM 默认会把整个模型塞进 GPU,但如果显存不够千万别硬撑。加 --enforce-eager 参数可以避免 CUDA OOM,但性能会下降一大截。
2. llama.cpp 的 GGUF 模型格式不通用
从 HuggingFace 下载的模型不能直接给 llama.cpp 用,必须转换成 GGUF 格式。可以用 llama.cpp/conversion_scripts 目录下的工具进行转换。
3. Ollama 的模型文件位置坑爹
Ollama 默认把模型存在系统盘(C 盘),跑几个大模型之后 C 盘直接爆红。修改 OLLAMA_MODELS 环境变量可以指定到其他盘符。
4. TGI 的多卡并行配置有点绕
TGI 需要手动指定 --tensor-parallel-size,而且不支持动态调整,新手容易翻车。vLLM 配置比 TGI 简单得多。
模型选择对照表
| 硬件配置 | 推荐模型 | 推荐引擎 | 量化方案 |
|---|---|---|---|
| Mac M1/M2(无独显) | Qwen2.5-3B / Gemma-4B | llama.cpp / LM Studio | Q4_K_M |
| RTX 3060 12GB / RTX 4060 Ti | DeepSeek-R1 7B / Qwen2.5 14B | vLLM / Ollama | Q4_K_M / FP16 |
| RTX 4090 24GB / A5000 | DeepSeek-R1 32B / Gemma-31B | vLLM / TGI | Q5_K_S / AWQ |
| 多卡 A100 40GB x2 | Qwen2.5-72B / Llama3.1-70B | vLLM / TGI | FP16 / AWQ |
一句话总结
- 快速实验 / Demo 搭建 → Ollama,一行命令搞定
- 生产环境 / 高并发 API → vLLM,吞吐量摆在那儿
- 低配机器 / 极致量化 → llama.cpp,4GB 内存跑 7B 模型不是梦
- 不想折腾命令行 → LM Studio,图形界面一键搞定
- 企业级 / HuggingFace 生态 → TGI,官方背书,稳定压倒一切

整理自微信公众号,版权归原作者所有