Ollama vs llama.cpp vs vLLM vs SGLang:本地运行和服务化推理到底怎么选?

0 阅读12分钟

这两年本地大模型和自部署推理越来越热,圈里也经常会反复提到四个名字:

  • Ollama
  • llama.cpp
  • vLLM
  • SGLang

刚开始接触时,很多人会把它们放在一起比较,但实际上,这四个东西虽然都和 LLM 推理 有关,定位却并不完全一样。

有的更适合 个人电脑本地跑模型,有的更适合 对外提供 API 服务,有的偏 轻量和兼容性,有的则明显是冲着 高吞吐生产部署 去的。官方资料里也能看出这种差异:llama.cpp 强调“在广泛硬件上以最小配置实现高性能推理”,vLLM 主打高吞吐 OpenAI 兼容服务,SGLang 则突出 RadixAttention、连续批处理和结构化生成,Ollama 更强调本地启动简单以及本地到云端的平滑体验。

如果你最近也在选型,这篇就尽量讲清楚一个核心问题:

本地运行和服务化推理,到底该怎么选?


一、先说结论:这四个不是同一层的竞争关系

先给一个最直白的判断:

  • 想本地快速跑起来,优先看 Ollama
  • 想自己掌控模型文件、量化、底层参数,优先看 llama.cpp
  • 想做高并发 API 服务,优先看 vLLM
  • 想追求更激进的服务性能和复杂生成能力,重点看 SGLang

为什么这么说?

因为它们的产品重心不同:

Ollama:最像“本地大模型的入门层”

Ollama 的强项不是让你研究底层推理细节,而是让你 尽快把模型跑起来。它提供统一的本地使用体验,也有官方仓库和 API,甚至还在官网上直接强调“Start local. Scale with cloud.”。对于很多开发者来说,它是最省心的本地入口。

llama.cpp:最像“本地推理的底层通用引擎”

llama.cpp 的官方定位很明确:以最小配置在广泛硬件上实现本地和云端推理。它更底层、更灵活,也更适合 CPU、本地 GPU、各种量化模型和 GGUF 生态。官方 server 文档还显示,它现在已经支持 OpenAI 兼容接口、embeddings、monitoring、continuous batching 和 schema-constrained JSON 输出。

vLLM:最像“面向服务化部署的主流推理后端”

vLLM 的强项非常聚焦:高吞吐服务化推理。它官方文档里直接提供 OpenAI-Compatible Server,支持 Chat API、Completions API 等,并且其核心优化之一就是 PagedAttention,用来更高效地管理 KV cache。

SGLang:最像“高性能服务框架 + 结构化生成运行时”

SGLang 官方把自己定义为高性能 serving framework / runtime engine,核心特性包括 RadixAttention、连续批处理、prefill-decode disaggregation、speculative decoding、structured outputs、多 LoRA batching 等。它不只是“再做一个服务端”,而是在推理执行模式上做了很多更偏系统层的优化。


二、如果你的目标是“本地运行”,怎么选?

很多人第一需求其实不是上线服务,而是:

  • 自己电脑上先跑起来
  • 离线可用
  • 快速验证模型效果
  • 接个本地 API 给别的工具用

这时候,优先要考虑的不是“极限吞吐”,而是:

  • 安装难不难
  • 模型管理方不方便
  • 对硬件要求高不高
  • 折腾成本大不大

1)Ollama:本地体验最友好

如果你是第一次玩本地 LLM,Ollama 一般是最省事的选择。

它的优势非常明显:

  • 安装简单
  • 拉模型方便
  • 提供本地服务接口
  • 社区接入非常多

官方仓库还直接写到可以连接到很多现有 agent 或应用。这个定位就说明它本质上是在做一个 本地模型运行层 + 统一接入层

适合谁?

  • 想快速本地体验模型的人
  • 想在 Windows / macOS / Linux 上尽快跑通的人
  • 想给本地工具、IDE、脚本接一个模型接口的人

一句话评价:

本地跑模型,先跑起来,再说优化,Ollama 往往是第一站。


2)llama.cpp:本地掌控力最强

如果你不是只想“跑起来”,而是还想进一步控制:

  • 用什么量化格式
  • 怎么配上下文长度
  • 是否 CPU 跑
  • 是否混合 GPU/CPU
  • 是否自己转 GGUF
  • 是否自己决定服务参数

那 llama.cpp 会更合适。

它本身就是 GGUF 生态里非常核心的一环,官方量化文档也明确介绍了把高精度模型量化成更小格式的流程,而 server 端已经支持 OpenAI 兼容接口、多用户并行、continuous batching 等能力。

