推理平台横评:Ollama vs vLLM vs llama.cpp vs TGI 跑 Hermes 谁更快

实测对比 Ollama、vLLM、llama.cpp 和 TGI 四大推理框架在运行 Hermes 模型时的吞吐量、延迟、易用性和功能差异。

目录

  1. 四个框架的定位
  2. 测试环境和方法
  3. 消费级硬件测试结果
  4. 服务器级硬件测试结果
  5. 易用性对比
  6. 功能特性对比
  7. 不同场景的最佳选择
  8. 一个容易忽略的因素
  9. 延伸阅读:OpenClaw 社区资源

模型选好了,下一个问题就是:用什么框架来跑?

同一个 Hermes 模型,在不同的推理框架上跑出来的速度、资源占用、并发能力可能差好几倍。选错框架等于白白浪费硬件投入。

今天拿四个最主流的本地推理框架——Ollama、vLLM、llama.cpp、TGI(Text Generation Inference)——分别跑 Hermes 模型,用实际数据说话。

四个框架的定位

先搞清楚它们各自的设计目标,这很重要。

Ollama:面向个人用户的”一键式”本地推理方案。安装简单、操作直观,目标用户是那些想在自己电脑上玩大模型的普通人和入门开发者。它在底层实际调用的是 llama.cpp,但包装了一层友好的接口。

vLLM:面向线上服务的高性能推理引擎。它最大的创新是 PagedAttention 技术,大幅提升了 GPU 显存利用率和并发吞吐量。目标用户是需要部署模型 API 服务的团队。

llama.cpp:Georgi Gerganov 开发的纯 C/C++ 推理框架。最初是为了让 LLaMA 模型能在 CPU 上跑而设计的,后来扩展到支持 GPU 加速。特点是极度轻量、跨平台(Windows/Linux/macOS/Android都能跑)、支持各种量化格式。

TGI(Text Generation Inference):HuggingFace 开发的推理框架,面向生产部署。基于 Rust 和 Python 混合实现,内置了 Continuous Batching、Tensor Parallelism 等生产级特性。和 HuggingFace 生态深度集成。

测试环境和方法

测试分两套环境:

环境A(消费级):RTX 4090 24GB,用 Hermes 3 8B Q4_K_M 量化版
环境B(服务器级):4x A100 80GB,用 Hermes 3 70B FP16

每个框架在两套环境下分别测试以下指标:

  • 首 Token 延迟(Time to First Token, TTFT)
  • 生成速度(Tokens per Second, TPS)
  • 最大并发数
  • 显存占用
  • 吞吐量(在最大并发下的总 TPS)

消费级硬件测试结果

RTX 4090 + Hermes 3 8B Q4_K_M:

指标 Ollama vLLM llama.cpp TGI
首Token延迟 180ms 220ms 150ms 240ms
单路生成速度 40 t/s 52 t/s 45 t/s 48 t/s
显存占用 6.2GB 7.8GB 5.8GB 7.5GB
最大并发 1-2路 4-5路 1-2路 3-4路
最大吞吐量 ~40 t/s ~180 t/s ~45 t/s ~140 t/s

几个关键发现:

单路速度:vLLM 最快,得益于其高效的 CUDA kernel 实现。llama.cpp 紧随其后,考虑到它还支持 CPU 卸载和各种量化方案,这个成绩相当不错。Ollama 因为多了一层包装,速度比 llama.cpp 稍慢。

显存效率:llama.cpp 最省显存,它对量化模型的显存管理做得非常精细。vLLM 和 TGI 因为要预分配 KV Cache 用于并发支持,显存占用偏高。

并发能力:消费级显卡上跑并发是 vLLM 的主场。它的 PagedAttention 技术在这种显存受限的环境下优势巨大——同样的24GB显存,vLLM 能开4-5路并发而 Ollama 只能跑1-2路。

首Token延迟:llama.cpp 最快,因为它的启动开销最小。TGI 最慢,它在处理第一个请求时需要做一些初始化工作。

服务器级硬件测试结果

4x A100 80GB + Hermes 3 70B FP16:

指标 Ollama vLLM llama.cpp TGI
首Token延迟 850ms 320ms 680ms 350ms
单路生成速度 18 t/s 35 t/s 22 t/s 32 t/s
显存占用 148GB 165GB 142GB 160GB
最大并发 2-3路 25-30路 3-4路 20-25路
最大吞吐量 ~36 t/s ~650 t/s ~70 t/s ~520 t/s

服务器环境下的差距就非常夸张了。

vLLM 吞吐量碾压:650 t/s vs Ollama 的 36 t/s,差了18倍。这就是 PagedAttention + Continuous Batching + Tensor Parallelism 的威力。如果你要部署线上服务,vLLM 和 TGI 是唯一的选择。

Tensor Parallelism 支持:多卡推理时,vLLM 和 TGI 支持自动的张量并行——把模型切分到多张卡上同时计算。Ollama 和原生 llama.cpp 在多卡支持上弱得多,基本就是把数据分到不同卡上分别算,效率差距明显。

llama.cpp 的尴尬:在消费级硬件上 llama.cpp 表现不错,但到了多卡服务器环境,它的分布式推理能力就暴露了短板。不过 llama.cpp 的优势在于它的跨平台能力和极致的量化支持,这在其他框架上很难找到替代。

易用性对比

性能之外,实际使用中的”爽感”也很重要。

Ollama:最简单

1
2
ollama pull hermes3:8b
ollama run hermes3:8b

两行命令,模型就跑起来了。不需要管什么 CUDA 版本、Python 环境、依赖冲突。Ollama 把所有复杂的东西都藏在了后面。

