swift LoRA 模型合并:权重融合与量化导出完整指南

📅 发布时间:2026/9/11 4:50:52
swift LoRA 模型合并:权重融合与量化导出完整指南
swift LoRA 模型合并权重融合与量化导出完整指南【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift刚跑完 LoRA 微调打开 checkpoint 目录一看里面只有几百 MB 的低秩权重矩阵没法直接丢给 vLLM 服务也没法当作一个完整模型发给下游团队。swiftModelScope 推出的 LLM/MLLM 微调工具箱支持 600 大模型和 300 多模态模型提供了一行命令的模型合并能力指向训练产出的 checkpoint 目录它会自动把 LoRA 权重融合回基础模型还可以在同一条命令里追加量化、导出 Ollama 格式。读完本文你能走通LoRA 训练产物 → 可部署完整模型的最后一公里。先搞懂LoRA 权重为什么要合并LoRALow-Rank Adaptation低秩自适应训练时冻结基础模型的全部参数只学习两个小矩阵 A 和 B。推理时最终生效的权重是W B A × scaling相当于给模型打一个补丁而不是重写整个程序。问题出在部署端大多数推理引擎和服务框架想要的是打好补丁的完整模型而不是基础模型 一张补丁清单。swift 的swift export --merge_lora就是干这件事的——从 checkpoint 目录里自动读取训练时生成的args.json记录了基础模型、模板等全部训练配置加载 LoRA 权重把增量算出来写回对应层最后保存为标准的 safetensors 完整模型。整个过程不需要你手动指定--model。5分钟跑通第一次合并环境要求很简单列在这里带过项目要求GPU 显存按基础模型 bf16 加载大小估算7B 约 16GB显存不足可放到 CPU 合并磁盘约 2 倍模型大小读旧权重 写新权重依赖pip 一行装齐无需单独装 peft前提checkpoint 目录是 swift 训练产出的含args.json安装 swiftpip install -U ms-swift[all] # 安装框架及常用依赖如果你需要源码也可以这样git clone https://gitcode.com/GitHub_Trending/swift1/swift cd swift pip install -e . # 以可编辑模式安装核心合并命令只有两个必需参数swift export \ --adapters output/v0-20260901-120000/checkpoint-500 \ # LoRA 训练输出目录必须含 args.json --merge_lora true # 启用权重融合跑完你会在日志里看到类似这样的输出Merge LoRA... Saving merged weights... Successfully merged LoRA and saved in output/v0-20260901-120000/checkpoint-500-merged.如果不指定--output_dir合并结果默认存在适配器同级目录目录名带-merged后缀。指定输出目录的写法swift export \ --adapters output/v0-20260901-120000/checkpoint-500 \ --merge_lora true \ --output_dir merged-model # 指定合并模型保存路径打开merged-model目录检查完整性应该能看到这些文件merged-model/ ├── config.json # 模型配置 ├── generation_config.json # 生成配置 ├── model-00001-of-00002.safetensors # 分片权重 ├── model-00002-of-00002.safetensors ├── model.safetensors.index.json # 权重索引 ├── tokenizer.json / tokenizer_config.json └── special_tokens_map.json文件齐全合并就算成功了。原理拆解权重是怎么流动的整个合并过程的数据流可以用几行伪代码概括对应Swift.merge_and_unload的核心行为for linear in model.modules(): # 遍历挂了 LoRA 的线性层 delta linear.lora_B linear.lora_A # 低秩增量 linear.weight.data delta * linear.scaling # 写回基础权重 # 最后分片保存按 --max_shard_size 切分 safetensors注意两个细节。一是args.json让流程零配置基础模型 ID、tokenizer、system 提示词全都从训练时的快照恢复你不需要记得当时用了哪个模型。二是合并阶段会先把量化参数临时置空确保融合发生在原始精度的权重上避免量化模型上的合并误差。场景实战合并前后推理结果如何验证一致性合并最怕的是数值对不上最直接的验证方式就是同一句话跑两遍。# 合并前基础模型 LoRA 适配器 swift infer \ --model Qwen/Qwen2.5-7B-Instruct \ --adapters output/v0-20260901-120000/checkpoint-500 \ # 在基础模型上挂适配器 --stream true # 合并后直接用合并产物 swift infer \ --model merged-model \ --stream true两次输出的回答内容应基本一致采样参数完全相同时 token 级一致。这一步建议固定 prompt 各跑 3~5 条覆盖你训练涉及的任务类型确认没有偏差后再进入部署环节。合并和量化一次做完直接进入 vLLM验证通过后通常下一步就是量化压缩。swift 允许在同一条命令里合并 量化省掉先导出中间模型再二次加载的开销pip install gptqmodel optimum -U # GPTQ 量化额外依赖 swift export \ --adapters output/v0-20260901-120000/checkpoint-500 \ --merge_lora true \ --quant_method gptq \ # 量化方法gptq / awq / bnb / fp8 --quant_bits 4 \ # 量化位数常用 4 --dataset AI-ModelScope/alpaca-gpt4-data-zh#256 \ # GPTQ/AWQ 需要校准数据#256 表示取 256 条 --output_dir Qwen2.5-7B-LoRA-GPTQ-Int4这里有个选择逻辑GPTQ/AWQ 量化质量更好但耗时较长7B 模型大约 20~40 分钟且必须提供--dataset校准数据BNB/FP8 无需校准集、几分钟内完成适合快速验证。量化产物可以直接交给 vLLM 加载vllm serve Qwen2.5-7B-LoRA-GPTQ-Int4 \ --tensor-parallel-size 1 \ --port 8000导出 Ollama 格式在本地轻量部署如果你的合并产物不是要上生产集群而是要给团队在本地笔记本上试玩可以导出成 Ollama 的Modelfileswift export \ --model merged-model \ --to_ollama true \ --output_dir Qwen2.5-7B-ollama # 产出 Modelfile供 ollama create 使用产物目录里会生成Modelfile和分片权重ollama create my-model -f Modelfile即可在本地拉起方便小团队离线评测合并后的效果。排坑指南现象原因解法FileExistsError: ... already exists输出目录已存在默认不覆盖加--exist_ok true覆盖或换一个--output_dir合并时报找不到基础模型checkpoint 不是 swift 训练产出缺args.json自动加载失败手动补上--model Qwen/Qwen2.5-7B-Instruct显式指定基础模型合并阶段 OOM需以 bf16 完整加载基础模型7B 约 16GB换大显存卡或加--device_map cpu放到 CPU 合并慢但省显存GPTQ/AWQ 报Please input the quant dataset未提供校准数据补上--dataset xxx#256不想校准就改用--quant_method bnbautoawq 安装时 torch 依赖冲突autoawq 与现有 torch 版本强绑定按 AutoAWQ 官方对应表选版本或pip install autoawq --no-deps收尾到这里LoRA 产物从几百 MB 的补丁变成了可独立加载、可量化、可本地部署的完整模型这就是 swift 模型合并工具的核心价值。下一步建议把合并 量化串进你的部署流程合并产物直接vllm serve再对比一下量化前后的延迟和精度损失。更完整的导出参数和推送 ModelScope 的用法可以看仓库内的 导出与推送文档。【免费下载链接】swiftUse PEFT or Full-parameter to CPT/SFT/DPO/GRPO 600 LLMs (Qwen3.6, DeepSeek-V4, GLM-5.1, InternLM3, Llama4, ...) and 300 MLLMs (Qwen3-VL, Qwen3-Omni, InternVL3.5, Ovis2.5, GLM4.5v, Gemma4, Llava, Phi4, ...) (AAAI 2025).项目地址: https://gitcode.com/GitHub_Trending/swift1/swift创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考