微调技术可以以最小的计算资源将预训练语言模型适应于特定任务或领域。本页重点介绍低秩适配(LoRA)的实现,这是一种参数高效的微调方法,位于 labml_nn 存储库中。
传统上,微调大型语言模型需要大量的计算资源,因为需要更新所有模型参数。LoRA 等参数高效微调方法通过仅训练一小部分参数并将原始模型权重冻结大部分来减少此计算负担。
来源: labml_nn/lora/__init__.py1-22 labml_nn/lora/experiment.py1-12
LoRA,在论文 LoRA: Low-Rank Adaptation of Large Language Models 中提出,通过向冻结的预训练权重添加可训练的低秩矩阵来实现。
如果我们有一个预训练的权重矩阵 $W_0 \in \mathbb{R}^{d \times k}$,LoRA 将更新参数化为
$W_0 + \Delta W = W_0 + BA$
其中
来源: labml_nn/lora/__init__.py28-45
该实现包括两种主要的 LoRA 模块类型
两个模块都维护原始冻结权重,同时添加可训练的低秩矩阵。
来源: labml_nn/lora/__init__.py28-151
该 Linear 类通过添加低秩适配来替换标准的线性层
主要实现细节
self.weight)通过 requires_grad = False 保持冻结lora_a 和 lora_b 构成了低秩分解lora_b 被设置为零,以便 $\Delta W = BA$ 最初为零result = nn.functional.linear(x, self.weight) + (x @ self.lora_a.T @ self.lora_b.T) * self.scaling来源: labml_nn/lora/__init__.py28-98
该 Embedding 类将相同的概念应用于 embedding 层
主要实现细节
result = nn.functional.embedding(x, self.weight) + (nn.functional.embedding(x, self.lora_a.T) @ self.lora_b.T) * self.scaling来源: labml_nn/lora/__init__.py101-151
该存储库在 GPTModel 类中演示了 LoRA 与 GPT-2 的集成
集成用 LoRA 启用版本替换了标准的 PyTorch 层
EmbeddingLinearLinearLinear来源: labml_nn/lora/gpt2.py19-192
微调过程涉及几个步骤
Trainer 类使用 LoRA 层初始化 GPT-2 模型
来源: labml_nn/lora/experiment.py119-136
_load_pretrained_weights 方法从 HuggingFace 加载预训练的 GPT-2 权重
AutoModelForCausalLM.from_pretrained("gpt2") 加载原始模型strict=False 加载权重,允许缺失 LoRA 参数来源: labml_nn/lora/experiment.py64-117
Trainer 类中的 run 方法处理训练循环
来源: labml_nn/lora/experiment.py143-169
使用 Adam 优化器,并具有可配置的学习率,仅优化可训练的 LoRA 参数
来源: labml_nn/lora/experiment.py138
该实现提供了几个可配置参数
| 参数 | 描述 | 默认值 |
|---|---|---|
lora_r | LoRA 矩阵的秩 | 32 |
d_model | 模型 embedding 维度 | 768 (GPT-2) |
n_layers | Transformer 层数 | 12 (GPT-2) |
n_heads | 注意力头的数量 | 12 (GPT-2) |
learning_rate | 优化器的学习率 | 1e-4 |
batch_size | 训练批次大小 | 32 |
epochs | 训练轮数 | 10 |
来源: labml_nn/lora/experiment.py32-49
在 experiment.ipynb 笔记本中提供了使用 LoRA 微调 GPT-2 的完整示例
pip install labml-nnTrainer 类来源: labml_nn/lora/experiment.ipynb1-74
参数效率:显著减少了可训练参数的数量
内存效率:训练时需要的 GPU 内存更少
训练稳定性:通常能实现更稳定的微调
模型组合:可以组合或切换多个 LoRA 适配
来源: labml_nn/lora/__init__.py1-22 labml_nn/lora/experiment.py1-12
LoRA 在其他微调方法方面具有多项优势
| 技术 | 参数效率 | 训练稳定性 | 实现复杂度 |
|---|---|---|---|
| 全微调 | 低 | 中等 | 低 |
| LoRA | 高 | 高 | 中等 |
| Adapter Layers | 中等 | 中等 | 中等 |
| Prompt Tuning | 非常高 | 低 | 高 |
该存储库目前侧重于 LoRA,但可以在相同的架构内改编为其他技术。
此存储库中的 LoRA 实现为微调 GPT-2 等大型语言模型提供了一种有效的方法。通过添加可训练的低秩矩阵同时保持原始权重冻结,它显著降低了计算要求,同时保持了模型性能。
未来的扩展可以包括其他参数高效的微调技术或与更多模型架构的集成。
来源: labml_nn/lora/__init__.py labml_nn/lora/experiment.py labml_nn/lora/gpt2.py
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(90e21b)