Chapter 09

模型合并、量化与推理加速

微调完成只是第一步。将 LoRA 权重合并,量化为高效格式,部署为高吞吐服务。

LoRA 权重合并

from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer

# 加载带 LoRA 的模型
model = AutoPeftModelForCausalLM.from_pretrained(
    "./lora-output",
    torch_dtype="bfloat16"
)
tokenizer = AutoTokenizer.from_pretrained("./lora-output")

# 将 LoRA 权重合并进基座模型
merged_model = model.merge_and_unload()

# 保存合并后的完整模型
merged_model.save_pretrained("./merged-model", safe_serialization=True)
tokenizer.save_pretrained("./merged-model")

量化格式对比

格式来源精度损失推理速度适用场景
GGUF (Q4_K_M)llama.cppCPU/GPU 均可本地部署(Ollama)
GGUF (Q8_0)llama.cpp极低中等高精度本地推理
AWQ (4-bit)MIT Han Lab极低很快(GPU)GPU 服务器部署
GPTQ (4-bit)IST Austria快(GPU)GPU 服务器部署
BF16 原始最快(大 GPU)高精度 API 服务

转换为 GGUF(Ollama 本地部署)

# 安装 llama.cpp
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && pip install -r requirements.txt

# 转换为 GGUF 格式
python convert_hf_to_gguf.py \
  --outfile my-model-q4.gguf \
  --outtype q4_k_m \
  ./merged-model

# 用 Ollama 运行
cat > Modelfile <<EOF
FROM ./my-model-q4.gguf
SYSTEM "你是专业的代码助手..."
EOF
ollama create my-finetune -f Modelfile
ollama run my-finetune

AWQ 量化(GPU 高性能部署)

from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model = AutoAWQForCausalLM.from_pretrained("./merged-model")
tokenizer = AutoTokenizer.from_pretrained("./merged-model")

# 量化(需要 128 条校准数据)
quant_config = {"zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM"}
model.quantize(tokenizer, quant_config=quant_config)
model.save_quantized("./my-model-awq")

# 用 vLLM 部署 AWQ 模型
# vllm serve ./my-model-awq --quantization awq --max-model-len 4096

vLLM 高性能服务部署

# 安装 vLLM
pip install vllm

# 启动 OpenAI 兼容服务
vllm serve ./merged-model \
  --served-model-name my-finetune \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.9 \
  --tensor-parallel-size 1 \
  --port 8000

# 调用(兼容 OpenAI 格式)
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "my-finetune", "messages": [{"role": "user", "content": "你好"}]}'
部署选型建议 个人或团队内部使用 → GGUF + Ollama(零运维成本)。生产 API 服务 → AWQ/GPTQ + vLLM(高吞吐)。研究/高精度场景 → BF16 原始权重 + vLLM。
本章小结 LoRA 合并 → 选择量化格式 → 部署为服务。GGUF+Ollama 适合本地,AWQ+vLLM 适合生产 API。下一章用完整端到端项目串联所有知识。