AI・機械学習
上級

LoRA(Low-Rank Adaptation)(ローラ)

大規模言語モデルのファインチューニングにおいて、元のモデルパラメータを凍結したまま低ランク行列を注入して追加学習する手法。Microsoftが2021年に提案し、VRAM使用量と学習時間を大幅に削減しながら高い精度を維持する。

0 回閲覧
0 いいね

LoRA(Low-Rank Adaptation)とは、事前学習済みモデルの重み行列を直接更新するのではなく、低ランクの分解行列(A行列とB行列)を追加して学習する手法である。Edward Hu氏らがMicrosoft Research在籍時に2021年の論文「LoRA: Low-Rank Adaptation of Large Language Models」で提案した。

概要

従来のFull Fine-tuningではモデルの全パラメータ(例: Llama 3.1 8Bで約80億個)を更新するため、大量のVRAMと計算資源が必要だった。LoRAは重み行列W(d×d)に対し、低ランク行列の積 B×A(d×r + r×d、r << d)を加算することで、更新パラメータ数を数百分の1に削減する。

数学的には: W' = W + ΔW = W + B×A(Bはd×r、Aはr×d、rはランク)

ランクrは通常8〜128に設定される。r=16の場合、Llama 3.1 8Bモデルの更新パラメータは約4,000万個(全体の0.5%)に過ぎない。

主な特徴・仕組み

  • パラメータ効率: 全パラメータの0.1〜1%のみを学習。7Bモデルで更新パラメータは数千万個
  • VRAM削減: Full FTの1/3〜1/4のVRAMで済む。7Bモデルが16GB VRAMで学習可能
  • 学習速度: Full FTの2〜3倍高速。勾配計算の対象が少ないため
  • 精度維持: Full FTの95〜99%の精度を維持。多くのベンチマークで同等性能
  • アダプタ交換: ベースモデルを共有し、タスク別のLoRAアダプタを切り替え可能
  • マージ可能: 学習後にアダプタをベースモデルにマージして推論オーバーヘッドゼロ化
  • 適用層選択: Attention層(Q, K, V, O)に適用するのが標準。MLP層への適用も効果的
  • スケーリング係数α: α/rでアダプタの影響度を制御。α=16〜32が一般的

LoRAの主要パラメータ設定ガイド

パラメータ推奨値説明
rank (r)8-64低ランク行列の次元。大きいほど表現力増、VRAM増
alpha (α)r×1〜r×2スケーリング係数。α=2rが安定的
target_modulesq_proj, v_proj, k_proj, o_proj適用対象の線形層
dropout0.05-0.1LoRA層のドロップアウト率
learning_rate1e-4〜5e-4Full FTより10倍程度高く設定可能
epochs1-3過学習防止のため少なめに

発展手法:LoRAの派生技術

LoRAの成功を受け、多数の改良手法が提案されている:

  • QLoRA(2023): 4bit量子化 + LoRA。VRAM使用量をさらに50%削減
  • DoRA(2024): 重みの方向と大きさを分離して学習。LoRAより1-3%精度向上
  • LoRA+(2024): A行列とB行列に異なる学習率を設定。収束速度2倍
  • rsLoRA(2024): ランクに応じたスケーリング補正。高ランクでの安定性向上
  • GaLore(2024): 勾配の低ランク射影。事前学習にも適用可能
  • Turbo LoRA(2025): バッチ処理最適化で学習スループット3倍

実装例:Unslothでの7Bモデル LoRA学習

from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/Meta-Llama-3.1-8B",
    max_seq_length=2048,
    load_in_4bit=True,  # QLoRA
)
model = FastLanguageModel.get_peft_model(
    model, r=16, lora_alpha=32,
    target_modules=["q_proj","k_proj","v_proj","o_proj"],
    lora_dropout=0.05,
)

上記の設定でRTX 4090(24GB)1枚で約1.5時間の学習が可能(データセット5,000件の場合)。

よくある質問(FAQ)

Q1: LoRAのランク(r)はどう選べばよい? A: 一般的なタスクではr=16〜32で十分。複雑なドメイン適応にはr=64〜128を試す。r=8未満は精度低下が目立つ。VRAMに余裕があればr=32から始め、精度とリソースのバランスを見るのが実践的。

Q2: LoRAアダプタのファイルサイズはどのくらい? A: 7Bモデルのr=16 LoRAアダプタは約30〜50MB。ベースモデル(約14GB fp16)と比較して1/300以下。複数のタスク別アダプタを保持しても容量負担は極めて小さい。

Q3: LoRAをマージするメリットは? A: マージ後は通常のモデルと同じ推論速度になり、アダプタ読み込みのオーバーヘッドがゼロ。ただしマージすると他のアダプタとの切り替えができなくなる。本番デプロイ時にマージ、開発時は分離が一般的。

まとめ

  • LoRAはFull FTの0.1〜1%のパラメータで95〜99%の精度を実現する革命的手法
  • VRAM 16GBで7Bモデルの学習が可能。個人GPU環境でのLLMカスタマイズを民主化
  • r=16〜32、α=2r、Attention全層適用が安定した出発点
  • QLoRA、DoRA、LoRA+など後続改良が活発。2026年もPEFTの主流手法であり続けている