Skip to content

约 11 分钟阅读

09. 整体对比与选型:同一个资料助手,该交给哪个框架 ​

前八篇分别拆开了七个推理框架和它们上面的编排层。每一篇都在讲“它擅长什么、怎么配置、有哪些坑”,这一篇把它们放到同一张桌子上:先按运行位置和职责分清谁和谁才有可比性,再逐项对比硬件、模型、量化、并行、默认值和安全边界,然后给出一条选型路径,最后讲在框架之间迁移时最容易出错的地方。读完你应该能为资料助手的不同阶段(个人试用、部门上线、全公司规模化)各列出一两个候选框架,并知道该怎样用自己的数据验证它们。

先分清谁和谁可以比 ​

把 vLLM、Ollama、Dynamo 放进同一张跑分表,就像把发动机、家用轿车和车队调度系统放在一起比百公里加速。它们解决的是不同层次的问题:

推理框架分三类:编排与 KV 缓存层管理多个引擎实例;数据中心引擎面向 GPU 服务器上的多人并发;本地与端侧框架面向个人设备

数据中心引擎(vLLM、SGLang、TensorRT-LLM、LMDeploy)在 GPU 服务器上同时服务很多人,核心指标是一张卡在延迟约束下能撑住多少并发(Goodput,见衡量快慢)。它们都实现了连续批处理、分页 KV、前缀缓存、量化、投机解码和多卡并行,差别在实现深度、默认值和覆盖范围。

本地与端侧框架(llama.cpp、Ollama、MLX-LM、ExecuTorch、MLC-LLM)面向一台笔记本、一部手机,核心指标是单个用户的首字延迟和每秒生成多少 token,以及在有限内存里塞进多大的模型。它们的并发能力有限,量化格式和硬件覆盖却比数据中心引擎宽得多。

编排与 KV 缓存层(Dynamo、llm-d、production-stack、AIBrix、Mooncake、LMCache)不自己算模型,而是在多个引擎实例之上做路由、P/D 编排、KV 传输和扩缩容。它们和引擎是组合关系:Dynamo 下面跑的可以是 vLLM、SGLang 或 TensorRT-LLM。

所以下面的对比在每一类内部进行,跨类只比较“适合什么场景”。

数据中心引擎逐项对比 ​

维度vLLM 0.32.0SGLang 0.5.22TensorRT-LLM 1.2.1LMDeploy 0.18.0
出身与维护伯克利 PagedAttention 论文,社区治理,约两周一版LMSYS,RadixAttention 论文,两三周一版NVIDIA 官方;1.2.1 之后只有预发布上海人工智能实验室 InternLM 团队
硬件NVIDIA(主包 CUDA 13.0)、AMD、Intel XPU、CPU;TPU、昇腾等走平台插件NVIDIA(0.5.20 起只支持 CUDA 13)、AMD、昇腾、Intel;TPU 另有 sglang-jax只支持 NVIDIA GPU + LinuxNVIDIA 为主;昇腾、沐曦、寒武纪只能用 PyTorch 引擎
模型覆盖最广,另有 Transformers 后端兜底广,新模型常同步给出配方,也可回落 Transformers 实现约二十多个文本架构加多模态,热门大模型跟进快TurboMind 只认 19 个架构名,其余回落到 PyTorch 引擎
前缀缓存默认开,按完整块做哈希链默认开,基数树,按 token 粒度块复用默认开默认关,要加 --enable-prefix-caching
量化FP8、NVFP4、AWQ、GPTQ 等;GGUF、bitsandbytes 需插件FP8、NVFP4、MXFP4、AWQ/GPTQ、GGUF依赖 ModelOpt 离线产出;NVFP4 只在 BlackwellAWQ W4A16、SmoothQuant W8A8、在线 KV INT8/INT4
并行TP/PP/DP/EP、上下文并行TP/PP/EP,针对 MLA 的 DP AttentionTP/PP/EP、注意力 DP、Wide-EPTP/DP/EP,TurboMind 另有上下文并行
P/D 分离KV 连接器(NIXL、Mooncake、LMCache),官方标为实验性内置,默认 Mooncake 传输自带 trtllm-serve disaggregated,生产推荐配合 DynamoPyTorch 引擎支持
适合优先评估大多数场景的默认起点前缀复用多(多轮、Agent、共享长文档),大 MoE 多机部署模型和 NVIDIA 硬件都固定,追求 FP8/NVFP4 下的极致性能TurboMind 支持的模型做 4 bit 部署,国产卡

表格里还有几处看不出的差别。

KV 预算的口径不一样。 四个引擎都有一个“给 KV 留多少显存”的比例参数,名字相近,含义完全不同。vLLM 的 gpu_memory_utilization(默认 0.92)是总显存中引擎能用的比例,权重、激活、KV 都从这里面分;TensorRT-LLM 的 free_gpu_memory_fraction(默认 0.9)是加载权重、试跑测出峰值以后剩余显存的比例;LMDeploy 的 cache_max_entry_count(默认 0.8)是加载完权重后空闲显存的比例;SGLang 的 mem_fraction_static 默认不设,按显存大小、分块预填充长度和 CUDA Graph 档位自动算出一个总显存比例(H100 上 Qwen3-8B 手算约 0.83)。所以“vLLM 0.92 比 TensorRT-LLM 0.9 更激进”这种比较没有意义;同一台机器上能放下多少 KV,要看各自启动日志里打印的 token 容量。

