本地部署框架对比¶
这篇回答一个工程问题:
我训练或下载了一个开源模型,应该用什么框架把它部署成服务?
先看整体定位。
| 框架 | 适合场景 | 核心关键词 |
|---|---|---|
| llama.cpp | 本地运行、CPU、Apple Silicon、轻量部署 | GGUF、量化、低门槛 |
| llama-cpp-python | Python 调用 llama.cpp | Python binding、OpenAI-compatible server |
| vLLM | GPU 高吞吐服务 | PagedAttention、continuous batching、OpenAI-compatible |
| SGLang | Agent、RAG、结构化生成和复杂推理链 | RadixAttention、prefix cache、structured generation |
先理解部署要做什么¶
部署不是训练。
部署要解决:
加载模型
↓
接收 HTTP 请求
↓
渲染 chat template
↓
tokenizer 编码
↓
prefill / decode
↓
stream 或 JSON 返回
所以部署框架的价值是:
- 管理模型加载。
- 管理显存。
- 管理 KV Cache。
- 管理 batch。
- 提供 HTTP API。
- 提供 streaming。
- 提供监控和日志。
llama.cpp¶
llama.cpp 更适合本地和轻量场景。
典型特点:
- C/C++ 实现。
- 常用 GGUF 模型文件。
- 支持多种量化格式。
- 可以在 CPU、Apple Silicon、GPU 后端上运行。
- 可以启动本地 server。
适合:
我想在笔记本或单机上跑一个模型。
不太适合:
我要做高并发、多租户、大规模 GPU 服务。
vLLM¶
vLLM 更适合 GPU 服务化部署。
典型特点:
- OpenAI-compatible API server。
- PagedAttention。
- continuous batching。
- 高吞吐。
- 支持很多 Hugging Face 模型。
- 支持 LoRA 服务能力。
典型使用方式:
vllm serve Qwen/Qwen2.5-7B-Instruct
应用侧可以按 OpenAI-compatible 方式请求:
POST http://localhost:8000/v1/chat/completions
适合:
我要把开源模型部署成稳定 HTTP 服务,供业务系统调用。
SGLang¶
SGLang 更偏复杂推理程序和高性能服务。
典型特点:
- OpenAI-compatible API。
- RadixAttention。
- 自动复用共享前缀和 KV Cache。
- continuous batching。
- 结构化生成。
- 适合 agent、RAG、多轮和分支生成。
适合:
我的请求不是单次问答,而是有多轮、工具、检索、结构化输出和重复前缀。
如果你做 Agent 产品,SGLang 这类框架的思路值得重点看。
OpenAI-compatible API¶
很多部署框架会提供:
POST /v1/chat/completions
POST /v1/completions
这意味着应用侧可以复用类似 OpenAI 的 HTTP 请求格式。
例子:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "local-model",
"messages": [
{"role": "user", "content": "解释一下 KV Cache"}
],
"temperature": 0.3
}'
注意:
OpenAI-compatible 不等于完全支持 OpenAI 的所有参数和行为。
不同框架、不同模型、不同版本支持的字段可能不一样。
部署参数¶
常见部署参数分三类。
模型加载¶
| 参数 | 直觉 |
|---|---|
model |
模型路径或模型 ID |
dtype |
计算精度,如 fp16、bf16 |
quantization |
量化方式 |
max_model_len |
最大上下文长度 |
tensor_parallel_size |
多 GPU 切分模型 |
服务性能¶
| 参数 | 直觉 |
|---|---|
max_num_seqs |
同时处理多少序列 |
max_num_batched_tokens |
一个 batch 里最多多少 token |
gpu_memory_utilization |
允许使用多少 GPU 显存 |
enable_prefix_caching |
是否启用前缀缓存 |
生成行为¶
| 参数 | 直觉 |
|---|---|
temperature |
随机性 |
top_p |
候选 token 范围 |
max_tokens |
输出长度 |
stop |
停止条件 |
怎么选¶
第一轮可以这样选:
本地试模型:llama.cpp
Python 本地集成:llama-cpp-python
GPU 服务化:vLLM
复杂 Agent/RAG 推理链:SGLang
真实项目里也可以组合:
开发机:llama.cpp
测试环境:vLLM 单卡
生产环境:vLLM 或 SGLang 多卡
压测时看什么¶
不要只看“能不能跑”。
至少看:
- TTFT:首 token 延迟。
- TPOT:每个输出 token 平均耗时。
- Throughput:单位时间输出 token 数。
- Concurrency:并发请求数。
- GPU memory:显存占用。
- Error rate:错误率。
- OOM:是否容易显存溢出。
下一步¶
继续看: