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

LoRA、QLoRA是什么

一:
LoRA(Low-Rank Adaptation,低秩适应)是一种高效的大模型参数微调技术,由Meta在2021年提出。它通过冻结预训练模型参数,仅训练少量新增的低秩矩阵,大幅减少了需要训练的参数量,同时保持接近全参数微调的效果。

为什么需要LoRA?

传统的全参数微调(Fine-tuning)需要更新大型语言模型的所有参数(如GPT-3有1750亿参数),这带来两个核心问题:

  1. 计算资源需求极高:需要大量GPU内存和长时间训练。
  2. 容易过拟合:对于小数据集,全参数微调可能导致模型忘记预训练知识(灾难性遗忘)。

而LoRA通过只训练少量新增参数,解决了这些问题。

LoRA的核心原理

LoRA的核心思想是:用两个低秩矩阵的乘积代替传统的权重更新矩阵

对于预训练模型中的权重矩阵 W 0 W_0 W0(通常维度很高,如768×768),LoRA不直接更新它,而是添加一个可训练的分解矩阵:
W = W 0 + Δ W = W 0 + B ⋅ A W = W_0 + \Delta W = W_0 + B \cdot A W=W0+ΔW=W0+BA
其中:

  • B B B A A A 是两个低秩矩阵,秩为 r r r(通常 r ≪ 维度 r \ll \text{维度} r维度,如 r = 8 r=8 r=8 r = 16 r=16 r=16)。
  • A A A 是随机初始化的矩阵, B B B 初始化为零矩阵。
  • 只有 B B B A A A 需要训练, W 0 W_0 W0 保持冻结。

LoRA的优势

  1. 参数量显著减少

    • 对于13B参数的CodeLlama模型,全参数微调需要训练130亿参数;
    • 而LoRA只需要训练约0.5%的参数(例如 r = 8 r=8 r=8 时,仅需约650万参数)。
  2. 内存和计算效率提升

    • 训练时GPU内存需求降低,可使用更小的GPU训练大模型。
    • 推理时不需要额外内存,因为LoRA权重可以与原始权重合并。
  3. 训练速度加快

    • 由于需要计算梯度的参数大幅减少,训练速度显著提升。
  4. 可并行训练多个任务

    • 可以为不同任务保存不同的LoRA权重,共享同一个预训练模型。

在你的代码中的应用

在你提供的代码中,LoRA的配置如下:

train_args = {"finetuning_type": "lora",  # 使用LoRA微调"lora_target": "q_proj,v_proj",  # 只对Attention层的query和value投影矩阵应用LoRA"lora_rank": 64,  # 低秩矩阵的秩r"lora_alpha": 32,  # 缩放因子,用于调整LoRA权重的大小
}

这意味着代码只会微调模型中Attention层的query和value投影矩阵,使用秩为64的低秩分解,从而大幅降低训练成本。

LoRA vs 全参数微调

对比项全参数微调LoRA微调
训练参数量所有参数(如13B)仅LoRA参数(如650K)
GPU内存需求高(需保存所有梯度)低(仅保存LoRA梯度)
训练时间
模型效果可能更好(数据充足时)接近全参数微调
多任务支持需要为每个任务保存完整模型共享预训练模型,仅保存LoRA权重

总结

LoRA是一种轻量级微调技术,特别适合在资源有限的情况下微调大型语言模型。通过冻结预训练权重并引入低秩适应矩阵,LoRA在大幅减少训练成本的同时,保持了接近全参数微调的效果。这使得即使是个人开发者也能在消费级GPU上微调13B甚至更大的模型。

QLoRA(Quantized Low-Rank Adaptation)是LoRA的升级版,由Meta在2023年提出。它通过量化预训练模型权重(如将权重压缩至4位或更少)并结合LoRA微调,进一步降低了大模型微调的资源门槛,让普通人也能在消费级GPU上微调百亿级参数模型。


二:

QLoRA的核心创新

1. 4位量化预训练模型
  • 传统LoRA:虽然只训练少量LoRA参数,但预训练模型权重仍需以FP16(16位浮点)或BF16(Brain Floating Point)格式存储,占用大量内存。例如,13B参数模型需约26GB显存。
  • QLoRA:将预训练模型权重压缩至4位(仅需约3.25GB),同时引入双量化技术进一步减少量化误差,几乎不损失模型性能。
2. Paged Optimizers
  • 设计了特殊的优化器,解决量化模型训练时的内存碎片问题,大幅减少内存峰值。