默认调度和分块预填充不同。 vLLM 和 SGLang 默认开启分块预填充,长输入会被切成多段和别人的 Decode 交替执行;TensorRT-LLM 1.2.1 默认关闭,超过 max_num_tokens(默认 8192)的输入会被直接拒绝。资料助手如果要读整本员工手册,换到 TensorRT-LLM 时要显式打开 enable_chunked_prefill。

发布节奏和稳定性。 vLLM 和 SGLang 每两三周一个正式版,参数改名、默认值变化很常见(例如 SGLang 的 --enable-dp-attention 已标为废弃,改用 --attn-dp-size);TensorRT-LLM 的正式版停在 1.2.1,后续只有预发布,1.3 系列删除了旧的 TensorRT 引擎后端;LMDeploy 的文档表格明显落后于代码。无论选哪个,都要锁定版本、保留启动参数,升级前用同一套质量集和压测脚本回归(性能测试与分析)。

本地与端侧框架逐项对比 ​

维度llama.cpp 0.7.0Ollama 0.40.12MLX-LM 0.32.2
定位无依赖的 C/C++ 引擎和 GGUF 格式的事实标准模型仓库 + 自动调度 + 常驻 API,底层调用 llama.cpp 或 MLXApple 芯片上的推理、量化和 LoRA 微调
硬件最广:x86/ARM CPU、Metal、CUDA、HIP、Vulkan、SYCL、CANN 等,可 CPU/GPU 混合加载跟随底层引擎以 Apple Silicon 为主;MLX 也有 CUDA、CPU 后端,但在 NVIDIA 上不如数据中心引擎成熟
量化最丰富:1.5—8 bit 的 k-quants 与 IQ 系列、imatrix 校准、KV 量化到 q4_0拉取现成的量化标签;导入 safetensors 时可量化(走 MLX),GGUF 要先用 llama.cpp 量化好再导入分组 affine 量化(默认 4 位)、MXFP4/NVFP4/MXFP8,以及 DWQ、AWQ、GPTQ 等用校准数据的量化
并发llama-server 有槽位和连续批处理,适合少量并发;-c 在槽位间分配默认每个模型 1 个并行请求,多个请求排队mlx_lm.server 可批处理,官方不建议用于生产
上手需要自己选量化文件和参数一条 ollama run一条 mlx_lm.generate

本地框架之间更像“同一套能力的不同包装”:Ollama 用起来最省事,代价是默认值按“一个人一台机器”设定(上下文长度按显存档位自动选,在 16—24 GB 的机器上是 4096,超出部分会悄悄丢掉最早的消息);llama.cpp 把所有旋钮都交给你;MLX-LM 在 Mac 上直接利用统一内存,还能顺手做 LoRA 微调。三者都不适合当作多人在线服务的生产引擎,部门级上线应回到数据中心引擎。

默认安全边界 ​

推理服务的默认监听地址和鉴权方式差别很大,而且多数框架默认不鉴权。这张表值得在部署前对照一次:

框架默认地址默认鉴权
vLLM所有网卡的 8000 端口无;--api-key 只保护 /v1 等前缀,/metrics、/health 仍开放
SGLang127.0.0.1:30000无,可设 API 密钥
TensorRT-LLMlocalhost:8000无内置鉴权
LMDeploy所有网卡的 23333 端口无;设置 --api-keys 后,/health 和 /nodes 开头的节点管理路径仍不鉴权
llama.cpp127.0.0.1:9931(Docker 镜像内是 0.0.0.0:8080)无,可加 --api-key;CORS 默认放开
Ollama127.0.0.1:11434无服务端鉴权
MLX-LM127.0.0.1:8080无

两条原则对所有框架都成立:引擎端口不要直接暴露到办公网或公网,放在网关后面由网关负责鉴权、限流和 TLS;在容器里把监听地址改成 0.0.0.0 时,要同时确认网络策略只允许网关访问(生产部署与运维)。

为什么不能直接看别人的跑分 ​

网上常见“X 比 Y 快 2 倍”的结论,搬到自己的场景里往往不成立。原因在于性能高度依赖四个条件:模型(稠密还是 MoE、是否有 MLA)、硬件(H100 和 B200 上最优的框架可能不同)、请求分布(输入输出长度、并发、前缀共享比例)和配置(量化格式、KV 比例、CUDA Graph、投机解码)。前缀共享多的多轮对话,SGLang 的基数树可能明显占优;每个请求都是全新长文档的批量摘要,前缀缓存几乎不起作用,差距就来自算子和调度。

