LLaMA-Factory 合并 LoRA 适配器完整指南
在大模型落地的实战中,一个常见的痛点是:明明只微调了少量参数,部署时却还得背负整个基础模型 + LoRA 插件的双重重担。启动慢、依赖多、运维复杂——这些问题让原本轻量高效的 PEFT 方法显得有些'名不副实'。
而真正的生产级解决方案,应该是把训练成果固化下来:将 LoRA 的增量更新永久融合进原始模型,生成一个独立、自包含、开箱即用的新模型。这不仅是工程上的简化,更是从实验走向服务的关键一步。
LLaMA-Factory 提供了一条极为简洁的路径来实现这一目标——通过一条 export 命令和一个 YAML 配置文件,就能完成跨架构、跨模态、安全可靠的 LoRA 合并。本文将带你深入这个过程的每一个细节,避开常见陷阱,并分享一些提升效率的实用技巧。
核心命令:一键导出合并模型
整个流程的核心就是这条命令:
llamafactory-cli export examples/merge_lora/qwen2_5vl_lora_sft.yaml
别小看这一行,它背后完成了一系列精密操作:
- 加载原始浮点精度的基础模型(如 Qwen2.5-VL-7B-Instruct)
- 读取指定路径下的 LoRA 权重(
adapter_model.bin)及其配置 - 将低秩矩阵 $\Delta W = A \cdot B$ 按照预设规则叠加到对应层的原始权重 $W$ 上,得到 $W' = W + \Delta W$
- 卸载所有 LoRA 相关结构,恢复为标准 Transformer 架构
- 分片保存为完整的模型包,包含 tokenizer、generation config、对话模板等全套组件
这套机制支持包括 Qwen、LLaMA、ChatGLM、Baichuan、Phi、Mistral 在内的上百种主流架构,甚至涵盖多模态模型如 Qwen-VL 和 LLaVA。你只需要换一下配置文件里的路径和模板名称,其余工作全部自动化处理。
配置详解:YAML 文件怎么写?
下面是一个典型的合并配置示例:
### 注意:合并 LoRA 时禁止使用量化模型或设置 quantization_bit! ### 模型配置 model_name_or_path: Qwen/Qwen2.5-VL-7B-Instruct adapter_name_or_path: saves/qwen2_5vl-7b/lora/sft template: qwen2_vl trust_remote_code: true ### 导出配置 export_dir: output/qwen2_5vl_lora_sft export_size: 5 export_device: cpu export_legacy_format: false
我们来逐个拆解这些参数的实际意义与选择逻辑。
model 模块关键参数
| 参数 | 说明 |
|---|---|
model_name_or_path | 必须指向未量化的原始模型。可以是 Hugging Face Hub 的 ID,也可以是本地路径。重点强调:不能是 GPTQ/AWQ/INT4 等任何量化版本。这类模型的权重已经被近似压缩,无法与 LoRA 的增量矩阵精确相加,强行合并会导致输出混乱甚至崩溃。 |
adapter_name_or_path | LoRA 训练完成后保存的目录,必须包含 adapter_model.bin 和 adapter_config.json。建议使用绝对路径或相对于项目根目录的相对路径,避免加载失败。 |
template | 对话模板名称,直接影响 prompt 的拼接方式。例如 Qwen 多模态模型需用 qwen2_vl,LLaMA 系列常用 llama3 或 alpaca。一旦设错,模型可能无法识别 system/user/assistant 角色标记,导致交互异常。 |

