Parameter-Efficient Fine-Tuning
Parameter-Efficient Fine-Tuning (PEFT) は、全パラメータを更新せず、ごく一部だけ追加・更新 することで、LLM を fine-tune する手法群です。LoRA、QLoRA、Adapter、Prompt tuning などが含まれます。
なぜ必要か
LLM 全パラメータの fine-tuning には、
- 巨大な GPU メモリ
- 大きな optimizer state (Adam の場合、parameter の 2 倍以上)
- ストレージ (タスクごとに数十〜数百 GB の checkpoint)
が必要です。PEFT はこれらを大幅に削減し、消費 GPU 1 枚でも 70B 級モデルを fine-tune できるようにしました。
LoRA
LoRA (Low-Rank Adaptation) は、各 weight matrix に対して、低ランク行列の積で更新分を表します。
ここで、、、。
- Frozen な はそのまま
- と だけを学習
- パラメータ数を 倍程度に削減 (典型的に r=8〜64)
- 推論時には を merge して overhead ゼロ
QLoRA
QLoRA は、
- Base model を 4-bit 量子化 して memory を削減
- その上に LoRA adapter を載せて学習
- NF4 量子化、double quantization、paged optimizers を組合せ
という構成です。これにより、消費 GPU 1 枚で 65B モデルの fine-tune が現実的になりました。
Adapter / Prompt tuning
LoRA の他にも、
| 手法 | 追加するもの |
|---|---|
| Adapter | 各層に小 bottleneck MLP を挿入 |
| Prefix tuning | 各層の attention に学習可能な prefix を挿入 |
| Prompt tuning | Embedding に学習可能な soft prompt を加える |
| IA3 | Activation を学習スカラーで rescale |
があります。LoRA / QLoRA が現状もっとも普及しています。
いつ使うか
| 状況 | 推奨 |
|---|---|
| GPU が限られている | QLoRA |
| 複数タスクを 1 base から派生 | LoRA |
| 推論レイテンシ重視 | LoRA (merge 可能) |
| 大幅な domain shift | Full fine-tuning |
| 推論時に複数 adapter を切替 | LoRA + adapter switching |
数式で見る LoRA の低ランク更新
LoRA は、元の weight matrix を固定し、更新分だけを低ランク行列の積で表します。
Forward は次のように書けます。
ここで、 は rank、 は LoRA scaling です。学習する parameter 数は、full fine-tuning の に対し、LoRA では です。
\frac{\#\mathrm{LoRA}}{\#\mathrm{Full}}=rac{r(d_{in}+d_{out})}{d_{in}d_{out}}この式の気持ちは、「大きな重み全体を動かすのではなく、その更新方向が低ランク部分空間にあると仮定し、小さな adapter だけを学習する」というものです。Rank を上げるほど表現力は増えますが、memory と overfitting risk も増えます。
関連ページ
主なソース
- LoRA: https://arxiv.org/abs/2106.09685
- QLoRA: https://arxiv.org/abs/2305.14314
- Adapter (Houlsby): https://arxiv.org/abs/1902.00751
- Prefix tuning: https://arxiv.org/abs/2101.00190
- Hugging Face PEFT: https://github.com/huggingface/peft