对于想在本地快速体验 Hermes 模型 的用户来说,Ollama 是门槛最低的方案。

缺点:配置灵活性差。想调整一些底层参数(比如 KV Cache 大小、Batch Size)?抱歉,Ollama 不太支持。

llama.cpp:灵活但需要编译

llama.cpp 需要从源码编译(虽然也有预编译版本)。对于大部分开发者来说不算难,但对新手确实有门槛。

好处是什么都能调。量化格式、线程数、GPU层数、上下文长度——每个参数都暴露给你。如果你想榨干硬件的每一分性能,llama.cpp 给你最大的操作空间。

1
./main -m hermes-3-8b-q4_k_m.gguf -n 512 -ngl 35 --ctx-size 4096

vLLM:生产级但有门槛

vLLM 的安装不算难(pip install vllm),但配置一个高性能的服务需要理解不少概念:Tensor Parallelism 的设置、KV Cache 的分配策略、Continuous Batching 的参数等。

1
2
3
4
python -m vllm.entrypoints.openai.api_server \
--model NousResearch/Hermes-3-Llama-3.1-70B \
--tensor-parallel-size 4 \
--max-model-len 8192

启动一个 OpenAI 兼容的 API 服务只需要一条命令,但要调到最优性能需要花时间。

TGI:Docker 一把梭

TGI 推荐用 Docker 部署,这对于有容器化经验的团队来说反而是优点——环境隔离、部署标准化。

1
2
3
4
docker run --gpus all -p 8080:80 \
ghcr.io/huggingface/text-generation-inference \
--model-id NousResearch/Hermes-3-Llama-3.1-70B \
--num-shard 4

和 HuggingFace 生态的深度集成是 TGI 的加分项。如果你已经在用 HuggingFace 的模型库和工具链,TGI 的对接成本最低。

功能特性对比

功能 Ollama vLLM llama.cpp TGI
OpenAI API 兼容 有限
流式输出
GGUF 量化
AWQ/GPTQ 量化
Speculative Decoding 有限
Continuous Batching
Tensor Parallelism 有限
CPU 推理
macOS Metal 支持
Windows 原生
Function Calling 有限 有限

几个值得注意的点:

量化路线分化:llama.cpp 阵营用 GGUF 格式,vLLM/TGI 阵营用 AWQ/GPTQ。两套量化格式不兼容。如果你的模型是 GGUF 格式的,只能用 Ollama 或 llama.cpp 跑。

Speculative Decoding:这是一个能把推理速度提升20-40%的技术。vLLM 和 TGI 支持得比较好,llama.cpp 的实现还在早期阶段,Ollama 不支持。

跨平台能力:想在 Mac 上跑模型?只有 Ollama 和 llama.cpp 支持 macOS 的 Metal 加速。想在没有 GPU 的机器上跑?也只有这两个支持纯 CPU 推理。

Function Calling 支持:对于 Hermes 的工具调用场景,vLLM 和 TGI 的支持最完善。它们能正确处理 Hermes 的 ChatML 格式下的 Function Calling 流程。Ollama 和 llama.cpp 对 Function Calling 的支持比较基础,复杂的多步骤工具链可能有问题。

不同场景的最佳选择

个人学习和实验 → Ollama

想在自己电脑上快速体验 Hermes?Ollama 两分钟搞定。不需要任何技术背景,装好就能用。对于想入门大模型但不想和环境配置较劲的人,这是最友好的选择。cocoloop 社区里有不少用 Ollama 跑 Hermes 的经验帖。

极客玩家和硬件优化 → llama.cpp

手里有各种奇奇怪怪的硬件(老显卡、Mac、ARM 设备),想把性能榨到极致?llama.cpp 给你最大的自由度。它也是量化模型的最佳平台——支持的量化格式最多,量化效果也最好。

线上 API 服务 → vLLM

要部署一个能承接真实流量的模型服务?vLLM 的高并发能力是其他框架没法比的。PagedAttention 技术在高并发场景下的优势太大了。对于 B 端客户或者有一定用户量的应用,vLLM 是性价比最高的方案。

HuggingFace 生态用户 → TGI

如果你的技术栈已经深度绑定 HuggingFace(模型用 Hub 上的、训练用 Transformers、部署用 Inference Endpoints),TGI 是最自然的推理引擎选择。它和 HuggingFace 生态的无缝集成省了大量的对接工作。

混合方案也可以:开发阶段用 Ollama 快速测试,生产部署用 vLLM。两个框架支持的模型格式不同(GGUF vs 原生格式),但核心模型能力是一样的。

一个容易忽略的因素

最后提一个很多人不太关注但实际影响很大的因素:框架的更新速度。

vLLM 的更新频率非常高,几乎每周都有新版本。新模型发布后,vLLM 通常在一周内就能支持。llama.cpp 的更新也很快,而且 Georgi Gerganov 一个人的开发效率惊人。

TGI 的更新频率中等,作为 HuggingFace 的产品,它的稳定性优先于新功能。Ollama 更新最慢,有时候新模型发布后要等好几周才能用。

如果你想第一时间用上最新的 Hermes 版本,vLLM 和 llama.cpp 会是更好的选择。

延伸阅读:OpenClaw 社区资源

本文由 CocoLoop 中文社区出品。如果你在研究 AI Agent 与主流模型的工程化落地,姊妹站 OpenClaw 中文社区 也许会有帮助:

参与讨论

对这篇文章有疑问或想法?cocoloop 社区有不少开发者在讨论 Hermes 相关话题,欢迎加入交流。

前往 cocoloop 社区 →