当前位置: 首页 > ops >正文

大模型微调与LoRA/QLoRA方法解析

目录

1.为什么需要微调?

2. 参数高效微调(PEFT)

3.LoRA 的核心原理

4. LoRA 的优势

5.QLoRA

1.为什么需要微调?

大模型在通用语料上训练,具备广泛的语言与知识能力。但当模型应用到垂直领域(如医疗问答、法律咨询、金融风控等)时,往往需要:

  • 对齐领域知识:让模型掌握专业术语、知识体系。

  • 对齐任务风格:如客服回复需要更礼貌,技术文档生成需要更精准。

  • 提升效果稳定性:降低幻觉,提高准确率。

如果直接对一个百亿、千亿参数的模型做全量微调,训练开销极大,对硬件要求高,难以在企业内部快速落地。因此需要更轻量的解决方案。

2. 参数高效微调(PEFT)

PEFT 的核心思想是:冻结模型大部分参数,只在部分位置引入额外可训练参数,以较小的计算代价完成领域适配。常见 PEFT 方法包括:

  • Prompt Tuning/ Prefix-Tuning / P-Tuning:在输入序列前注入可学习的向量,引导模型关注任务。

  • LoRA/ QLoRA:通过低秩矩阵分解替代部分权重更新,训练效率高且效果突出。

Peft库:https://github.com/huggingface/peft 很方便地实现将普通的HF模型变成用于支持轻量级fine tune的模型。

其中,LoRA是目前最流行,最通用的方法。

3.LoRA 的核心原理

Transformer 中大量参数集中在权重矩阵(W) 上。LoRA 的做法是:

不调整原始权重,而是加一个小的”旁路“(增量矩阵),通过训练这个增量矩阵来间接影响原始权重。在关键位置(如 Attention 的投影矩阵)引入低秩分解矩阵 A、B,使得参数更新部分为:

  • W′=W+ΔW,  ΔW=A×B

其中,A负责降维,B负责升维,合在一起就构成了对原始权充的更新ΔW。

初始化时,A采用高斯分布初始化,B初始化全为0。

例如,一个 10000×10000 的权重矩阵,全量微调需要 1 亿参数;而 LoRA 若取 rank=8,仅需 1.6 万参数即可完成训练。对于一般任务,通常秩的选取2,4,8,16,如果任务较大,可以增加rank值。

4. LoRA 的优势

  • 训练高效:显著降低参数规模,单机即可完成。

  • 存储友好:只需保存 LoRA 权重,文件往往仅几十 MB。

  • 灵活组合:不同领域的 LoRA 模型可在同一基础模型上加载,快速切换任务。加载不同的LoRA文件模块即可。

  • 推理兼容:推理时只需将 LoRA 权重与原始模型合并,不影响原有部署。保留原始大模型的其他能力。

5.QLoRA

LoRA 已经很高效了,但在应对更大规模模型(如 65B 参数的 LLaMA)时,单卡显存仍可能不够。QLoRA 是一种结合了 量化 (Quantization) 与 LoRA 的进一步优化方案,可以在资源受限的场景,微调大模型时考虑。

QLoRA 的关键点:

  1. 模型量化:将原始大模型参数(通常是 FP16 或 BF16)压缩到 4-bit 或 8-bit 存储,大幅减少显存占用。

  2. 在量化后的权重上添加 LoRA 模块,仅更新少量低秩参数。

这样做的好处是:

  • 极低显存占用:QLoRA 可以在单张消费级 GPU(如 24GB 显存)上微调百亿级参数模型。

  • 性能保持良好:通过量化校正和 LoRA 插件,QLoRA 在精度损失上可控,效果接近甚至媲美全量微调。

  • 适配更大模型:QLoRA 的出现,让“在家用 GPU 上微调超大模型”成为可能。

方法显存占用微调效率支持模型规模精度保留
LoRA中等中等规模模型
QLoRA更低更高百亿级以上较高(轻微下降)
http://www.xdnf.cn/news/19458.html

相关文章:

  • 四、练习1:Git基础操作
  • Python爬虫实战:研究Colormap,构建优质色彩方案数据采集和分析系统
  • 学习:uniapp全栈微信小程序vue3后台-暂时停更
  • C# Task 入门:让你的程序告别卡顿
  • 一文读懂k8s的pv与pvc原理
  • 【Proteus仿真】8*8LED点阵控制系列仿真——循环显示数字/按键控制显示图案
  • 【Netty4核心原理⑭】【Netty 内存分配 ByteBuf❷】
  • 计算机组成原理1 组成与各部件流程 9.1
  • 国内服务器如何安装docker或者是1panel
  • 鸿蒙总改变字体大小设置
  • 计算机网络---https(超文本传输安全协议)
  • Kafka面试精讲 Day 4:Consumer消费者模型与消费组
  • SQLSERVER关键字
  • npm 打包上传命令,撤销错误版本
  • 智能核心:机器人芯片的科技革新与未来挑战
  • 开源npm引导guide组件
  • GIT(了解)
  • 音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
  • 前端数据可视化:基于Vue3封装 ECharts 的最佳实践
  • Prometheus Alertmanager 告警组件学习
  • GD32F303在移植FreeRTOS时,系统卡死在Systick_Handler B.的处理方法
  • 164.在 Vue3 中使用 OpenLayers 加载 Esri 地图(多种形式)
  • 后端Web实战-多表操作员工列表查询
  • Spring Bean生命周期的完全指南
  • 面试常考css:三列布局实现方式
  • Interceptor拦截器入门知识及其工作原理
  • 虚拟化技术是什么?电脑Bios中的虚拟化技术怎么开启
  • S32K3平台FEE 应用笔记
  • C++ 多线程实战 01|为什么需要线程:并发 vs 并行,进程 vs 线程
  • 6 种可行的方法:小米手机备份到电脑并恢复