LLM 推理框架负责加载模型、执行计算并生成 Token。
Model Serving 在此基础上,还需要处理 API 请求、调度、批处理、并发、缓存及性能监控。
1. 推理工具分类
| 分类 | 主要工具 | 典型用途 |
|---|---|---|
| 通用模型框架 | Hugging Face Transformers | 模型加载、研究、开发 |
| 轻量推理 Runtime | llama.cpp | 本地和低资源推理 |
| 本地模型产品 | Ollama、LM Studio | 模型管理、本地 API、测试 |
| 生产 Serving Engine | vLLM、SGLang | 高并发 GPU 推理 |
| 硬件优化推理栈 | TensorRT-LLM | NVIDIA GPU 深度优化 |
| 维护中的 Serving Engine | TGI | 现有系统维护 |
这些工具存在能力重叠,并非严格互斥。
例如 llama.cpp 也提供 HTTP Server 和 Continuous Batching;vLLM、SGLang 也能用于单用户本地测试。
2. Inference Runtime 与 Serving Engine
Inference Runtime
主要负责:
Model Weights
↓
Load Model
↓
Execute GPU / CPU Kernels
↓
Prefill / Decode
↓
Generated Tokens
Serving Engine
在模型执行能力之上增加:
HTTP / OpenAI-compatible API
↓
Request Queue
↓
Scheduler
↓
Continuous Batching
↓
Prefill / Decode
↓
KV Cache Manager
↓
GPU Kernels
↓
CUDA / ROCm
↓
GPU
现代 Serving Engine 通常还需要支持:
- Prefix Caching。
- Quantization。
- Streaming。
- Structured Outputs。
- LoRA Adapters。
- Multi-GPU。
- Metrics / Observability。
3. Hugging Face Transformers
Transformers 是通用模型库和执行框架,不是专门针对高并发 Serving 设计的。
主要提供:
- Model Architecture 实现。
- Pretrained Weights 加载。
- Tokenizer。
- Generation。
- Training / Fine-tuning 支持。
基础示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "your-model-id"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="auto",
)
inputs = tokenizer("Hello", return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=100,
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
适合:
- 理解模型架构。
- 调试模型。
- 研究生成行为。
- 微调与实验。
- 建立性能和质量基线。
但如果需要大量并发请求,通常会考虑专门的 Serving Engine。
4. llama.cpp
llama.cpp 是主要由 C/C++ 实现的高效推理项目。
它尤其适合本地、消费级硬件及量化模型。
支持:
- CPU Inference。
- CUDA、Metal 等多种硬件后端。
- GGUF。
- Quantization。
- GPU Offloading。
- HTTP Server。
- Continuous Batching。
- Speculative Decoding。
- Embedding / Reranking。
- Structured Outputs。
官方 llama-server 已提供 OpenAI-compatible API、多请求推理及 Continuous Batching。
基本命令
llama-cli -m model.gguf
启动 HTTP Server:
llama-server \
-m model.gguf \
--host 127.0.0.1 \
--port 8080
适合:
Apple Silicon
CPU-only
Consumer GPU
Limited VRAM
Local Quantized Models
Edge Devices
5. Ollama
Ollama 将本地模型下载、管理、运行和 API 服务封装为易于使用的工具。
ollama run qwen3
主要能力:
- 下载和管理模型。
- 运行本地模型。
- 管理模型参数与模板。
- 通过 Modelfile 创建自定义模型配置。
- 提供 HTTP API。
- 支持常见量化模型。
本地 API 默认地址通常为:
http://localhost:11434
Ollama 同时提供其原生 API 和 OpenAI-compatible 接口。
对于学习本地模型部署,Ollama 通常比直接操作底层推理引擎更简单。
但如果需要研究底层 KV Cache 管理、Kernel 和复杂 GPU 调度策略,应进一步学习 vLLM、SGLang 或 llama.cpp 本身。
6. LM Studio
LM Studio 是面向本地模型使用与开发的工具。
主要能力:
- GUI 模型搜索与下载。
- 加载和运行本地模型。
- 模型参数调整。
- 本地聊天。
- HTTP API Server。
- CLI 工具。
支持 llama.cpp Runtime,并在 Apple Silicon 上支持 MLX 模型。
与 Ollama 的主要区别是:
| 对比 | Ollama | LM Studio |
|---|---|---|
| 主要体验 | CLI / API 优先 | GUI 优先 |
| 模型管理 | 支持 | 支持 |
| HTTP API | 支持 | 支持 |
| 本地模型测试 | 支持 | 支持 |
| 典型用户 | 开发者、自动化程序 | 本地模型体验与调试 |
二者定位接近,通常掌握一个即可。
7. vLLM
vLLM 是面向高吞吐、低延迟 LLM Serving 的开源推理引擎。
主要优化:
- PagedAttention / Paged KV Cache。
- Continuous Batching。
- Chunked Prefill。
- Automatic Prefix Caching。
- Speculative Decoding。
- Quantization。
- Multi-GPU / Distributed Inference。
- LoRA Serving。
- OpenAI-compatible API。
vLLM 的关键能力是通过高效调度和 KV Cache 管理,提升 GPU 利用率及整体 Serving Throughput。
启动模型服务
vllm serve your-model-id \
--host 127.0.0.1 \
--port 8000
需要正确配置模型、GPU 环境和依赖。
常见参数:
| 参数 | 用途 |
|---|---|
--model / 模型位置参数 | 指定模型 |
--dtype | 计算精度 |
--quantization | 指定量化方式 |
--max-model-len | 最大上下文长度 |
--tensor-parallel-size | Tensor Parallel GPU 数量 |
--gpu-memory-utilization | GPU 内存使用预算相关配置 |
--max-num-seqs | 并发序列调度上限 |
--max-num-batched-tokens | 调度步骤的 Token 预算 |
实际参数可用值随 vLLM 版本、模型和硬件而变化。
典型用途
- 高并发 LLM API。
- RAG 服务。
- Agent 后端。
- 多用户聊天系统。
- GPU 推理性能测试。
8. SGLang
SGLang 也是高性能 LLM Serving Framework。
它与 vLLM 有较大功能重叠,包括:
- Continuous Batching。
- Paged Attention。
- Quantization。
- Tensor / Pipeline / Expert Parallelism。
- Speculative Decoding。
- Structured Outputs。
- Multi-LoRA。
- Prefill-Decode Disaggregation。
SGLang 的重要特色包括 RadixAttention、Prefix Caching 与高性能 Runtime。
RadixAttention / Radix Cache
通过 Radix Tree 等结构组织共享的 Prompt Prefix,复用对应的 KV Cache。
例如:
Request A:
System Prompt + User Question A
Request B:
System Prompt + User Question B
Shared Prefix
↓
Cached KV Blocks
↓
┌─────────┴─────────┐
Request A Request B
对于具有大量共享 System Prompt、Few-shot Examples 或重复前缀的请求,可能获得明显收益。
但 vLLM 同样支持 Prefix Caching,因此这不是 SGLang 独有的能力。
vLLM 与 SGLang
| 对比 | vLLM | SGLang |
|---|---|---|
| 定位 | 通用高性能 Serving | 通用高性能 Serving |
| Continuous Batching | 支持 | 支持 |
| Prefix Caching | 支持 | 支持,RadixAttention 是重要特色 |
| Structured Outputs | 支持 | 支持 |
| Multi-GPU | 支持 | 支持 |
| Agent Workloads | 支持 | 支持 |
| 性能优劣 | 依赖场景 | 依赖场景 |
不能笼统认为某一个引擎永远更快。
应针对相同模型、硬件、输入输出长度和并发条件进行 Benchmark。
9. TensorRT-LLM
TensorRT-LLM 是 NVIDIA 面向 LLM 推理优化的技术栈。
重点是充分利用 NVIDIA GPU 的硬件能力。
相关技术:
- Tensor Cores。
- CUDA Optimized Kernels。
- FP8 / FP4 Quantization。
- Kernel Fusion。
- In-flight Batching。
- Paged KV Cache。
- Chunked Prefill。
- Speculative Decoding。
- Multi-GPU / Multi-node Parallelism。
NVIDIA 官方文档列出了上述主要优化功能,但低精度格式支持还取决于 GPU 架构,例如 FP4 的高性能支持与 Blackwell 等硬件相关。
适合:
- NVIDIA GPU 生产环境。
- 高性能推理优化。
- 对特定 GPU 架构进行深度调优。
它更强调 NVIDIA 硬件和软件生态,不是跨所有硬件平台的通用解决方案。
10. TGI:Text Generation Inference
TGI 是 Hugging Face 开发的 LLM Serving Engine。
曾经是重要的开源模型生产部署方案,支持:
- Continuous Batching。
- Streaming。
- Quantization。
- Paged Attention。
- Prometheus Metrics。
- OpenAI-compatible API。
但 TGI 已进入 Maintenance Mode。
Hugging Face 目前推荐新部署优先考虑 vLLM、SGLang 等替代方案。
因此了解 TGI 的历史定位和基本机制即可,不建议把它作为当前学习生产 Serving 的第一选择。
11. OpenAI-compatible API
现代推理引擎通常会提供兼容 OpenAI API 风格的 HTTP 接口。
例如:
Application
↓
OpenAI-compatible HTTP API
↓
Inference Server
↓
Model Runtime
↓
GPU
常见 Endpoint:
POST /v1/chat/completions
POST /v1/completions
GET /v1/models
Python 示例
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="local-key",
)
response = client.chat.completions.create(
model="your-model-id",
messages=[
{"role": "user", "content": "Hello"}
],
)
print(response.choices[0].message.content)
通过修改 base_url,应用可以连接不同的兼容推理引擎。
但 OpenAI-compatible 不代表所有功能完全一致,工具调用、结构化输出、Reasoning、Streaming 等仍可能存在兼容性差异。
另外,对外公开推理服务必须正确设置认证、限流和访问控制;本地示例中的 API Key 不等于生产认证已经配置完成。
12. Prefill-Decode Disaggregation
Prefill 与 Decode 的资源需求不同:
Prefill
↓
Compute-intensive
Decode
↓
Memory-bandwidth-intensive
Prefill-Decode Disaggregation 将两个阶段放在不同的 Worker 或 GPU 资源上执行。
Incoming Request
↓
Prefill Worker
↓
Transfer KV Cache
↓
Decode Worker
↓
Output Tokens
主要目的:
- 独立优化 Prefill 和 Decode。
- 减少长 Prompt 对 Decode 的干扰。
- 改善尾部 ITL / TPOT。
- 为不同阶段分配不同的计算资源。
代价:
- 增加系统复杂度。
- 需要高效传输 KV Cache。
- 引入额外通信和调度开销。
vLLM 和 SGLang 都已经提供相关能力,具体成熟度和部署方法取决于版本。
它主要用于规模较大的生产部署,单 GPU 学习阶段不需要重点研究。
13. 如何选择推理引擎
| 使用场景 | 推荐优先了解 |
|---|---|
| 学习 Transformer 与模型加载 | Transformers |
| MacBook 本地量化模型 | Ollama / llama.cpp |
| GUI 下载、测试模型 | LM Studio |
| 单 GPU 生产 Serving | vLLM / SGLang |
| 高并发、多 GPU 推理 | vLLM / SGLang |
| NVIDIA 深度性能优化 | TensorRT-LLM |
| 维护已有 HF TGI 服务 | TGI |
选型重点
真正选择推理引擎时,主要检查:
- Model Compatibility:是否支持该模型架构、Tokenizer 和 Chat Template。
- Hardware Compatibility:CUDA、ROCm、Metal 及 GPU 型号。
- Quantization Support:是否支持当前模型量化格式及优化 Kernel。
- Performance:TTFT、TPOT、Throughput 和显存占用。
- Serving Features:Streaming、Tool Calling、Structured Outputs、LoRA、Metrics 等。
功能支持不能仅根据引擎名称判断,应检查具体版本、模型及部署后端。
总结
Model Framework
└── Transformers
Local Inference
├── llama.cpp
├── Ollama
└── LM Studio
Production GPU Serving
├── vLLM
├── SGLang
└── TensorRT-LLM
Legacy / Maintenance
└── TGI
最重要的区别:
- Transformers:模型加载与通用执行框架。
- llama.cpp:轻量、跨硬件的高效推理 Runtime。
- Ollama / LM Studio:简化本地模型运行和管理。
- vLLM / SGLang:强调高吞吐、高并发 Serving。
- TensorRT-LLM:针对 NVIDIA GPU 深度优化。
- TGI:进入维护模式的 Hugging Face Serving Engine。
对于推理部署学习,掌握 llama.cpp/Ollama 与 vLLM 两条路线,就能覆盖本地量化推理和 GPU 生产 Serving 的大部分核心知识。