🤗 PEFT - パラメータ効率的ファインチューニングライブラリ詳細
プロジェクト概要
PEFT (Parameter-Efficient Fine-Tuning) は、Hugging Faceによって開発された、最先端のパラメータ効率的ファインチューニングライブラリです。このプロジェクトは、大規模な事前学習済みモデルのファインチューニングにおける計算コストの高さと、ストレージ要件の巨大さという問題を解決することを目的としています。
GitHubアドレス: https://github.com/huggingface/peft
コアバリューとメリット
1. コスト効率
- 計算コストを大幅に削減:従来の全パラメータファインチューニングと比較して、PEFTメソッドはモデルパラメータのごく一部のみを訓練します。
- ストレージ要件を大幅に削減:ファインチューニング後のモデルチェックポイントファイルは通常、数GBではなく数MBです。
- メモリ使用量の最適化:同じハードウェア条件下で、より大きなモデルを処理できます。
2. 性能維持
- 全パラメータファインチューニングに匹敵:ほとんどのタスクで、完全なファインチューニングに匹敵するパフォーマンスを実現します。
- 壊滅的な忘却の回避:基礎モデルの元の知識を保護し、過学習のリスクを軽減します。
3. 柔軟性と利便性
- マルチタスク対応:さまざまなタスクに対して、複数の軽量アダプターを訓練できます。
- シームレスな統合:Transformers、Diffusers、Accelerateなどのエコシステムと完全に統合されています。
サポートされているファインチューニング方法
主要なPEFT技術
- LoRA (Low-Rank Adaptation)
- 最も人気のあるパラメータ効率的ファインチューニング方法
- 低ランク行列分解により、訓練可能なパラメータを大幅に削減します。
- 典型的なシナリオでは、元のパラメータの0.1%〜1%のみを訓練します。
- AdaLoRA
- LoRAの改良版
- 適応的にランクサイズを調整し、効率をさらに最適化します。
- Prefix Tuning
- 入力シーケンスの前に学習可能なプレフィックスを追加します。
- 生成タスクに適しています。
- P-Tuning v2
- 改良されたプロンプトチューニング方法
- 複数のレイヤーに学習可能なパラメータを追加します。
- IA³ (Infused Adapter by Inhibiting and Amplifying Inner Activations)
- 内部アクティベーションを抑制および増幅することにより、モデルを適応させます。
実際のアプリケーション効果
メモリ使用量の比較 (A100 80GB GPU)
モデル |
全パラメータファインチューニング |
PEFT-LoRA |
PEFT-LoRA + DeepSpeed CPUオフロード |
T0_3B (30億パラメータ) |
47.14GB GPU / 2.96GB CPU |
14.4GB GPU / 2.96GB CPU |
9.8GB GPU / 17.8GB CPU |
mt0-xxl (120億パラメータ) |
メモリ不足 |
56GB GPU / 3GB CPU |
22GB GPU / 52GB CPU |
bloomz-7b1 (70億パラメータ) |
メモリ不足 |
32GB GPU / 3.8GB CPU |
18.1GB GPU / 35GB CPU |
性能表現
Twitterの苦情分類タスクにおける精度比較:
- 人間のベースライン:89.7%
- Flan-T5:89.2%
- LoRA-T0-3B:86.3%
インストールとクイックスタート
インストール
pip install peft
基本的な使用例
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
# PEFTの設定
model_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig(
task_type=TaskType.SEQ_2_SEQ_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
# モデルのロードとラッピング
model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
# 訓練可能なパラメータの確認
model.print_trainable_parameters()
# 出力:trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19
推論の使用
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
# ファインチューニング後のモデルのロード
model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora").to("cuda")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
# 推論の実行
model.eval()
inputs = tokenizer("あなたの入力テキスト", return_tensors="pt")
outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
エコシステム統合
1. Transformers統合
- さまざまな事前学習済みモデルアーキテクチャをサポート
- シームレスなトレーニングと推論のフロー
- 自動モデル構成と最適化
2. Diffusers統合
- 拡散モデルの効率的なファインチューニングをサポート
- 画像生成、編集などのタスクに適しています。
- トレーニングメモリ要件を大幅に削減
3. Accelerate統合
- 分散トレーニングをサポート
- マルチGPU、TPUトレーニングの最適化
- コンシューマーグレードのハードウェアに優しい
4. TRL (Transformer Reinforcement Learning)統合
- RLHF (人間のフィードバックによる強化学習) をサポート
- DPO (直接選好最適化)
- 大規模モデルのアライメントトレーニング
アプリケーションシナリオ
1. 大規模言語モデルのファインチューニング
- 指示ファインチューニング
- 対話システムの最適化
- 特定のドメインへの適応
2. マルチモーダルモデル
- 視覚-言語モデルのファインチューニング
- 音声処理モデルの適応
3. 拡散モデル
- Stable Diffusionのパーソナライズ
- DreamBoothトレーニング
- スタイル変換
4. 強化学習
- 戦略モデルのファインチューニング
- 報酬モデルのトレーニング
- 人間の選好のアライメント
技術的な利点と革新的な点
1. パラメータ効率
- 元のパラメータの0.1%〜1%のみを訓練
- 95%以上のパフォーマンスを維持
- チェックポイントファイルを元の1/100に縮小
2. メモリ最適化
- GPUメモリ要件を大幅に削減
- コンシューマーグレードのハードウェアでの大規模モデルのトレーニングをサポート
- 勾配チェックポイントによるメモリのさらなる最適化
3. 量子化互換性
- 8bit、4bit量子化と完全に連携
- QLoRA技術をサポート
- ハードウェアの敷居をさらに下げる
4. モジュール設計
- さまざまなPEFTメソッドをサポート
- 柔軟な構成オプション
- 新しいメソッドの拡張が容易
コミュニティとエコシステム
公式リソース
まとめ
🤗 PEFTは、大規模モデルのファインチューニングのコスト問題を解決するだけでなく、優れたパフォーマンスを維持する革新的なパラメータ効率的ファインチューニングライブラリです。研究者であろうと産業界の開発者であろうと、PEFTは経済的で効率的な大規模モデルのカスタマイズソリューションを提供し、AI技術の民主化を推進します。