**LoRA = Low‑Rank Adaptation**
它是一种**参数高效微调(PEFT)**方法,由 Microsoft 在 2021 年提出,专门用来把大模型的“迁移成本”降到传统全参微调的千分之一甚至万分之一。核心思想是:
W′ = W + BA,A∈Rr×d, B∈Rd×r, r≪d\mathbf W' \;=\; \mathbf W\;+\;\mathbf B\mathbf A, \qquad \mathbf A\in\mathbb R^{r\times d},\; \mathbf B\in\mathbb R^{d\times r},\; r\ll d
> • 冻结预训练权重 W\mathbf W;
> • 只训练两个低秩矩阵 A,B\mathbf A,\mathbf B(秩 _r_ 很小,通常 4–16);
> • 推理时把 BA\mathbf B\mathbf A 与原权重相加即可,不引入额外延迟。([arxiv.org](https://arxiv.org/abs/2106.09685?utm_source=chatgpt.com "LoRA: Low-Rank Adaptation of Large Language Models"))
相较于全参微调,LoRA **可将可训练参数减少 10 000 ×、显存占用减少 3 ×**,而在 GPT‑3、RoBERTa 等模型上的效果与全参持平甚至更好。([arxiv.org](https://arxiv.org/abs/2106.09685?utm_source=chatgpt.com "LoRA: Low-Rank Adaptation of Large Language Models"))
---
# 为什么 `llama3_lora_sft.yaml` 里有 “lora”?
在 **LLaMA‑Factory** 中,示例 YAML 的命名规则一般是
```Java
<模型简称>_<微调算法>_<任务>.yaml
```
|片段|含义|
|---|---|
|`llama3`|以 Meta‑Llama‑3 系列为基础模型|
|`lora`|使用 **LoRA** 作为微调算法|
|`sft`|所做任务是 _Supervised Fine‑Tuning_|
打开官方文档给出的范例文件可以看到关键信息:
```yaml
stage: sft
finetuning_type: lora # 指定使用 LoRA
lora_target: all # 给哪些线性层插 LoRA,默认 all
```
([aidoczh.com](https://www.aidoczh.com/llamafactory/en/getting_started/sft.html "SFT 训练 - LLaMA Factory"))
---
# YAML 中与 LoRA 相关的常见字段
|字段|作用|常见取值|
|---|---|---|
|`finetuning_type`|选择算法|`lora` / `qlora` / `full` / `freeze`|
|`lora_target`|在哪些层注入 LoRA|`all` / `q_proj,v_proj,...`|
|`lora_rank`|秩 _r_|4 – 32,显存越低可适当取小|
|`lora_alpha`|缩放系数 α\alpha|16 或 32(影响学习率尺度)|
|`lora_dropout`|随机失活率|0 – 0.1,防过拟合|
> **调参提示**:显存紧张时优先降低 `lora_rank` 或只给注意力/FFN 层上 LoRA,而不是一味减 batch size。
---
# LoRA 与 QLoRA、全参微调的区别
|方案|训练参数量|显存占用|推理速度|典型场景|
|---|---|---|---|---|
|Full FT|100 %|100 %|不变|研究机构、有数百 GB 显存|
|**LoRA**|0.1 % – 1 %|↓60 % 左右|无额外开销|单卡 24 GB GPU 就能调 8 B 模型|
|**QLoRA**|同 LoRA,但基座 4‑bit 量化|再省 40 % 显存|略有量化开销|显存 ≤ 12 GB 的消费级 GPU|
---
# LoRA 在 LLaMA‑Factory 的完整闭环
1. **训练**
```bash
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
```
2. **验证/推理**
```bash
llamafactory-cli chat examples/inference/llama3_lora_sft.yaml
```
3. **合并权重(可选,部署更方便)**
```bash
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml \
adapter_name_or_path=saves/llama3-8b/lora/sft \
output_dir=saves/llama3-8b/merged/sft
```
如此,你只需保存几百 MB 的 LoRA 适配器文件,就能把 80 GB 的大模型“定制”为你的专用版本;需要“打包”时再一键合并成完整权重即可。