引言:为什么私有化部署成为刚需

过去一年,开源大模型的参数规模与能力边界持续外扩,Llama 3、Qwen2.5、Mistral、DeepSeek 等系列模型在多数任务上已能覆盖企业级场景。与此同时,数据合规、推理成本与业务定制三重要求叠加,使得“把模型拿回自己的机房”从可选项变成必选项。

但私有化部署远不止“下载权重、跑通推理”这么简单。一个可上线的方案至少包含四个环节:基座选型、微调策略、推理服务化、运维监控。本文按工程落地顺序展开,给出可复用的配置与代码路径,并标注常见坑点。

一、基座选型:先算显存,再谈能力

选型的第一步不是看榜单,而是算账。以 FP16 精度估算,推理显存约为参数量的 2 倍,加上 KV Cache 与框架开销,7B 模型需要 16GB 以上显存,13B 需要 28GB 左右,70B 则需多卡或量化。若采用 4-bit 量化(GPTQ/AWQ),显存可压缩至原来的 1/3 到 1/4,代价是少量精度损失。

实践中的选型矩阵如下:

  • 7B 级别:适合单卡 24GB(如 RTX 4090 / A10)部署,微调可用 LoRA 在单卡完成,适合客服问答、文本分类等垂直任务。
  • 13B–14B 级别:单卡 A100 40GB 或双卡消费级显卡,能力与成本平衡较好,是当前中小企业私有化的主流选择。
  • 32B 及以上:需要多卡并行或量化部署,微调建议使用 QLoRA 或多机训练,适合对推理质量要求高的场景。

需要强调的是,中文场景下 Qwen 系列与 DeepSeek 系列在中文语料覆盖上更有优势,Llama 系列则在英文生态与工具链成熟度上领先。选型时应以业务评测集为准,而非公开榜单。

二、微调策略:LoRA 是起点,不是终点

全量微调对显存的要求约为参数量的 16 倍(含优化器状态),7B 模型即需 100GB 以上,多数团队不具备条件。因此参数高效微调(PEFT)是更现实的选择。

2.1 LoRA 与 QLoRA

LoRA 通过低秩分解注入可训练参数,冻结原权重,7B 模型微调显存可控制在 20GB 以内。QLoRA 在此基础上对基座做 4-bit 量化,进一步将门槛降至 10GB 级别,代价是训练速度下降约 30%。

一个典型的 LoRA 配置如下:

from peft import LoraConfig

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
                    "gate_proj", "up_proj", "down_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
)

r 取 8–64 之间,任务越复杂取值越大;target_modules 建议覆盖全部线性层,仅调 attention 层在复杂任务上容易欠拟合。学习率通常取 1e-4 到 2e-4,配合 cosine 调度与 3% 左右的 warmup。

2.2 数据质量优先于数据数量

微调效果的上限由数据决定。实践中 1000–5000 条高质量指令数据往往优于数万条噪声数据。数据构建需注意三点:

  1. 格式统一:严格遵循所选模型的 chat template,否则训练与推理分布不一致,效果显著下降。
  2. 去重与清洗:重复样本会导致过拟合,可用 MinHash 或 embedding 相似度做去重。
  3. 保留评测集:从业务真实分布中留出 5%–10% 作为 held-out 评测集,避免用训练集指标自欺。

2.3 训练框架选择

主流框架包括 LLaMA-Factory、Axolotl、Unsloth 与 Hugging Face TRL。LLaMA-Factory 提供 WebUI 与命令行双模式,支持百余种模型,适合快速验证;Unsloth 通过内核优化可将训练速度提升约 2 倍、显存降低约 50%,适合资源紧张的场景。生产环境建议锁定版本并记录完整训练配置,便于复现。

三、推理服务化:从脚本到可运维服务

训练产出 adapter 后,需合并权重并部署为服务。合并可用 peft 的 merge_and_unload(),也可在推理时动态加载 adapter(灵活但略增延迟)。

3.1 推理引擎对比

  • vLLM:PagedAttention 管理 KV Cache,吞吐量高,支持 OpenAI 兼容接口,是当前私有化部署的首选。
  • SGLang:RadixAttention 对多轮对话与前缀复用场景优化明显,适合 Agent 类应用。
  • llama.cpp / Ollama:CPU 与低显存场景友好,适合边缘设备或开发调试。

以 vLLM 为例,启动命令如下:

python -m vllm.entrypoints.openai.api_server \
    --model /models/qwen2.5-7b-merged \
    --served-model-name qwen-private \
    --tensor-parallel-size 1 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.90 \
    --api-key $API_KEY

max-model-len 需与业务最长上下文匹配,设置过大会挤占 KV Cache 空间导致并发下降;gpu-memory-utilization 建议留 10% 余量,防止 OOM。

3.2 并发与限流

单卡 7B 模型在 8K 上下文下,vLLM 通常可支撑数十路并发。上线前应做压测,记录不同并发下的首 token 延迟(TTFT)与吞吐(tokens/s)。服务层建议前置网关做鉴权、限流与请求日志,避免单租户打满资源。

3.3 容器化与镜像

生产部署建议使用官方镜像并固定 digest,而非 latest 标签。模型权重通过只读卷挂载,避免打进镜像导致体积膨胀。GPU 资源通过 nvidia.com/gpu 声明,配合节点亲和性调度到指定机型。

四、运维监控:被低估的最后一公里

模型服务上线后,需要关注三类指标:

  1. 资源指标:GPU 利用率、显存占用、温度,可用 DCGM Exporter 采集并接入 Prometheus。
  2. 服务指标:QPS、TTFT、TPOT(每 token 输出时间)、错误率,vLLM 自带 Prometheus 端点可直接抓取。
  3. 质量指标:抽样人工评估、输出长度分布、拒答率,用于发现模型漂移。

此外应建立灰度发布机制:新版本先承接 5% 流量,对比质量与延迟后再全量。adapter 与基座版本需建立映射关系,回滚时能快速切换。

五、常见坑点清单

  • chat template 不一致:训练与推理使用不同模板是最常见的“效果变差”原因,务必在 tokenizer 层面校验。
  • 量化后精度骤降:4-bit 量化对数学与代码任务影响较大,敏感场景建议 8-bit 或 FP16。
  • 上下文截断:训练时 max_length 设置过小,长文档任务在推理时表现异常,需对齐业务最长输入。
  • 显存碎片:长时间运行后显存碎片累积导致 OOM,可通过定期滚动重启或调整 vLLM 的块大小缓解。
  • 许可证合规:部分开源模型对商用有附加条款,上线前需核对 LICENSE。

结语

开源大模型的私有化部署是一项系统工程,模型能力只是起点,真正的壁垒在于数据质量、服务工程与运维体系。建议团队按“小模型验证链路 → 中等模型打磨数据 → 大模型或量化方案上线”的节奏推进,先把端到端流程跑通,再逐步优化每个环节的成本与效果。工具链在快速迭代,但工程原则——可复现、可观测、可回滚——始终适用。