LoRA(ローラ)
Low-Rank Adaptation の略。LLM の全パラメータを更新せず、低ランク行列の積を注入して効率的にファインチューニングする手法。学習パラメータ数を 99% 以上削減しながら同等の性能を実現する。
LoRA とは
LoRA(Low-Rank Adaptation of Large Language Models)は、Microsoft Research の Hu et al. が 2021 年に発表した PEFT(Parameter Efficient Fine-Tuning)手法です。
LLM を特定のタスク向けにファインチューニングする際、全パラメータを更新するフルファインチューニングでは A100 80GB × 8枚以上のリソースが必要です。LoRA は重み行列を低ランク行列の積で近似することで、学習パラメータ数を 99% 以上削減し、コンシューマー GPU(RTX 4090 24GB)でも 13B〜70B モデルのファインチューニングを可能にしました。
主な特徴・仕組み
- 低ランク行列: 元の重み行列 W(d×k)の代わりに A(d×r)と B(r×k)を学習(r << d,k)
- 推論時の結合: W' = W + α/r * BA として元の行列に加算(速度低下なし)
- ランク設定: r=4〜16 が一般的(r=4 で 99.9% パラメータ削減)
- スケーリング: α(ハイパーパラメータ)で LoRA の影響度を調整
- 適用レイヤー: Attention の Q, V 行列のみ更新(PEFT 効率化の鍵)
フルファインチューニング vs LoRA 比較
| 項目 | フルファインチューニング | LoRA (r=16) |
|---|---|---|
| 更新パラメータ | 全体(7B〜175B) | 0.1〜1% |
| VRAM(7B モデル) | 約 112 GB(A100×2) | 約 16 GB(RTX 4090) |
| 学習時間(7B、1万件) | 約 8 時間 | 約 1 時間 |
| 性能(特定タスク) | ベースライン 100% | 95〜99% |
| ストレージ | 14 GB(fp16) | 50〜200 MB |
Rank 別パラメータ削減率(LLaMA 3 8B の場合)
| LoRA Rank r | 学習パラメータ | 削減率 | 適用ユースケース |
|---|---|---|---|
| r=1 | 約 200万 | 99.98% | 単純なスタイル変換 |
| r=4 | 約 800万 | 99.90% | ドメイン適応 |
| r=16 | 約 3,200万 | 99.60% | タスク特化 |
| r=64 | 約 1.3億 | 98.4% | 複雑なタスク |
| フル | 80億 | 0% | 最大性能が必要な場合 |
実装例(Hugging Face PEFT)
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Meta-Llama-3-8B",
torch_dtype=torch.float16,
device_map="auto"
)
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.1,
bias="none",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 3,670,016 || all params: 8,033,669,120 || trainable%: 0.0457
LoRA の派生手法
- QLoRA: 4bit 量子化 + LoRA(単一 RTX 4090 で 65B モデルのファインチューニング可能)
- DoRA: 重みを magnitude + direction に分解して LoRA を適用(精度向上)
- LoRA+: A と B の学習率を異なる値に設定(2024 年提案、収束速度向上)
- VeRA: LoRA の A と B を共有してさらにパラメータ削減
よくある質問(FAQ)
Q1: LoRA と Stable Diffusion の LoRA は同じですか? A: 原理は同じですが、Stable Diffusion の LoRA は U-Net と CLIP の Attention レイヤーに適用し、キャラクター・スタイル・概念を追加学習します。LLM LoRA と数式は共通です。
Q2: LoRA のランク r はどう選べばいいですか? A: 単純なスタイル変換なら r=4、ドメイン適応なら r=8〜16、複雑なタスク(コード生成等)なら r=32〜64 が目安です。
Q3: 複数の LoRA を同時に使えますか? A: 重み行列への加算なので複数 LoRA を数学的に合成できます(LoRA Merge)。ただし干渉が起きることもあるため、性能確認が必要です。
まとめ
- 重み行列を低ランク行列の積で近似し、学習パラメータを 99% 削減するファインチューニング手法
- RTX 4090 1 枚で 13B〜70B モデルのファインチューニングが可能
- Stable Diffusion・LLaMA・Mistral 等で広く採用され、PEFT の事実上の標準
- QLoRA・DoRA・LoRA+ など多数の派生手法が 2023-2025 年に続々登場