如何进行LoRA微调

张开发
2026/4/16 15:45:17 15 分钟阅读

分享文章

如何进行LoRA微调
目录一、需求场景二、LoRA 微调需要的框架和库核心依赖库一键安装PEFT 在 LoRA 微调中的角色替代方案对比如果想零代码操作总结一、需求场景有一个需求场景是这样的我有一个系统实现需要根据不同的业务有不同的回答风格支持需要采用哪种方案实现比较合适?通常是两种方案第一种是通过prompt来区分不同业务下的风格控制第二种是直接通过 lora微调不同的业务风格参数直接挂载在 基座模型下来运行但是这里有个弊端是尽管我们的lora权重是挂载的但是启动时必须一个基座单独挂载一个lora权限来运行虽然可插拔很灵活但在资源上没有看到明显优势。所以综合场景流量、资源成本、训练数据多少来综合评估方案。最好是能做到可拓展和两种兼容后续可以对上限进行不断突破。对微调整体基础知识尚不是很清晰的同学可以参考这里《模型微调Fine-tuning实践》。二、LoRA 微调需要的框架和库是的LoRA 微调需要依赖专门的LoRA 框架/库来实现。你不需要自己从零实现 LoRA 的底层逻辑业界已经有成熟的开源库。下面详细说明核心依赖库┌─────────────────────────────────────────────────────────────────┐ │ 必需依赖 │ ├──────────────────┬──────────────────────────────────────────────┤ │ PEFT │ HuggingFace 出品LoRA 的核心实现库 │ │ │ 提供 LoraConfig、get_peft_model 等接口 │ │ │ pip install peft │ ├──────────────────┼──────────────────────────────────────────────┤ │ Transformers │ 加载基础模型Qwen、LLaMA 等 │ │ │ pip install transformers │ ├──────────────────┼──────────────────────────────────────────────┤ │ PyTorch │ 底层深度学习框架 │ │ │ pip install torch │ ├──────────────────┼──────────────────────────────────────────────┤ │ bitsandbytes │ 4-bit/8-bit 量化加载大幅节省显存 │ │ │ pip install bitsandbytes │ ├──────────────────┼──────────────────────────────────────────────┤ │ TRL (可选) │ SFTTrainer 封装简化指令微调流程 │ │ │ pip install trl │ ├──────────────────┼──────────────────────────────────────────────┤ │ Datasets │ 加载和处理训练数据 │ │ │ pip install datasets │ └──────────────────┴──────────────────────────────────────────────┘一键安装pipinstalltorch transformers peft bitsandbytes trl datasets acceleratePEFT 在 LoRA 微调中的角色PEFTParameter-Efficient Fine-Tuning就是 LoRA 的框架它的作用是原始流程无 PEFT 基础模型70亿参数→ 全量微调 → 修改所有 70亿参数 → 显存爆炸 使用 PEFT/LoRA 基础模型70亿参数冻结❄️ ↓ PEFT 自动注入 LoRA 低秩矩阵仅 ~8000万 可训练参数 ↓ 只训练这 1% 的参数 → 显存友好 ✅ ↓ 保存时只保存 LoRA 部分几十~几百MB而非十几GB核心代码只需 3 行frompeftimportLoraConfig,get_peft_model# 1. 定义 LoRA 配置lora_configLoraConfig(r64,# LoRA 秩lora_alpha128,# 缩放因子target_modules[q_proj,k_proj,v_proj,o_proj],# 要注入 LoRA 的层lora_dropout0.05,task_typeCAUSAL_LM,)# 2. 一行代码将 LoRA 注入基础模型modelget_peft_model(base_model,lora_config)# 3. 查看可训练参数量model.print_trainable_parameters()# → trainable params: 83,886,080 || all params: 7,699,513,344 || trainable%: 1.089%PEFT 在背后做了这些事冻结基础模型所有原始参数在你指定的target_modules层旁边插入低秩矩阵 A 和 B训练时只更新这些低秩矩阵保存时只导出LoRA 部分权重替代方案对比除了 PEFT还有其他框架也支持 LoRA根据场景选择框架特点适用场景HuggingFace PEFT生态最完善与 Transformers 无缝集成⭐首选通用场景LLaMA-Factory一站式训练平台Web UI 可视化操作不想写代码、快速实验Axolotl配置驱动YAML 定义训练全流程DevOps 友好批量训练Unsloth2-5x 训练加速显存优化极致显存紧张、追求速度Swift (ModelScope)阿里出品对国产模型支持好使用 Qwen 等国产模型如果想零代码操作LLaMA-Factory提供了 Web UI# 安装pipinstallllamafactory# 启动 Web 界面llamafactory-cli webui在浏览器中就可以通过点击操作完成选模型 → 上传数据 → 配置 LoRA 参数 → 开始训练 → 导出 adapter全程不需要写 Python 代码。总结LoRA 微调必须加载 LoRA 框架通常是 PEFT它负责将 LoRA 低秩矩阵注入到基础模型中冻结原始参数只训练 LoRA 部分保存/加载 LoRA adapter 权重推理时动态挂载/卸载 adapter你不需要自己实现 LoRA 的数学细节pip install peft一行命令就够了。

更多文章