Home
Login

Microsoftがオープンソースで公開しているLoRAライブラリ。大規模言語モデルの低ランク適応技術を実装し、モデルの微調整時の学習パラメータを大幅に削減します。

MITPython 12.1kmicrosoftLoRA Last Updated: 2024-12-17

Microsoft LoRA プロジェクトの詳細

プロジェクト概要

Microsoft LoRA は、マイクロソフトがオープンソースで公開している Python ライブラリで、"LoRA: Low-Rank Adaptation of Large Language Models"(大規模言語モデルの低ランク適応)技術を実装しています。このプロジェクトは、大規模言語モデルの効率的なファインチューニングに革新的なソリューションを提供します。

プロジェクトアドレス: https://github.com/microsoft/LoRA

論文アドレス: https://arxiv.org/abs/2106.09685

核心技術原理

LoRA 技術概要

LoRA(Low-Rank Adaptation)は、パラメータ効率の高いファインチューニング手法であり、その核心的な考え方は以下の通りです。

  • 元の事前学習済み重みを凍結:元のモデルパラメータは変更しません。
  • 低ランク分解行列を追加:低ランク行列のペアを学習することでモデルを適応させます。
  • 訓練パラメータを大幅に削減:新たに追加された低ランク行列パラメータのみを訓練します。

技術的優位性

  1. 非常に高いパラメータ効率
  • GPT-3 175B のフルファインチューニングと比較して、LoRA は訓練パラメータを 10,000 分の 1 に削減できます。
  • GPU メモリの必要量を 3 分の 1 に削減します。
  1. 優れた性能を維持
  • RoBERTa、DeBERTa、GPT-2、GPT-3 でフルファインチューニングと同等またはそれ以上の性能を発揮します。
  • GLUE ベンチマークテストで優れた成果を上げています。
  1. デプロイが容易
  • 推論時の遅延は発生しません。
  • 効率的なタスク切り替えをサポートします。
  • ストレージ要件を大幅に削減します。

性能表現

GLUE ベンチマークテスト結果

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

GPT-2 テキスト生成タスク

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

基本的な使用例

1. 線形層の置換
# ===== 変更前 =====
# layer = nn.Linear(in_features, out_features)

# ===== 変更後 =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)
2. 訓練可能なパラメータのマーク
import loralib as lora

model = BigModel()
# "lora_" を含むパラメータのみを訓練可能に設定
lora.mark_only_lora_as_trainable(model)

# 訓練ループ
for batch in dataloader:
    # 通常の訓練フロー
    pass
3. チェックポイントの保存とロード
# 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.Linearlora.Linear
  • nn.Embeddinglora.Embedding
  • nn.Conv2dlora.Conv2d
  • lora.MergedLinear(QKV 投影などの結合線形層用)

高度な機能

1. 結合線形層のサポート

# QKV 投影などのシナリオ向け
qkv_proj = lora.MergedLinear(
    d_model, 3*d_model, 
    r=8, 
    enable_lora=[True, False, True]  # Q と V にのみ LoRA を適用
)

2. バイアスベクトルの訓練

# LoRA 関連のバイアスを訓練
lora.mark_only_lora_as_trainable(model, bias='lora_only')

# すべてのバイアスを訓練
lora.mark_only_lora_as_trainable(model, bias='all')

3. 推論時の重みマージ

# 評価モード:重みをマージし、推論遅延を解消
model.eval()

# 訓練モード:分離状態に戻す
model.train()

応用シーン

  1. 大規模モデルのファインチューニング:ファインチューニングコストを大幅に削減
  2. マルチタスク学習:効率的なタスク切り替え
  3. リソース制約のある環境:メモリとストレージの必要量を削減
  4. 迅速なプロトタイプ開発:モデル適応プロセスを加速

エコシステム統合

  • Hugging Face PEFT:HF の PEFT ライブラリに統合済み
  • PyTorch エコシステム:PyTorch フレームワークと完全に互換性があります。
  • 事前学習済みモデル:さまざまな主要な事前学習済みモデルをサポートします。

まとめ

Microsoft LoRA プロジェクトは、大規模言語モデルの効率的なファインチューニングに画期的なソリューションを提供します。巧妙な低ランク適応技術により、計算コストとストレージコストを大幅に削減しながら、優れたモデル性能を維持します。このプロジェクトは、重要な学術的価値を持つだけでなく、実際の産業応用にも実行可能な技術的経路を提供し、パラメータ効率の高いファインチューニング分野における画期的な成果です。

Star History Chart