适合谁?

  • 想研究本地推理细节的人
  • 想在低资源机器上尽可能榨性能的人
  • 想深度使用 GGUF 模型的人
  • 想对模型部署过程更可控的人

一句话评价:

Ollama 更像“拿来就用”,llama.cpp 更像“你自己掌方向盘”。


3)vLLM 和 SGLang 本地能不能跑?

当然能。

但如果你的主要目标只是“我自己电脑上本地体验一下模型”,那 vLLM 和 SGLang 通常不是第一推荐。因为它们更大的价值,不是“个人电脑开个 demo”,而是:

  • 多请求并发
  • 在线服务
  • 高吞吐
  • 更复杂的缓存和批处理策略

也就是说:

  • Ollama / llama.cpp 更偏本地体验
  • vLLM / SGLang 更偏服务后端

这不是绝对划分,但对大多数人来说,这样理解最省事。vLLM 和 SGLang 官方文档都明显把重点放在 serving 和 runtime 优化上,而不是“最友好的本地入门体验”。


三、如果你的目标是“服务化推理”,怎么选?

到了服务化阶段,关注点就完全变了。

你不会再只问“能不能跑”,而是会问:

  • 并发高了会怎样?
  • GPU 利用率高不高?
  • KV cache 管得好不好?
  • 能不能 OpenAI 兼容?
  • 能不能接现有业务系统?
  • 后续扩展和监控方便吗?

这时候,vLLM 和 SGLang 就明显更进入主场了。


1)vLLM:生产服务的通用主力选手

vLLM 之所以现在很常见,就是因为它非常适合作为 标准化 API 推理服务

它的几个关键点很典型:

  • OpenAI-Compatible Server
  • PagedAttention
  • 面向高吞吐 serving
  • 与 Hugging Face 生态集成顺畅

官方文档明确说明可以直接用 vllm serve 起 HTTP 服务,并暴露 OpenAI 风格接口;PagedAttention 的设计则是它高效管理 KV cache 的关键机制之一。 适合谁?

  • 想快速搭一个类 OpenAI API 服务的人
  • 业务系统已经按 OpenAI API 接口设计
  • 主要追求吞吐和服务稳定性
  • 团队已经有 GPU 服务化经验

一句话评价:

如果你想给业务系统提供一个“像 OpenAI 一样可调用”的私有模型服务,vLLM 往往是最稳的主流解。


2)SGLang:更激进、更偏性能工程

SGLang 很容易被简单理解成“另一个 vLLM”,但其实它的味道不太一样。

它更强调这些东西:

  • RadixAttention
  • prefix caching
  • continuous batching
  • prefill-decode disaggregation
  • structured outputs
  • speculative decoding
  • 多种并行和量化能力

这些能力说明,SGLang 不只是想做一个 HTTP server,而是在试图优化 复杂推理程序 的整体执行效率。NVIDIA 文档里也把它描述成 “高性能 runtime engine 和 structured generation language”。

适合谁?

  • 对推理延迟和吞吐特别敏感
  • 有复杂 prompt/program 执行需求
  • 有结构化输出、前缀复用、多请求共享缓存等需求
  • 团队愿意多做一些性能工程和部署调优

一句话评价:

vLLM 更像稳妥主流方案,SGLang 更像高阶性能选手。


3)llama.cpp 能不能服务化?

能,而且现在比很多人想象中更能打。

官方 server 文档显示,llama.cpp 已经支持:

  • OpenAI API compatible routes
  • Anthropic Messages API compatible routes
  • embeddings
  • reranking
  • multi-user support
  • continuous batching
  • monitoring endpoints
  • JSON schema 约束输出

这说明它已经不只是“本地单机聊天工具”了。

但问题在于:
它能服务化,不等于它最适合大规模服务化。

如果你是轻量服务、边缘部署、资源受限机器、或者就是希望用 GGUF 直接对外供服务,那 llama.cpp 很有价值。
但如果你目标是“单卡/多卡上尽可能榨高并发吞吐”,vLLM 和 SGLang 通常会更靠前。这个判断主要来自它们官方文档对 serving 和注意力缓存优化的强调。


4)Ollama 能不能服务化?

也能,因为它本身就带本地服务接口。

但它更适合的是:

  • 本地服务
  • 小规模内部调用
  • 开发测试环境
  • 个人或小团队工具链集成

它不是不能做服务端,而是官方叙事重点明显不是“极限生产吞吐”,而是 本地到云端的平滑使用体验

所以如果你是:

  • 自己电脑跑一下
  • 团队内部先搭个 API
  • 业务量不大
  • 更重视上手快

那 Ollama 完全够用。

