localaiforum
登录
指南 › 运行与服务

推理引擎对比

引擎是把权重变成词元的程序:加载文件、跑 transformer 前向传播、通常还在上面说 HTTP。好消息是几乎每个引擎在同一硬件上以大致相同的速度跑同一个模型——引擎选择关乎工作流、格式支持和并发,而非原始 tok/s。坏消息也一样:在它们之间逛基准测试基本是浪费力气。

全场

引擎 它是什么 格式 硬件触达 为谁而生
llama.cpp 带内置服务器的 C/C++ 推理核心 GGUF CPU、CUDA、ROCm、Metal、Vulkan——最广触达 地基;几乎到处跑
Ollama llama.cpp 加模型库、CLI 和 REST 的包装 GGUF llama.cpp 能跑的都行 零摩擦桌面使用
LM Studio 精致 GUI 加 OpenAI 兼容服务器 GGUF(Mac 上还有 MLX) Windows/macOS/Linux GUI 要按钮不要标志的人
vLLM Python 服务引擎:页注意力、连续批处理 safetensors CUDA(加一些 ROCm/TPU 支持) 数据中心级并发服务
SGLang 带 RadixAttention 前缀缓存的服务引擎 safetensors CUDA 快速结构化输出;共享前缀的智能体
exllamav2 为解码速度调优的仅 GPU 加载器 EXL2、GPTQ 仅 CUDA 单张消费级 NVIDIA GPU 上的最大单用户 tok/s
MLX Apple 的数组框架;mlx-lm 在其上跑模型 MLX Apple silicon 近期 Mac 上的快速实用路线
transformers (HF) 一切移植所自的参考实现 safetensors CPU、CUDA 正确性核对、实验、训练管道

一条血统注:Ollama 和 LM Studio 都在引擎盖下跑 llama.cpp。把它们与 llama.cpp 相比是在比包装、不是比推理。

也值得知道:llama.cpp 发布的不止服务器——量化和转换工具、基准测试 harness、和一打语言的绑定。

深挖

vLLM 诞生自页注意力洞见(见 并发):像 OS 对待内存那样对待 GPU 内存,就能装下远多得多的请求。它是“我有一台 GPU 服务器和真实流量”的默认答案。

SGLang 跨请求缓存前缀(RadixAttention):如果 40 个智能体共享同一个两页系统提示词、提示词只处理一次、不是 40 次。它也以快速约束解码著称——见 结构化输出。

exllamav2 是恰好一个生态位的锋利边缘:单张 NVIDIA GPU 上的单用户、要每比特量化最多的 tok/s。服务器故事和硬件广度都薄;生态位是真的。

MLX 是 Apple 的 ML 框架、为统一内存而造。截至本文写作 mlx-lm 常在更大模型上胜过 llama.cpp 的 Metal 路径——接近到在 Mac 上值得两个都试(更多在 Apple Silicon)。

transformers 是缓慢、忠实的参考:当量化引擎行为怪异时、把同一模型穿过它跑一遍回答“是引擎还是模型”。它也是微调工具底下的管道(见 微调)。

按需选择

你是…… 从……开始
在自己桌前聊天 Ollama 或 LM Studio
从 shell 写脚本(管道、cron、小工具) Ollama 的 REST API、或 llama-server
搭建轻流量应用后端 llama-server——一个进程、零运维
服务许多并发用户 vLLM 或 SGLang
跑共享长系统提示词的智能体机群 SGLang 或 vLLM;见 智能体
全 Mac 家庭 先 Ollama/LM Studio;要更快就 MLX

表格两条注:

  • “从……开始”不是“止步于此”——每个桌面引擎读同一个 GGUF,试第二个花五分钟、不是一次迁移。
  • 真要比较时,保持一切恒定:同模型、同量化、同提示词、模型已热。

格式分界镜像桌面/服务器分界

GGUF 对 safetensors(见 模型格式)不只是容器偏好——它决定你的引擎。GGUF 是单文件、预量化、到处跑的格式,整个桌面生态(llama.cpp、Ollama、LM Studio)建立在它上面。safetensors 是 Hugging Face 生态的分片张量格式;高吞吐服务器引擎(vLLM、SGLang、transformers)消费它、通常即时量化(AWQ/GPTQ 变体)而非预打包。

所以真实的决策树很短:桌面和单用户 → GGUF 引擎;服务器和并发 → safetensors 引擎。其余是细节。

当什么东西“跑不起来”时,先查格式——“引擎 X 跑不了模型 Y”的一半是 GGUF/safetensors 错配、不是能力差距。

开销不是故事

在相同硬件、相同量化下,引擎们的单流解码落在彼此大约 10–20% 之内——常常因为它们共享后端。真正以倍数(不是百分比)移动你体验速度的是:

  • 模型是否已加载——冷加载花数秒到一分钟。
  • 是否每轮重发整个对话——上下文成本,见 词元。
  • 请求是否互相排队——见 并发。
  • 层是否在 GPU 上——见 引擎旋钮。
Same GPU, same 8B Q4_K_M, single stream (illustrative, not specs):
llama.cpp / Ollama / LM Studio    ~130–145 tok/s   (same engine underneath)
exllamav2 EXL2 ~4bpw              ~160–180 tok/s   (loader tuned for decode)

Same GPU, 8 concurrent chat streams:
llama-server serial queue         each stream waits; total throughput flat
vLLM                              all streams near single-stream speed

选匹配你工作流的引擎,然后把精力花在 I/O 模式而不是引擎基准上。

一个文件、多个引擎

你为 Ollama 下载的 GGUF 也能直接在 llama.cpp 和 LM Studio 里跑——引擎不转换、不重新下载;你把它们指向同一个文件(Ollama 能用一行 Modelfile 导入本地路径)。服务端 safetensors 在 vLLM 和 SGLang 之间同样成立。实际后果:没有文件级厂商锁定、选错引擎只花你几分钟。

这就是本页不断把工作流推到基准之前的原因:需求变化时、你已经下载的模型跟着你走。

何时从 Ollama 毕业

Ollama 的默认值极佳、直到不再极佳。以下时候转向服务引擎:

  • 你需要超过寥寥几条流的持续并发(见 并发)。
  • 你想要跨共享系统提示词的许多智能体的前缀缓存(SGLang)。
  • 你必须直接服务 HF 生态的 AWQ/GPTQ safetensors 量化。
  • 你在发布产品功能前做负载测试。
  • 你需要多 GPU 张量并行把一个大模型装进多卡。

那些有一条成真之前,便利比吞吐更值钱。

相关: 模型格式 · 引擎旋钮 · 服务一个端点 · 选择模型