自托管服务选型 本节摘要:引擎选型是硬件、规模、生态的函数——不是排行榜朗读。2026 自托管推理由四个引擎主导:llama.cpp、Ollama、vLLM、SGLang,TGI 处于维护模式殿后。llama.cpp 在 CPU 上最快——模型支持最广,对量化与线程有完全控制。Ollama 是开发本机的一键安装,比 llama.cpp 慢 1530%(Go + CGo + HTTP 序列化),类生产负载下吞吐差 3 倍。TGI 在 2025 年 12 月 11 日进入维护模式——只修 bug,原始吞吐比 vLLM 慢约 10%,但历史上有顶级可观测性与 HF 生态集成。这个维护状态让它成为长期下注的风险——新项目用 SGLang 或 vLLM 更安全。vLLM 是通用生产默认——v0.15.
本节摘要:引擎选型是硬件、规模、生态的函数——不是排行榜朗读。2026 自托管推理由四个引擎主导:llama.cpp、Ollama、vLLM、SGLang,TGI 处于维护模式殿后。llama.cpp 在 CPU 上最快——模型支持最广,对量化与线程有完全控制。Ollama 是开发本机的一键安装,比 llama.cpp 慢 15~30%(Go + CGo + HTTP 序列化),类生产负载下吞吐差 3 倍。TGI 在 2025 年 12 月 11 日进入维护模式——只修 bug,原始吞吐比 vLLM 慢约 10%,但历史上有顶级可观测性与 HF 生态集成。这个维护状态让它成为长期下注的风险——新项目用 SGLang 或 vLLM 更安全。vLLM 是通用生产默认——v0.15.1(2026 年 2 月)加了 PyTorch 2.10、RTX Blackwell SM120、H200 优化。SGLang 是智能体多轮/前缀密集专长——生产中 40 万+ GPU(xAI、LinkedIn、Cursor、Oracle、GCP、Azure、AWS)。硬件约束:CPU 优先→llama.cpp;AMD/非 NVIDIA→vLLM 是支持最强的路径(TRT-LLM 锁 NVIDIA)。2026 流水线模式:开发=Ollama,staging=llama.cpp,生产=vLLM 或 SGLang。各引擎权重格式不同——llama.cpp 家族用 GGUF,GPU 引擎用 HF safetensors——所以阶段间可能夹一次格式转换。
对应原课程:Phase 17 · Lesson 28 ·
28-self-hosted-serving-selection(原英文phases/17-infrastructure-and-production/28-self-hosted-serving-selection/docs/en.md)。本节同时作为第 18 章「基础设施与生产化」的收尾。
阅读完本节,你应当能够:
你的团队启动一个新的自托管 LLM 项目。一个工程师说 Ollama,另一个说 vLLM,第三个说「TGI 开箱即用不行吗?」三人各自在不同语境下都对,没有一个人在所有语境下对。
2026 年选择树很要紧:硬件第一,规模第二,工作负载第三。还有一个 2025 年的具体事件——TGI 在 12 月 11 日进入维护模式——改变了新项目的默认。
| 引擎 | 最适合 | 备注 |
|---|---|---|
| llama.cpp | CPU / 边缘 / 最小依赖 / 模型支持最广 | CPU 最快,完全控制 |
| Ollama | 开发本机、单用户、一键安装 | 比 llama.cpp 慢 15~30%;生产吞吐差 3 倍 |
| TGI | HF 生态、受监管行业 | 2025 年 12 月 11 日维护模式 |
| vLLM | 通用生产、100+ 用户 | 广义生产默认;v0.15.1 2026 年 2 月 |
| SGLang | 智能体多轮、前缀密集工作负载 | 生产 40 万+ GPU |
CPU 优先 → llama.cpp。Ollama 也可但更慢。其他引擎在 CPU 上无竞争力。
AMD GPU → vLLM 是支持最强的路径(AMD ROCm)。SGLang 也可。TRT-LLM 锁 NVIDIA,排除。
NVIDIA Hopper(H100/H200) → vLLM 或 SGLang 或 TRT-LLM。三者顶级。
NVIDIA Blackwell(B200/GB200) → TRT-LLM 是吞吐领导者(第 07 节)。vLLM 与 SGLang 紧随。
Apple Silicon(M 系列) → llama.cpp(Metal)。Ollama 包装它。
1 用户 / 本地开发 → Ollama。一条命令,首 token 秒级。
10~100 用户 / 小团队 → vLLM 单 GPU。
100~1 万用户 / 生产 → vLLM production-stack(第 18 节)或 SGLang。
1 万+ 用户 / 企业 → vLLM production-stack + 分离式预填充解码(第 17 节)+ LMCache(第 18 节)。
通用聊天 / 问答 → vLLM 在广义默认上胜出。
智能体多轮(工具、规划、记忆) → SGLang 的 RadixAttention(第 06 节)统治。
带重度前缀复用的 RAG → SGLang。
代码生成 → vLLM 够用;SGLang 在缓存上略优。
长上下文(128K+) → vLLM + 分块预填充;SGLang + 分层 KV。
Hugging Face TGI 在 2025 年 12 月 11 日进入维护模式——往后只修 bug。历史:顶级可观测性、最好的 HF 生态集成(模型卡、安全工具)、原始吞吐略逊 vLLM。
2026 新项目:默认避开 TGI。现有 TGI 部署可继续但应最终迁移。SGLang 与 vLLM 是更安全的默认。
开发(Ollama)→ staging(llama.cpp)→ 生产(vLLM)。各引擎权重格式不同——llama.cpp 家族用 GGUF,GPU 引擎用 HF safetensors——所以阶段间可能夹一次格式转换。工程师在本机快速迭代;staging 镜像生产量化;生产是服务目标。
Ollama 适合开发。它不适合共享生产:Go HTTP 序列化加开销,并发管理比 vLLM 简单,OpenTelemetry 支持滞后。在它擅长处用它——单用户、一条命令——共享场景切到 vLLM。
第 01 节(托管超大规模)、第 02 节(推理平台)覆盖托管。本节假设你已决定自托管。自托管的理由:数据驻留、定制微调、规模下的总拥有成本、托管上没有的领域模型。
原课程 code/main.py 是一个决策树遍历器:给定硬件 + 规模 + 工作负载,选引擎并解释。下面给最小可读的遍历骨架。
def pick_engine(hardware, scale, workload): """依硬件→规模→工作负载选自托管引擎。 hardware: 'cpu' | 'amd' | 'hopper' | 'blackwell' | 'apple' scale: 'dev' | 'small' | 'prod' | 'enterprise' workload: 'chat' | 'agent' | 'rag' | 'code' | 'longctx' 返回: (引擎, 理由) """ # 硬件优先 if hardware == "cpu" or hardware == "apple": return "llama.cpp", f"{hardware} 上 CPU 最快,模型支持最广(Ollama 也可但慢 15~30%)" if hardware == "amd": return "vLLM", "AMD ROCm 支持最强;TRT-LLM 锁 NVIDIA 已排除" if hardware == "blackwell": return "TRT-LLM", "Blackwell 吞吐领导者(第07节);vLLM/SGLang 紧随" # Hopper:看工作负载 if workload in ("agent", "rag"): return "SGLang", "RadixAttention 在多轮/前缀密集上统治(第06节)" if scale == "enterprise": return "vLLM production-stack + 分离式 + LMCache", "企业级叠加(第17、18节)" return "vLLM", "通用生产默认(v0.15.1, 2026-02)" # 案例:12 块 H100 + 智能体多轮工作负载 print(pick_engine("hopper", "prod", "agent")) # SGLang print(pick_engine("amd", "prod", "chat")) # vLLM print(pick_engine("cpu", "dev", "chat")) # llama.cpp
💡 决策顺序很重要:先硬件(它排除最多选项——CPU 排除所有 GPU 引擎,AMD 排除 TRT-LLM),再规模(决定单卡还是生产栈),最后工作负载(在剩下的引擎里按专长挑)。反过来问会陷入「我喜欢 X 引擎」的偏见。
| 引擎 | CPU | AMD | Hopper | Blackwell | 生产规模 | 智能体/前缀 | 权重格式 |
|---|---|---|---|---|---|---|---|
| llama.cpp | 最快 | 弱 | 弱 | 弱 | 边缘/单机 | 一般 | GGUF |
| Ollama | 慢 15~30% | 弱 | 弱 | 弱 | 仅开发 | 一般 | GGUF |
| TGI | 不推荐 | 中 | 中 | 弱 | 维护模式 | 一般 | safetensors |
| vLLM | 不推荐 | 强(ROCm) | 顶级 | 紧随 | 默认 | 一般 | safetensors |
| SGLang | 不推荐 | 中 | 顶级 | 紧随 | 40 万+ GPU | 统治(RadixAttention) | safetensors |
| TRT-LLM | 不支持 | 不支持 | 顶级 | 领先 | 大规模 | 一般 | 自有 |
心法:CPU 选 llama.cpp;AMD 选 vLLM;Hopper 通用选 vLLM、智能体选 SGLang;Blackwell 选 TRT-LLM。TGI 因维护模式不推荐新项目。Ollama 只在开发用。
本节产出 outputs/skill-engine-picker.md(原课程目录)。给定约束,它选引擎并写迁移计划:
跑通遍历器:用你的硬件/规模/工作负载跑 code/main.py。输出是否符合直觉?
混合硬件:你的基础设施是 12 块 H100 + 8 块 MI300X AMD。选什么引擎?为何 TRT-LLM 出局?
迁移论证:一个团队 2026 年想用 TGI 因为「我们熟」。论证迁移案例。
Ollama → vLLM:Ollama 开发到 vLLM 生产:量化、配置、可观测性各变什么?
RAG 选型:一个 RAG 产品,P99 前缀长度 8K、跨租户高复用。选引擎并用第 11、18 节叠加。
至此,第 18 章「基础设施与生产化」28 节全部完成。整章可以压缩成一句话:训出一个模型只完成 10%,剩下 90% 是让它又快又稳又便宜地跑起来。28 节按四个递进层次展开:
贯穿全章的三条主线:
下一章(第 19 章「伦理、安全与对齐」)将从「如何把模型上线」转向「上线后如何确保它行为正当」——对齐、红队、价值观、长效监督,与本章的安全/合规/护栏形成自然衔接。