但如果你已经在认真考虑:

  • QPS
  • batching
  • cache
  • 多租户
  • GPU 利用率

那通常就该往 vLLM / SGLang 这边走了。


四、一个最实用的理解方式:按场景选,不要按热度选

我自己更建议这样分:

场景 A:个人本地学习 / 体验 / 演示

Ollama

原因很简单:

  • 安装省心
  • 模型获取方便
  • 用起来像一个本地模型服务
  • 接其他工具很方便

场景 B:本地设备性能有限,但想把模型榨得更细

llama.cpp

尤其适合这些情况:

  • CPU 为主
  • 想用 GGUF 量化模型
  • 想对内存占用更敏感
  • 想自己精细调优

场景 C:要给应用系统提供模型 API

优先选 vLLM

因为它本身就是冲着这个目标去的,OpenAI 兼容接口、PagedAttention、高吞吐服务,这条路线非常清晰。


场景 D:对性能和复杂生成流程要求更高

重点看 SGLang

尤其是这些诉求:

  • 多请求共享前缀
  • 结构化输出很多
  • 程序化生成复杂
  • 需要更激进的 serving 优化

五、四者怎么理解成一句人话?

给一个非常口语化的版本:

  • Ollama:我就想本地先跑起来,别折腾
  • llama.cpp:我想本地自己控得更细,硬件吃干榨净
  • vLLM:我要把模型变成稳定的 API 服务
  • SGLang:我要把 API 服务再往性能和复杂执行上卷一层

如果这样记,就不容易混。


六、一个简化对比表

维度Ollamallama.cppvLLMSGLang
核心定位本地模型运行与统一接入轻量高性能本地/边缘推理引擎高吞吐服务化推理框架高性能 serving/runtime 框架
更适合本地运行很适合很适合可以,但不是首选可以,但不是首选
更适合服务化轻量服务可用轻量到中等服务可用很适合很适合
上手难度中到偏高
底层掌控力
OpenAI 兼容服务有 API 能力官方 server 支持官方主打官方支持服务化
典型优势省心、接入快GGUF、量化、兼容广吞吐、PagedAttention、标准化服务RadixAttention、前缀复用、结构化生成
典型人群本地体验者、个人开发者本地优化玩家、边缘部署平台研发、推理服务团队高性能服务和复杂生成团队

表里这些能力点,主要来自各自官方文档和官方仓库公开说明。


七、再说个很现实的问题:不要一上来就过度选型

很多人一开始其实只有一个需求:

“我想先在本地跑个模型,验证一下效果。”

这时候没必要一上来就研究 vLLM 和 SGLang 的所有细节。
因为真正决定你是否能顺利推进的,往往不是“理论最强框架”,而是:

  • 你今天能不能先跑通
  • 你有没有足够 GPU
  • 你当前是 demo 阶段还是生产阶段
  • 你到底要本地聊天,还是要对外服务

所以我更建议:

  • 先本地验证:Ollama / llama.cpp
  • 再做服务化:vLLM / SGLang
  • 资源有限且偏边缘:优先看 llama.cpp
  • 追求标准化 API:优先看 vLLM
  • 追求复杂高性能执行:重点看 SGLang

这样路线最顺。


八、顺手推荐一个我自己在用的在线工具站

最近在折腾本地模型、推理服务、部署脚本的时候,除了模型框架本身,经常还会碰到很多碎活:

  • 图片尺寸调整
  • PDF 处理
  • Word 文档轻量处理
  • 表格转换
  • 文本清洗
  • 一些小开发工具

这类事情如果每次都开本地软件,其实挺碎的。
所以我平时也会直接用自己做的一个在线工具站:

XLToolLab

xltoollab.com

它是一个免费在线工具箱,包含:

  • 图片处理
  • PDF 工具
  • Word 工具
  • 表格工具
  • 文本工具
  • 开发者工具
  • 单位换算

特点就是:

  • 打开浏览器就能用
  • 不用安装
  • 适合日常办公、学习和轻量处理场景

有时候写技术文章、整理部署文档、做截图压缩、转 PDF、改表格这类零碎需求,直接在线处理反而更省事。


九、最后总结

如果只看一句话结论:

本地运行

  • 首选省心:Ollama
  • 首选可控:llama.cpp

服务化推理

  • 首选通用主流:vLLM
  • 首选高阶性能:SGLang

所以题目里这个问题:

Ollama vs llama.cpp vs vLLM vs SGLang:本地运行和服务化推理到底怎么选?

我的答案其实很简单:

不要把四个都当成“谁替代谁”,而要看你当前在哪个阶段。
本地体验阶段和生产服务阶段,选型逻辑根本不是一回事。