更可靠的做法是自己比,按选型三道关的顺序:先用同一份质量集确认候选框架上回答质量达标(对话模板、停止条件、采样默认值都对);再确认目标模型、量化格式、GPU 型号和需要的功能组合在这个版本上真的被支持;最后用业务的真实请求分布压测,比较满足延迟目标时的 Goodput,而不是峰值吞吐。

一条选型路径 ​

选型路径:先看运行位置,再看硬件,默认从 vLLM 建基线,按前缀复用和硬件条件试 SGLang 或 TensorRT-LLM,最后按规模决定是否需要编排层

把资料助手的几个阶段放进这张图:

个人试用。 小林想在自己的 MacBook 上试试 Qwen3-8B 能不能回答制度问题。Ollama 一条命令就能跑起来;想比较不同量化档位的质量,换成 llama.cpp 直接加载不同的 GGUF 文件;想顺手用几十条样本做个 LoRA 试验,MLX-LM 最方便。这个阶段不需要考虑并发。

部门上线。 人事部门几十个人同时使用,部署到一台 H100 服务器。从 vLLM 建基线:模型、接口、工具调用解析器都最齐全,出了问题资料也最多。如果每个请求都带着同一段系统提示和制度文档,再用同样的请求分布试一次 SGLang,对比首字延迟和 Goodput。公司采购的是昇腾服务器时,先查 vLLM 昇腾插件和 LMDeploy PyTorch 引擎对目标模型和型号的支持矩阵。

全公司规模化。 几千人使用、十几张卡以上、加上语音提问。这时副本之间的路由开始影响前缀缓存命中率,长文档的 Prefill 开始拖慢别人的 Decode,才值得引入 Dynamo 或 llm-d 这样的编排层做 KV 感知路由和 P/D 分离。模型和硬件都确定、要把单卡性能压到极限时,再评估 TensorRT-LLM。

不适合的情况。 只有两三个副本时上编排层,多出来的组件和网络跳数只会增加故障点;只有一个人用时上 vLLM,启动时间和显存占用都比 Ollama 大得多;用 Ollama 承接全公司的在线请求,默认的单并发和上下文截断会让问题在高峰期集中暴露。

在框架之间迁移时最容易出错的地方 ​

换框架时,同一个模型给出不同的回答,原因通常不在推理引擎的“质量”,而在这几处默认值不一致:

  • 对话模板。 有的框架用模型自带的 Jinja 模板,有的内置模板表,Ollama 的 Modelfile 可以覆盖模板。迁移后先用同一个请求渲染出实际送进模型的文本逐字比对。
  • 采样默认值。 vLLM 在线服务会合并模型目录里 generation_config.json 的采样参数,其他框架未必如此;不传 max_tokens 时各家的默认输出上限也不同。生产请求应显式写出温度、top_p 和最大输出长度。
  • 停止条件和特殊 token。 结束符没被识别时,模型会答完不停;推理模型的思考内容是否单独解析,取决于有没有配置对应的推理解析器。
  • 上下文长度。 各框架的默认上下文和超长处理方式不同:直接报错、截断最早的消息,或者在槽位之间平分。
  • KV 和量化。 KV 量化、不同实现的同名量化格式(例如 AWQ 内核)会带来数值差异,换框架后要重跑质量集。

版本快照 ​

以下是 2026 年 10 月下旬(27—28 日)查询的 GitHub 正式发布版本。框架迭代很快,使用时以实际安装的版本为准。

项目最新正式版发布日期说明
vLLM0.32.02026-10-18预编译包为 CUDA 13.0,另有 -cu129 变体
SGLang0.5.222026-10-190.5.20 起只支持 CUDA 13
TensorRT-LLM1.2.12026-04-20之后只有预发布,1.3 起移除 TensorRT 引擎后端
llama.cpp0.7.02026-10-152026 年 8 月起使用语义化版本,0.7.0 起服务默认端口 9931
Ollama0.40.122026-10-27
LMDeploy0.18.02026-09-28
MLX-LM0.32.22026-10-16
NVIDIA Dynamo1.6.12026-10-27锁定的引擎版本落后于各引擎最新版
llm-d1.0.02026-10-20
AIBrix0.8.02026-10-13
LMCache0.5.62026-10-14发布列表里混有候选版和每日构建
Mooncake0.3.13.post12026-08-31

数据中心引擎里,vLLM 是覆盖最广的默认起点,SGLang 在前缀复用和大规模 MoE 上投入最深,TensorRT-LLM 用硬件锁定换 NVIDIA 新硬件上的极致性能,LMDeploy 在 4 bit 部署和国产卡上有自己的位置;本地框架里,Ollama 最省事,llama.cpp 最灵活,MLX-LM 是 Mac 上的首选;编排层只有在副本多、前缀共享多或需要 P/D 时才有回报。KV 比例、分块预填充、监听地址、对话模板这些默认值在框架之间差别很大,比较和迁移时都要逐项核对。想回顾这些框架背后的共同机制,回到大模型推理优化系列;想了解模型本身怎样训练出来,见模型训练与调优。

别急,先让缓存热一下。