Microsoft LoRA 是微軟開源的一個 Python 庫,實現了 "LoRA: Low-Rank Adaptation of Large Language Models"(大語言模型的低秩適應)技術。該項目為大語言模型的高效微調提供了革命性的解決方案。
項目地址: https://github.com/microsoft/LoRA
論文地址: https://arxiv.org/abs/2106.09685
LoRA(Low-Rank Adaptation)是一種參數高效的微調方法,其核心思想是:
在 GLUE 基準測試中,LoRA 展現了出色的性能:
模型 | 訓練參數數量 | MNLI 準確率 | SST-2 準確率 | MRPC 準確率 |
---|---|---|---|---|
RoBERTa Base 全量微調 | 125M | 87.6 | 94.8 | 90.2 |
RoBERTa Base LoRA | 0.8M | 87.6±.1 | 95.1±.2 | 89.7±.7 |
DeBERTa XXL 全量微調 | 1.5B | 91.1 | 96.8 | 92.9 |
DeBERTa XXL LoRA | 4.7M | 91.9±.1 | 96.9±.2 | 92.6±.6 |
在 E2E、DART、WebNLG 等文本生成任務上,LoRA 同樣表現優異:
方法 | 訓練參數 | E2E (BLEU) | DART (BLEU) | WebNLG (BLEU) |
---|---|---|---|---|
GPT-2 M 全量微調 | 354.92M | 68.2 | 46.0 | 47.6 |
GPT-2 M LoRA | 0.35M | 70.4±.1 | 47.1±.2 | 55.3±.2 |
microsoft/LoRA/
├── loralib/ # 核心庫源代碼
├── examples/
│ ├── NLG/ # GPT-2 自然語言生成示例
│ └── NLU/ # RoBERTa/DeBERTa 自然語言理解示例
├── README.md
└── setup.py
pip install loralib
# 或者從源碼安裝
pip install git+https://github.com/microsoft/LoRA
# ===== 修改前 =====
# layer = nn.Linear(in_features, out_features)
# ===== 修改後 =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)
import loralib as lora
model = BigModel()
# 只將包含 "lora_" 的參數設為可訓練
lora.mark_only_lora_as_trainable(model)
# 訓練循環
for batch in dataloader:
# 正常訓練流程
pass
# 保存 LoRA 參數
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')
# 加載預訓練模型
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# 加載 LoRA 參數
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)
目前 LoRA 庫支持以下層類型:
nn.Linear
→ lora.Linear
nn.Embedding
→ lora.Embedding
nn.Conv2d
→ lora.Conv2d
lora.MergedLinear
(用於 QKV 投影等合併線性層)# 對於 QKV 投影等場景
qkv_proj = lora.MergedLinear(
d_model, 3*d_model,
r=8,
enable_lora=[True, False, True] # 只對 Q 和 V 應用 LoRA
)
# 訓練 LoRA 相關的偏置
lora.mark_only_lora_as_trainable(model, bias='lora_only')
# 訓練所有偏置
lora.mark_only_lora_as_trainable(model, bias='all')
# 評估模式:合併權重,消除推理延遲
model.eval()
# 訓練模式:恢復分離狀態
model.train()
Microsoft LoRA 項目為大語言模型的高效微調提供了突破性解決方案。通過巧妙的低秩適應技術,在大幅降低計算和存儲成本的同時,保持了優異的模型性能。該項目不僅具有重要的學術價值,更為實際的工業應用提供了可行的技術路徑,是參數高效微調領域的里程碑式工作。