AI 基础入门 · 第19课
推理引擎全家桶:llama.cpp / Ollama / vLLM / TensorRT-LLM 怎么选
上一课我们有了 GGUF 权重文件(第15课),在 Mac 上也认识了 MLX(第16课)。但权重文件只是一堆数字,本身不会说话——必须有一个"程序"把它读进内存、按 token 一个个算下去,这个程序就是推理引擎(Inference Engine)。市面上名字一堆:llama.cpp、Ollama、vLLM、llamafile、TensorRT-LLM、ONNX Runtime……它们到底什么关系?这一课用一张对比表讲清楚:llama.cpp 是引擎本体,Ollama 是它的友好封装,vLLM 管高并发服务,TensorRT-LLM 是英伟达顶配,ONNX Runtime 主打跨平台。
① 小白第一课怎么学(4 步走,约 70 分钟)
这一课不要求你把每个引擎都装一遍,目标是建立"选型地图":知道什么场景该找谁。
1先搞懂"引擎"是干嘛的(10 分钟)
读②③:权重是菜谱,引擎是后厨。
2六款引擎定位速记(20 分钟)
读④对比表:一句话记住每款的招牌菜。
3按场景选型(20 分钟)
读⑤:本地玩票、公司上线、英伟达显卡、跨平台分别选谁。
4刷题自测(20 分钟)
做⑦⑩,错题回⑥看易错点。
本课小目标学完你要能:① 说清 llama.cpp 和 Ollama 的封装关系;② 区分"本地个人玩"与"线上高并发服务"该用哪类引擎;③ 说出 TensorRT-LLM 为什么快、ONNX Runtime 为什么能跨平台。
② 一图看懂:六大引擎分层关系
读法:从上到下是"用户 → 封装/服务层 → 引擎本体 → 硬件"。Ollama 底下其实就是 llama.cpp(橙色那格),vLLM/TensorRT-LLM 走自己的 GPU 加速路线,ONNX Runtime 是跨平台通用底座。别被一堆名字吓到,它们干的是同一件事:把权重算成 token。
③ 本质直觉:权重是菜谱,引擎是后厨
先回答一个根本问题:为什么需要"引擎"这种东西?你从 Hugging Face 下到一个 Q4_K_M.gguf 文件,它本质上就是一坨几十亿个浮点数。光有这坨数字,电脑不知道下一步该干嘛。你得有一段程序,它负责:把权重读进显存/内存 → 接收你的 prompt → 按 Transformer 一层层算 logits → 采样出下一个 token → 把 KV Cache 缓存起来 → 循环往复直到结束。这段"把权重跑起来"的程序,就是推理引擎。
一个引擎必须干的活
加载权重 → 预处理 prompt(分词,见第11课)→ 前向计算出 logits → 采样(温度/top_p,见第12课)→ 缓存 KV(见第6课)→ 解码出字 → 回到第3步循环
那为什么会冒出这么多款?因为"算得快"和"用得爽"是两个目标,不同引擎押注不同场景:
· llama.cpp 押注"能不能在普通笔记本 CPU 上也跑起来"——纯 C/C++ 写,量化做得极致,没有 GPU 也能聊。它是很多工具的"发动机"。
· Ollama 发现大家嫌 llama.cpp 命令行太难用,于是在它外面套了一层壳:ollama run qwen2.5 一行搞定下载、加载、起服务。Ollama ≈ llama.cpp + 模型仓库 + 友好命令 + 兼容 API。
· vLLM 押注"公司要同时服务一千个用户怎么办"。它用 PagedAttention 把 KV Cache 像操作系统分页一样管起来,吞吐比朴素推理高几倍,是线上部署的主力。
· TensorRT-LLM 是英伟达亲儿子,把模型编译成专门挖英伟达 GPU 硬件的极致 kernel,延迟最低,但只认 N 卡、配置重。
· ONNX Runtime 押注"一份模型到处跑"——Windows、手机、嵌入式都能加载,是端侧部署的万能胶。
一句话记牢llama.cpp 是发动机本身;Ollama 是把发动机装进了一辆好开的车;vLLM 是公交车(拉的人多);TensorRT-LLM 是 F1 赛车(最快但只能在专业赛道跑);ONNX Runtime 是全能底盘(什么路面都能开);llamafile 是把整车打成一个 exe 双击就走。
④ 完整体系:六大引擎对比表
| 引擎 | 定位一句话 | CPU / GPU | 吞吐 | 易用性 | 最适用场景 |
| llama.cpp | 引擎本体,C/C++ 实现,CPU 推理标杆 | CPU 极强,GPU 可 -ngl 卸载 | 单人对话,中等 | 命令行略硬核 | 无 N 卡的笔记本本地跑 GGUF |
| Ollama | llama.cpp 的友好封装 + 模型仓库 | 同 llama.cpp | 单人/小团队 | 极简单行命令 | 个人开发者本地一键体验 |
| vLLM | 高并发在线服务,PagedAttention | 主打 NVIDIA GPU | 极高(连续批) | 起服务简单,调优有门槛 | 公司上线、多用户 API 服务 |
| llamafile | 把模型+引擎打包成单个可执行文件 | 跨平台 CPU/GPU 自动 | 单人 | 双击即跑,零安装 | 发给朋友、离线演示、U 盘携带 |
| TensorRT-LLM | 英伟达官方顶配,编译优化 | 仅 NVIDIA GPU | 单请求延迟最低 | 配置最重、要编译 | 大厂对延迟敏感的生产集群 |
| ONNX Runtime | 跨平台推理底座,端侧万能 | CPU/GPU/NPU/移动端通吃 | 端侧中等 | 需转模型为 ONNX | 手机/IoT/Windows 桌面集成 |
关键概念辨析
| 易混点 | 正确理解 |
| llama.cpp vs Ollama | 不是竞品:Ollama 底层调用 llama.cpp。Ollama 管"下载/起服务/聊天模板",llama.cpp 管"真正算 token"。 |
| 吞吐 vs 延迟 | vLLM 赢在吞吐(单位时间服务多少人);TensorRT-LLM 赢在单请求延迟(你这条多快出第一个字)。 |
| GGUF 是谁的 | GGUF 是 llama.cpp 生态的权重格式(第15课);vLLM/TensorRT 主要用 safetensors;ONNX 用 .onnx。格式和引擎要配对。 |
| MLX 算哪类 | MLX(第16课)是苹果自研引擎,专为 Mac 统一内存优化,可看作"苹果版 llama.cpp",同属引擎层。 |
选型口诀(怎么选)个人本地玩 → Ollama;想抠命令行极致调参 → llama.cpp 本体;公司要多人同时用 → vLLM;只有 N 卡且要死磕延迟 → TensorRT-LLM;要发给别人双击就跑 → llamafile;要塞进手机/Windows App → ONNX Runtime。
⑤ 用法场景与典型例题
场景 A:你只有一台没有独显的 MacBook,想本地跑个 7B 模型
没有 N 卡,vLLM 和 TensorRT-LLM 都用不上。
首选 Ollama(底层 llama.cpp,自动用 CPU/Metal):ollama run qwen2.5:7b 一行搞定。追求极致参数可调则直接用 llama.cpp:./llama-server -m qwen2.5-7b-q4_k_m.gguf -c 4096 --port 8080。
场景 B:公司要做一个客服 API,预计同时 500 人在线问
单机单人对话引擎扛不住并发。
选 vLLM:它的 PagedAttention 把多个请求的 KV Cache 分页复用,连续批处理(continuous batching)让 GPU 不空等,吞吐比 llama.cpp 高一个量级。起一个兼容 OpenAI 的服务即可。
场景 C:你要把模型放进一个 Windows 桌面 App,离线可用
不能要求用户自己装 Ollama、配环境。
用 llamafile 打成单个 exe,用户双击就跑;或用 ONNX Runtime 把模型转成 .onnx 嵌进 App,由 App 内代码调用推理。
场景 D:大厂 GPU 集群,要求首字延迟越低越好
已经有 A100/H100,要榨干硬件。
上 TensorRT-LLM:先把模型编译成针对当前 GPU 的优化引擎,kernel 融合、量化、KV cache 都做到硬件级最优。代价是编译慢、换模型要重编。
典型命令对照llama.cpp 起服务:llama-server -m model.gguf -c 4096 -ngl 99 --port 8080(-ngl 99=尽可能多的层放 GPU)。Ollama:ollama run qwen2.5。vLLM:vllm serve Qwen/Qwen2.5-7B-Instruct。
⑥ 高频错误诊断(4 条)
错误 1:以为 Ollama 和 llama.cpp 是竞争关系它们不是二选一。Ollama 就是把 llama.cpp 包了一层,你 ollama run 时底层加载的还是 llama.cpp 在算。问"Ollama 比 llama.cpp 快吗"没意义。
错误 2:本地为了追求"高并发"去装 vLLMvLLM 是为多用户服务器设计的,单机单人聊天用它反而启动重、占资源。个人玩票 Ollama/llama.cpp 更轻。
错误 3:拿 GGUF 文件去喂 vLLM / TensorRT-LLM格式不匹配。GGUF 是 llama.cpp 专属;vLLM/TensorRT 主要吃 HuggingFace 的 safetensors。跨引擎要先转换。
错误 4:在没有 NVIDIA 显卡的机器上硬跑 TensorRT-LLMTensorRT-LLM 只认英伟达 GPU,AMD 卡和苹果芯片都不行。苹果机请用 MLX 或 llama.cpp。
⑦ 考点真题演练(4 题)
考点分布
| 考法 | 出题形式 | 应对 |
| 封装关系 | 问 Ollama 底层是谁 | llama.cpp |
| 高并发选型 | 问多人在线用什么 | vLLM |
| 格式配对 | 问 GGUF 谁吃 | llama.cpp/Ollama |
| 硬件限定 | 问只认 N 卡的是谁 | TensorRT-LLM |
真题基础1. 关于 Ollama 和 llama.cpp 的关系,正确的是?
真题中档2. 公司要部署一个同时服务数百用户的在线大模型 API,首选引擎是?
真题中档3. 一个 Q4_K_M.gguf 权重文件,最天然匹配哪个引擎?
真题拔高4. TensorRT-LLM 相比 vLLM 的最大特点和限制是?
⑧ 必背知识点卡
引擎是什么:把权重读进内存、逐个 token 算下去的程序 权重是菜谱,引擎是后厨
llama.cpp:引擎本体,C/C++,CPU 也能跑,吃 GGUF 发动机
Ollama:llama.cpp 的友好封装,一行命令 ollama run 装好发动机的车
vLLM:PagedAttention + 连续批,高并发线上服务 公交车,吞吐高
TensorRT-LLM:英伟达官方顶配,单请求延迟最低,仅 N 卡 F1 赛车
ONNX Runtime:跨平台端侧万能胶,手机/Windows 都能跑 全能底盘
llamafile:引擎+模型打成单个可执行文件,双击零安装 整车打包
格式配对:GGUF→llama.cpp;safetensors→vLLM/TRT;.onnx→ONNX Runtime 别喂错
⑨ 应用输出:给自己的机器做一次选型
实战场景:对着自己的硬件,说出该装哪个引擎
① 先看有没有 N 卡:有 → 本地玩可 Ollama,上线服务用 vLLM,死磕延迟用 TensorRT-LLM。
② 是苹果 Mac:用 Ollama(底层 llama.cpp)或 MLX,别碰 TensorRT-LLM。
③ 只有 CPU 笔记本:Ollama + Q4_K_M 量化模型,关掉不必要的后台,照样能聊。
④ 要交付给别人:llamafile 打单文件,或 ONNX Runtime 嵌进 App。
口述全链路"权重文件不会自己说话,得有引擎把它跑起来。llama.cpp 是最底层的 C++ 引擎,CPU 也能跑 GGUF;Ollama 把它包成一行命令;vLLM 用分页 KV 缓存扛高并发;TensorRT-LLM 是英伟达 N 卡上最快的;ONNX Runtime 跨平台端侧部署;llamafile 把一切打成一个 exe。选谁看硬件和场景。"
⑩ 分层练习 16 题(基础 6 + 中档 5 + 拔高 5)
▍基础 6 题
基础1什么是推理引擎?
把训练好的权重加载进内存/显存,逐 token 做前向计算并采样出回答的程序。没有它,权重文件只是一堆数字。
基础2Ollama 底层主要调用哪个引擎?
llama.cpp。Ollama 负责下载、加载、聊天模板和 API,真正算 token 的是 llama.cpp。
基础3GGUF 权重最天然匹配哪个生态?
llama.cpp / Ollama 生态。vLLM、TensorRT-LLM 主要用 safetensors。
基础4只想在笔记本上一行命令本地跑模型,选哪个?
Ollama,ollama run 模型名 即可。
基础5哪个引擎主打"单个可执行文件、双击零安装"?
llamafile,把模型和引擎打包进一个文件。
基础6ONNX Runtime 的招牌优势是什么?
跨平台:CPU、GPU、手机、嵌入式都能加载同一份 ONNX 模型。
▍中档 5 题
中档7vLLM 靠什么提升并发吞吐?
PagedAttention:把 KV Cache 像操作系统内存分页一样紧凑管理,配合连续批处理,让 GPU 在多请求间不空等,吞吐大幅提升。
中档8vLLM 和 TensorRT-LLM 谁更看重吞吐、谁更看重单请求延迟?
vLLM 赢在吞吐(单位时间服务更多请求);TensorRT-LLM 赢在单请求延迟(首字快、kernel 极致优化)。
中档9llama.cpp 的
-ngl 99 参数是什么意思?
把尽可能多的 Transformer 层(这里 99 层)卸载到 GPU 上计算,其余留在 CPU。-ngl 0 则完全用 CPU。
中档10为什么不能拿 .gguf 直接喂 vLLM?
权重格式和引擎是配套的。GGUF 是 llama.cpp 的容器格式,vLLM 期望的是 HuggingFace 的 safetensors 权重目录,两者内部布局不同,需转换。
中档11苹果 Mac 上为什么不要选 TensorRT-LLM?
TensorRT-LLM 只支持 NVIDIA GPU,Mac 是苹果自研芯片+统一内存,应选 Ollama(llama.cpp) 或 MLX。
▍拔高 5 题
拔高12为什么个人开发者不该为了"高性能"在单机上装 vLLM?
vLLM 的优势在多请求批处理,单请求时它的常驻显存和启动开销反而更大,收益不明显;个人用 Ollama/llama.cpp 更轻、更省内存。
拔高13"Ollama 比 llama.cpp 快吗"这个问题为什么不成立?
因为 Ollama 底层就是调用 llama.cpp 做实际计算,它只是在外层加了下载管理和 API。真正决定速度的是同一个 llama.cpp 内核和量化级别,两者不存在速度对比关系。
拔高14TensorRT-LLM 说"要编译模型",编译这一步在优化什么?
它把通用计算图针对具体型号的英伟达 GPU 编译融合成专用 kernel:算子融合、精度量化、KV cache 布局、显存复用都做到硬件级最优,所以单请求延迟最低;代价是换 GPU 或换模型通常要重编。
拔高15想把一个 7B 模型嵌进 Windows 桌面 App 离线运行,llamafile 和 ONNX Runtime 两条路线怎么权衡?
llamafile 是"交付单个 exe",适合独立工具、演示,但和你自己的 App 代码集成弱;ONNX Runtime 是 SDK,能被 App 代码直接调用、按 token 流式输出,适合深度集成但要先把模型转成 ONNX 并处理前后处理。
拔高16推理引擎在整条"权重→回答"流水线里处于哪一环?它和第12课采样、第6课 KV Cache 什么关系?
引擎是执行者:它加载权重后,每一步前向算出 logits,再调用采样(温度/top_p,第12课)选出下一个 token,并维护 KV Cache(第6课)避免重复计算。采样策略和 KV 缓存都是引擎内部实现的机制。
⑪ 记忆口诀 + 7 天复习计划
三句口诀
① llama.cpp 是发动机,Ollama 是套壳好开车。
② vLLM 拉客多(吞吐),TensorRT 跑最快(延迟),只认 N 卡别硬塞。
③ GGUF 配 llama.cpp,ONNX 走天下,llamafile 双击就出发。
| 天 | 任务 | 自检 |
| 第 1 天 | 读②③④,记住六款引擎一句话定位 | 能不看表说全 |
| 第 2 天 | 背知识点卡 + 基础 1-6 | 基础全对 |
| 第 3 天 | 读⑤四个场景,做中档 7-11 | 会按场景选型 |
| 第 4 天 | 做拔高 12-16 | 讲清吞吐 vs 延迟 |
| 第 5 天 | 做⑦真题 4 题 | 限时每题 2 分钟 |
| 第 6-7 天 | 合上书口述三句口诀和选型表 | 不看资料全说对 |