1. 引言:四个名字,两种维度
如果你最近在折腾大模型推理,一定绕不开这四个名字:vLLM、SGLang、llama.cpp、Ollama。它们经常出现在各种教程、对比文章和招聘 JD 里,但很多人一开始都会懵——它们到底是不是同一类东西?能不能互相替代?
先说结论:这四者不是同一维度的产品,不能简单地说“谁比谁强”。
- vLLM和SGLang是推理引擎(Inference Engine),面向服务端、追求高吞吐和低延迟,是“给 GPU 集群用的”。
- llama.cpp是推理运行时(Runtime),主打 CPU/边缘设备也能跑,是“给普通电脑和手机用的”。
- Ollama是部署工具/封装层(Wrapper),它把 llama.cpp 等底层引擎包装成一行命令就能启动的服务,是“给开发者省事用的”。
一句话记忆:vLLM/SGLang 是“发动机”,llama.cpp 是“便携发电机”,Ollama 是“一键启动的电源箱”。
本文会分 3 节讲清楚它们的定位、原理差异和实操方法,最后给出选型建议。
2. 逐个拆解:它们各自解决什么问题
2.1 vLLM:为高并发服务而生
vLLM 由 UC Berkeley 团队开源,核心卖点是PagedAttention(分页注意力)技术。它把 KV Cache(键值缓存)按“页”管理,像操作系统管理内存一样,大幅减少显存浪费,从而把吞吐量提升 2~4 倍。
适用场景:生产环境 API 服务、多用户并发请求、需要高吞吐的推理集群。
实操示例:启动一个 OpenAI 兼容的 API 服务
pipinstallvllm vllm serve meta-llama/Llama-3.1-8B-Instruct\--host0.0.0.0\--port8000\--tensor-parallel-size2启动后即可用 OpenAI SDK 调用:
fromopenaiimportOpenAI client=OpenAI(base_url="http://localhost:8000/v1",api_key="EMPTY")resp=client.chat.completions.create(model="meta-llama/Llama-3.1-8B-Instruct",messages=[{"role":"user","content":"你好,介绍一下你自己"}])print(resp.choices[0].message.content)2.2 SGLang:更快的调度与结构化生成
SGLang 由 LMSYS(就是做 Chatbot Arena 的那个团队)推出,核心创新是RadixAttention(基数注意力)和自动前缀复用。它把“提示词公共前缀”缓存起来,多个请求共享,从而显著降低首 token 延迟(TTFT),在长上下文、多轮对话场景下优势明显。
适用场景:长上下文对话、Agent 多轮调用、需要结构化输出(JSON Schema)的场景。
实操示例:启动服务并启用 JSON 结构化输出
pipinstallsglang python-msglang.launch_server\--model-path meta-llama/Llama-3.1-8B-Instruct\--port30000客户端强制输出 JSON:
fromsglangimportfunction,system,user,assistant,gen@functiondefextract_info(s):s+=system("你是一个信息抽取助手")s+=user("从下面文本中抽取人名和公司:{text}")s+=assistant(gen("answer",max_tokens=128,regex="\{.*\}"))state=extract_info.run(text="张三在腾讯工作")print(state["answer"])2.3 llama.cpp:CPU 也能跑大模型
llama.cpp 是 Georgi Gerganov 发起的 C/C++ 项目,核心价值是量化(Quantization)和跨平台。它把模型量化到 4-bit、5-bit,让普通 CPU、MacBook、树莓派甚至手机都能跑大模型,不需要昂贵的 GPU。
适用场景:本地离线推理、边缘设备、隐私敏感场景、没有 GPU 的开发机。
实操示例:用 llama.cpp 跑一个量化模型
# 1. 克隆并编译gitclone https://github.com/ggerganov/llama.cppcdllama.cpp&&make# 2. 下载量化模型(以 Qwen2.5-1.5B-Q4_K_M 为例)# 从 HuggingFace 下载 GGUF 文件到 models/ 目录# 3. 运行交互式对话./llama-cli-mmodels/qwen2.5-1.5b-q4_k_m.gguf\-p"你好,请做个自我介绍"\-n1282.4 Ollama:把复杂留给自己,把简单留给用户
Ollama 是一个开箱即用的部署工具,底层默认使用 llama.cpp 作为推理后端。它把“下载模型、启动服务、暴露 API”这三件事压缩成一条命令,非常适合本地开发和快速原型验证。
适用场景:本地开发调试、快速 Demo、个人电脑上体验大模型、配合 LangChain 等框架做原型。
实操示例:一行命令跑起 Llama 3.1
# 安装后拉取模型并启动服务ollama pull llama3.1 ollama run llama3.1Ollama 也暴露 OpenAI 兼容接口,端口默认11434:
curlhttp://localhost:11434/v1/chat/completions\-H"Content-Type: application/json"\-d'{ "model": "llama3.1", "messages": [{"role": "user", "content": "你好"}] }'3. 横向对比:一张表看懂差异
| 维度 | vLLM | SGLang | llama.cpp | Ollama |
|---|---|---|---|---|
| 定位 | 推理引擎 | 推理引擎 | 推理运行时 | 部署工具(封装层) |
| 核心优势 | 高吞吐、PagedAttention | 低延迟、前缀复用、结构化输出 | 量化、跨平台、CPU 可跑 | 一键部署、开箱即用 |
| 底层语言 | Python + CUDA | Python + CUDA | C/C++ | Go(封装 llama.cpp) |
| 硬件要求 | 需要 GPU(NVIDIA) | 需要 GPU(NVIDIA) | CPU/GPU/手机均可 | 跟随底层引擎 |
| 量化支持 | 有限(AWQ/GPTQ) | 有限(AWQ/GPTQ) | 原生强项(GGUF) | 支持 GGUF |
| API 兼容 | OpenAI 兼容 | OpenAI 兼容 | 原生 CLI + 简易 server | OpenAI 兼容 |
| 典型场景 | 生产 API 服务 | Agent/长上下文 | 边缘/离线推理 | 本地开发/快速 Demo |
| 上手难度 | 中 | 中 | 中高 | 极低 |
关键结论:
- vLLM vs SGLang:两者都是 GPU 服务端引擎。vLLM 胜在生态成熟、社区大、吞吐稳定;SGLang 在长上下文和结构化生成上更激进,TTFT 更低。生产环境两者都可靠,选哪个看团队熟悉度。
- llama.cpp vs Ollama:llama.cpp 是“引擎”,Ollama 是“包装”。Ollama 底层就是 llama.cpp,但 Ollama 帮你处理了模型下载、服务启动、API 暴露等琐事。如果你要深度定制量化参数,直接用 llama.cpp;如果只是快速跑起来,用 Ollama。
- 跨维度关系:Ollama 可以理解为“llama.cpp 的友好前端”;而 vLLM/SGLang 与 llama.cpp/Ollama 是服务端 vs 本地的两条路线,不是竞争关系。
4. 总结与选型建议
回到最初的问题:它们到底有什么区别?
- 如果你要部署生产级 API 服务,面对大量并发请求 → 选vLLM或SGLang。
- 如果你要在长上下文、Agent 多轮、结构化输出上追求极致性能 → 优先SGLang。
- 如果你没有 GPU,想在 MacBook、CPU 服务器或手机上跑模型 → 选llama.cpp。
- 如果你只想快速本地体验、做 Demo 或配合 LangChain 开发 → 选Ollama。
最后给一个实用建议:本地开发用 Ollama 快速验证,生产部署用 vLLM 或 SGLang 扛流量,边缘设备用 llama.cpp 做离线推理。四者各司其职,组合使用才是最佳实践。