vLLM 完全支持加载和部署 LoRA 微调后的模型,并且能带来显著的性能提升。
两种部署方式
方式一:直接加载 LoRA 适配器(推荐)
vLLM 原生支持动态加载 LoRA 适配器,无需合并模型,启动时指定即可:
# 启动 vLLM 服务器时指定 LoRA 模块 vllm serve ./models/Qwen3-0.6B \ --enable-lora \ --lora-modules human-resources=out/qwen3-0.6B-finetuned-final \ --port 8001
参数说明:
-
--enable-lora:启用 LoRA 支持 -
--lora-modules {name}={path}:指定 LoRA 适配器的名称和路径,自定义名称(给LoRA模块起的别名),你定义的名称就是API调用时model参数的值
调用方式(OpenAI 兼容 API):
curl http://localhost:8001/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "human-resources", "messages": [{"role": "user", "content": "养老金怎么交?"}] }'
方式二:合并后加载(更稳定)
如果希望模型独立、便于分发,可以先合并再部署:
# 合并 LoRA 到基础模型 from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("./models/Qwen3-0.6B") merged_model = PeftModel.from_pretrained(base_model, "out/qwen3-0.6B-finetuned-final") merged_model = merged_model.merge_and_unload() merged_model.save_pretrained("./models/Qwen3-0.6B-Finetuned")
# 然后直接加载合并后的模型 vllm serve ./models/Qwen3-0.6B-Finetuned --port 8001
性能优势
使用 vLLM 相比你的 FastAPI 实现有显著性能提升:
| 指标 | FastAPI + Transformers | vLLM |
|---|---|---|
| 吞吐量 | 基线 | 提升 3-4 倍 |
| 首 token 延迟 | ~180ms | ~99ms |
| 显存占用 | 基线 | 降低约 30% |
核心原因是 vLLM 的 PagedAttention 技术和连续批处理(Continuous Batching)。
注意事项与常见问题
1. LoRA 格式兼容性
vLLM 要求 LoRA 适配器是 PEFT 格式,即目录下必须包含:
-
adapter_config.json -
adapter_model.safetensors(或adapter_model.bin)
你的微调脚本输出正是这个格式,所以直接可用。
2. 移除不支持的权重(可能遇到的问题)
如果启动时报错,可能是 adapter 中包含了 embed_tokens.weight 等非 LoRA 权重。解决方案:
import safetensors.torch src = "out/qwen3-0.6B-finetuned-final/adapter_model.safetensors" dst = "out/qwen3-0.6B-finetuned-final/adapter_model_filtered.safetensors" tensors = safetensors.torch.load_file(src) # 只保留包含 "lora" 的键 non_lora_keys = [k for k in tensors.keys() if "lora" not in k] for k in non_lora_keys: del tensors[k] safetensors.torch.save_file(tensors, dst) ```[citation:1] ### 3. 设置合理的 max_lora_rank 如果你的 LoRA rank 是 4(微调脚本中的设置),建议: ```bash vllm serve ... --max-lora-rank 8 # 设置一个略高于实际 rank 的值即可
设置过高会浪费显存。
完整部署示例
# 1. 安装 vLLM pip install vllm # 2. 启动服务(假设你的基础模型和 LoRA 路径如下) vllm serve ./models/Qwen3-0.6B \ --enable-lora \ --lora-modules hr-lora=out/qwen3-0.6B-finetuned-final \ --host 0.0.0.0 \ --port 8001 \ --gpu-memory-utilization 0.85 \ --max-model-len 4096 # 3. 测试调用 curl http://localhost:8001/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "hr-lora", "messages": [{"role": "user", "content": "社保断缴有什么影响?"}], "max_tokens": 300, "temperature": 0.7 }'
总结
| 特性 | 你当前的 FastAPI | vLLM 方案 |
|---|---|---|
| 吞吐量 | 一般 | 高(3-4倍提升) |
| 显存效率 | 一般 | 高(PagedAttention) |
| OpenAI 兼容 | ✅ | ✅ |
| LoRA 动态加载 | 需重启 | ✅ 支持热加载 |
| 部署复杂度 | 简单 | 中等 |
建议:如果你想在生产环境获得更高的吞吐量和更低的延迟,强烈推荐切换到 vLLM。如果只是本地测试或开发,当前的 FastAPI 方案已经足够。
- THE END -
最后修改:2026年5月19日
非特殊说明,本博所有文章均为博主原创。