为什么要本地部署

不是所有任务都适合调 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_K5.4 GB明显极限场景
Q4_K_M7.9 GB很小推荐默认
Q5_K_M9.2 GB几乎无高质量需求
Q8_013.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 就能跑动绝大部分开源模型。

相信这个趋势会延续:模型会越来越小(同等能力下),硬件会越来越便宜,本地部署会成为大部分场景的默认选项。