Lora与QLora

首先声明,我也就是草寮的随便写写,有不对的地方,骂轻点

Lora回顾:

在模型训练时,经主要训练的大参数层进行平替并行性训练,如图

这个过程是怎样的呢?

在训练时,就相当于外挂一个参数层,这个参数层里面的参数来自原来的对应的层,

不过这个外挂的参数相对于之前的比如20000x768变成了两个低秩矩阵

20000x8和8x768

这个外挂的层就相当于将原来的参数量进行了一个缩减

那么在训练时,两个层是并行同时输入的,只不过原来的层不参与训练,外挂的层参与训练,

输入经过两个层输出之后再进行相加,得出这两个层共同的结果,然后只有外挂的层进行梯度的反向传播

我觉得原层目的是辅助外挂的层进行训练,只是我觉得奥~

训练完后,外挂的层再覆盖原来层对应的参数,实现一个合并,得到最终的训练的模型

综上所述,Lora只是在训练的时候依赖外挂低秩矩阵这一技术,只是训练了部分参数,加快了训练,但是训练完成后由于参数合并的操作,最终模型的大小是不改变的。
 


那么QLoRa呢?

QLoRa是在Lora基础上,对于我们外挂层对应的层以外的其它的层,在训练的时候进行一个量化训练的操作,什么意思呢?

也就是原模型由16bit变为4bit

因为输入是16bit的,所以必须模型参数同样是16bit才能计算,那么在训练时,不参与训练的对应层的其它部分层在与输入做计算时变成16bit,他这部分负责完成后,他这部分变成4bit,意思就是计算时变回来

就是在训练模型对应需要训练的层的时候这部分参数采由4bit变16bit,但他们不参与训练,真正参与训练的是对应层的外挂层,最后保存的时候,这些不参与训练的层的参数仍然保存原来的精度。这就在一定程度上降低显存的使用,

如图

这个图画的有点不对劲,他是第一个块该他计算了,他由4bit变成16bit,他计算完了就又变成4bit,也就是一层一层变,一层一层计算,一层一层变回4bit

### LoraQlora的区别及应用场景 Lora(Low-Rank Adaptation)和 Qlora 是近年来在机器学习领域中用于模型微调的两种重要技术。以下从定义、原理、优缺点以及应用场景等方面对两者进行详细对比。 #### 1. 定义原理 Lora 是一种低秩分解方法,通过引入低秩矩阵来更新预训练模型中的权重,从而减少参数量并提高微调效率[^1]。具体来说,Lora 在模型的全连接层或注意力层中插入两个小规模矩阵 \(A\) 和 \(B\),使得原始权重矩阵 \(W\) 被近似为 \(W + AB\) 的形式。这种方法可以显著降低计算成本和内存占用。 Qlora 则是在 Lora 的基础上进一步优化,结合了量化技术(Quantization),以实现更高的压缩率和更快的推理速度[^2]。Qlora 不仅使用低秩分解,还对模型权重进行量化处理,通常将浮点数转换为低位整数(如 INT4 或 INT8)。这种组合方式使得 Qlora 特别适合在资源受限的环境中部署大语言模型。 #### 2. 优缺点分析 - **Lora 的优点** - 参数高效:通过低秩分解,仅需调整少量参数即可完成微调。 - 易于实现:Lora 的设计相对简单,便于集成到现有框架中。 - 通用性强:适用于多种类型的神经网络,包括但不限于 Transformer 模型。 - **Lora 的缺点** - 训练精度可能受到限制:由于低秩近似的局限性,在某些复杂任务上表现可能不如全量微调。 - 需要额外的超参数调优:例如秩大小的选择会影响最终性能。 - **Qlora 的优点** - 更高的压缩率:结合量化技术后,模型体积大幅减小,适合移动端或边缘设备部署。 - 推理速度快:量化后的模型通常具有更低的延迟和更高的吞吐量。 - **Qlora 的缺点** - 可能引入量化误差:如果量化粒度过粗,可能导致模型性能下降。 - 实现复杂度较高:需要同时考虑低秩分解和量化两方面的因素。 #### 3. 应用场景 - **Lora 的典型应用** - 小样本学习:当数据量有限时,Lora 可以有效避免过拟合问题。 - 大规模模型微调:对于包含数十亿参数的大模型,Lora 提供了一种高效的微调方案。 - **Qlora 的典型应用** - 移动端应用:在智能手机或其他嵌入式设备上运行复杂的 AI 模型。 - 边缘计算:在物联网设备中实现实时推理功能。 - 高性能推理:需要快速响应时间的应用场景,例如自动驾驶系统中的目标检测。 ```python # 示例代码:如何在 PyTorch 中实现 Lora 微调 import torch from transformers import AutoModelForCausalLM, LoraConfig model = AutoModelForCausalLM.from_pretrained("bigscience/bloom") lora_config = LoraConfig( r=16, # 秩大小 lora_alpha=32, lora_dropout=0.05, target_modules=["q_proj", "v_proj"] # 需要插入 Lora 的模块 ) model = model.get_peft_model(lora_config) # 示例代码:如何在 PyTorch 中实现 Qlora 微调 from bitsandbytes.nn import Int8Params for param in model.parameters(): if param.ndim == 2: param.data = Int8Params(param.data).to(param.device) # 量化处理 ``` #### 总结 LoraQlora 各有其独特的优势和适用范围。如果追求更高的参数效率和更广泛的兼容性,可以选择 Lora;而若希望在资源受限环境下部署高性能模型,则 Qlora 是更好的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值