为什么要本地部署
不是所有任务都适合调 API:
- 数据敏感:金融、医疗、法务领域不允许数据出本地网络
- 成本可控:高频调用时本地推理成本远低于 API(哪怕算上电费和折旧)
- 延迟稳定:不受外网波动影响
- 可定制:可以微调、量化、修改采样策略
下面按使用场景介绍几种主流方案。
方案一:Ollama —— 个人开发首选
最适合"我想在 Mac 上跑个 Llama 玩玩"的场景。
安装与使用:
brew install ollama
ollama run llama3.1:8b
完事。一行命令拉模型,一行命令开始对话。还提供 OpenAI 兼容 API:
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama3.1:8b", "messages": [...]}'
优点:
- 安装零摩擦,模型管理像 Docker
- 自动选择最优后端(Metal / CUDA / CPU)
- 支持 Modelfile 自定义系统提示词
- 模型库丰富(Llama、Qwen、Mistral、DeepSeek 等都有)
缺点:
- 性能不是最优,吞吐一般
- 不适合多用户并发场景
- 对自定义模型格式支持有限
方案二:llama.cpp —— CPU/边缘设备之王
底层是 Ollama 用的引擎,但直接用 llama.cpp 能拿到更多控制权。
核心优势是 GGUF 量化格式:
| 量化等级 | 模型大小(13B) | 质量损失 | 推荐场景 |
|---|---|---|---|
| Q2_K | 5.4 GB | 明显 | 极限场景 |
| Q4_K_M | 7.9 GB | 很小 | 推荐默认 |
| Q5_K_M | 9.2 GB | 几乎无 | 高质量需求 |
| Q8_0 | 13.8 GB | 无 | 接近 FP16 |
实测在 M2 MacBook 上,Q4 量化的 Llama 3 8B 能跑到 30+ tokens/s,Q4 量化的 70B 也能跑到 5-8 tokens/s,离线使用完全够用。
适合场景:
- 笔记本/手机上跑模型
- 嵌入式设备(树莓派、Jetson)
- 需要精细控制采样、模板、批处理
方案三:vLLM —— 生产环境的事实标准
要做线上服务,基本就是它。
核心特性:
- PagedAttention 实现的高吞吐
- Continuous Batching 自动填满 GPU
- OpenAI 兼容 API
- 支持 LoRA 热加载、Prefix Caching
- 支持几乎所有主流模型架构
部署示例:
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.9 \
--max-model-len 8192
参数解读:
tensor-parallel-size 2:模型切成 2 份分到 2 张卡gpu-memory-utilization 0.9:用 90% 显存(剩下给 CUDA Graph 等)max-model-len:限制最大序列长度,留显存给更多并发
性能参考:单张 A100 跑 Llama 3 8B FP16,吞吐能到 4000+ tokens/s(高并发批处理)。
方案四:TensorRT-LLM —— 极致性能但复杂
NVIDIA 官方的优化方案,理论上是同等硬件下最快的。
优势:
- 编译期优化(图融合、kernel 选择、量化)
- 原生支持 FP8(H100/H200)
- 投机采样、In-flight Batching 都内置
代价:
- 需要把模型转换成 TensorRT engine(每次模型/硬件变化都要重新编译)
- 配置复杂,学习曲线陡峭
- Triton Server 集成才能服务化,又一层复杂度
什么时候用:业务规模到了"省 20% 成本就能省几百万一年"的级别再考虑。中小项目用 vLLM 性价比更高。
方案五:SGLang —— 新晋黑马
UC Berkeley 出品,目标是和 vLLM 竞争。亮点:
- RadixAttention:自动识别共享前缀(系统提示词、Few-shot 示例),命中率高时性能极强
- 结构化输出原生支持:写 prompt 时直接用 SGLang 语法定义结构
- Constrained Decoding:JSON、正则、CFG 都支持
实测在多用户共享系统提示词的场景下(典型如客服),SGLang 比 vLLM 快 30-50%。
怎么选
| 场景 | 推荐 |
|---|---|
| Mac 本地玩 | Ollama |
| Linux 单卡个人 | Ollama 或 vLLM |
| 边缘设备 / 离线 | llama.cpp |
| 生产环境多卡多用户 | vLLM 或 SGLang |
| 极致性能 / NVIDIA 重度用户 | TensorRT-LLM |
一些通用避坑
- 显存预估:FP16 模型大约是参数量 × 2 GB(7B → 14GB),4-bit 量化约参数量 × 0.6 GB
- 预留 KV Cache:模型权重只是开始,KV Cache 会再吃 20-50% 显存
- CUDA 版本和 PyTorch 要对齐:80% 的部署问题都是版本不匹配
- 测试时模拟真实流量:单条请求测出来的延迟和并发场景下完全是两回事
写在最后
本地部署的门槛在过去两年已经降到非常低,普通开发者用一张二手 3090 就能跑动绝大部分开源模型。
相信这个趋势会延续:模型会越来越小(同等能力下),硬件会越来越便宜,本地部署会成为大部分场景的默认选项。