3. 高秩适应
  • 支持更高的LoRA秩(如 r = 64 r=64 r=64 r = 128 r=128 r=128),在低精度下仍能保持良好的表达能力。

QLoRA的优势

  1. 显存需求极低

    • 13B模型只需约7GB显存即可微调(相比传统LoRA的26GB)。
    • 70B模型可在单张48GB GPU上微调(传统方法需多张A100)。
  2. 接近全参数微调的效果

    • 在多个基准测试中,QLoRA微调的模型性能接近甚至超过全参数微调的结果。
  3. 训练效率提升

    • 由于权重存储量减少,内存带宽压力降低,训练速度略有提升。

QLoRA vs LoRA

对比项LoRAQLoRA
预训练模型精度FP16/BF16 (16位)4位量化
13B模型显存需求~26GB~7GB
70B模型显存需求~140GB~18GB
参数量仅LoRA参数仅LoRA参数(量化权重不占训练内存)
硬件要求需要高端GPU(如A100)可在消费级GPU(如RTX 4090)上运行

在你的代码中如何使用QLoRA?

如果要将你的代码从LoRA切换到QLoRA,需要:

  1. 安装额外依赖

    pip install bitsandbytes  # 用于权重量化
    
  2. 修改训练参数

    from transformers import BitsAndBytesConfig# 配置4位量化
    quantization_config = BitsAndBytesConfig(load_in_4bit=True,  # 加载4位量化模型bnb_4bit_compute_dtype=torch.bfloat16,  # 计算精度bnb_4bit_use_double_quant=True,  # 双量化bnb_4bit_quant_type="nf4",  # 量化类型
    )train_args = {"model_name_or_path": "codellama/CodeLlama-13b-Instruct-hf","quantization_config": quantization_config,  # 添加量化配置"do_train": True,"finetuning_type": "lora","lora_target": "q_proj,v_proj",# 其他参数保持不变...
    }
    

QLoRA的局限性

  1. 初始加载时间较长:量化模型需要额外时间加载和准备。
  2. 特定硬件依赖:需要GPU支持BF16或FP16计算(大多数现代GPU都支持)。
  3. 极端低精度可能影响性能:在某些任务上,4位量化可能略微降低模型表现,但通常影响较小。

总结

QLoRA是当前最先进的大模型微调技术之一,它通过量化预训练权重+LoRA微调的组合,将百亿级参数模型的微调门槛降低到消费级硬件水平。对于个人开发者或资源有限的团队,QLoRA是实现低成本、高效率模型微调的理想选择。

http://www.lryc.cn/news/571791.html

相关文章:

  • 分布式——分布式系统设计策略一
  • 【threejs】VR看房项目经验总结
  • java高级——注解和反射
  • MySQL 数据处理函数全面详解
  • 【windows常见文件后缀】
  • 客户端软件开发技术选择、填空解析
  • python中学物理实验模拟:杠杆平衡条件
  • 从0开始学linux韦东山教程第四章问题小结(5)
  • Java项目:基于SSM框架实现的学生二手书籍交易平台管理系统【ssm+B/S架构+源码+数据库+毕业论文+答辩PPT+任务书+开题】
  • 猿人学js逆向比赛第一届第六题
  • excel 待办日历软件(需要宏)特别推荐
  • 《挑战你的控制力!开源项目小游戏学习“保持平衡”开发解析:用HTML+JS+CSS实现物理平衡挑战》​
  • 吉林大学软件工程章节测试答案-第八章
  • 数学基础(线性代数、概率统计、微积分)缺乏导致概念难以理解问题大全
  • 每日一篇博客:理解Linux动静态库
  • 一文学懂快浮点数据格式
  • 【深度学习】卷积神经网络(CNN):计算机视觉的革命性引擎
  • 蚂蚁百宝箱+MCP打造p 人解放神器agent,解放大脑
  • 设置环境变量(linux,windows,windows用指令和用界面)
  • HarmonyOS性能优化——感知流畅优化
  • 鸿蒙网络编程系列54-仓颉版实现Smtp邮件发送客户端
  • LVS +Keepalived 高可用群集
  • 51c大模型~合集141
  • maven编译报错java: Compilation failed: internal java compiler error
  • 基于C++实现(控制台)机械提取词频
  • Hive的分区表(静态分区、动态分区)、分桶表、四种排序方式和数据加载方式
  • Linux操作系统之进程(六):进程的控制(上)
  • 鼎捷T100开发语言-Genero FGL 终极技术手册
  • Linux软件管理包-yum和基础开发工具-vim
  • 6.18 redis面试题 日志 缓存淘汰过期删除 集群