? PEFT
最先端のパラメータ効率の良い微調整 (PEFT) 手法
大規模な事前トレーニング済みモデルの微調整は、その規模のせいで法外なコストがかかることがよくあります。パラメーター効率の良い微調整 (PEFT) 手法を使用すると、モデルのすべてのパラメーターではなく、少数の (追加の) モデル パラメーターのみを微調整することで、大規模な事前トレーニング済みモデルをさまざまな下流アプリケーションに効率的に適応させることができます。これにより、計算コストとストレージ コストが大幅に削減されます。最近の最先端の PEFT 技術は、完全に微調整されたモデルに匹敵するパフォーマンスを実現します。
PEFT は、モデルのトレーニングと推論を簡単にするための Transformers、さまざまなアダプターを便利に管理するための Diffuser、および非常に大きなモデルの分散トレーニングと推論のための Accelerate と統合されています。
ヒント
PEFT 組織にアクセスして、ライブラリに実装されている PEFT メソッドについて読み、これらのメソッドをさまざまな下流タスクに適用する方法を示したノートブックを参照してください。組織ページの「リポジトリを見る」ボタンをクリックすると、新しく実装されたメソッドやノートブックの通知が届きます。
サポートされている PEFT メソッドのリストについては、「PEFT アダプター API リファレンス」セクションを確認し、これらのメソッドの動作の詳細については、アダプター、ソフト プロンプト、および IA3 の概念ガイドを読んでください。
pip から PEFT をインストールします。
pip install peft
基本モデルと PEFT 構成をget_peft_model
でラップすることにより、LoRA などの PEFT メソッドでトレーニングするためのモデルを準備します。 bigscience/mt0-large モデルの場合、トレーニングしているのはパラメーターの 0.19% だけです。
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config , get_peft_model , LoraConfig , TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_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.19151053100118282"
推論のために PEFT モデルをロードするには:
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch
model = AutoPeftModelForCausalLM . from_pretrained ( "ybelkada/opt-350m-lora" ). to ( "cuda" )
tokenizer = AutoTokenizer . from_pretrained ( "facebook/opt-350m" )
model . eval ()
inputs = tokenizer ( "Preheat the oven to 350 degrees and place the cookie dough" , return_tensors = "pt" )
outputs = model . generate ( input_ids = inputs [ "input_ids" ]. to ( "cuda" ), max_new_tokens = 50 )
print ( tokenizer . batch_decode ( outputs , skip_special_tokens = True )[ 0 ])
"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."
PEFT を使用することには多くの利点がありますが、主な利点はコンピューティングとストレージの大幅な節約であり、PEFT をさまざまなユースケースに適用できるようになります。
64 GB 以上の CPU RAM を備えた A100 80 GB GPU を使用して、ought/raft/twitter_complaints データセットで次のモデルをトレーニングするためのメモリ要件を考慮してください。
モデル | 完全な微調整 | PEFT-LoRA PyTorch | CPU オフロードを備えた PEFT-LoRA DeepSpeed |
---|---|---|---|
bigscience/T0_3B (3B パラメータ) | 47.14GB GPU / 2.96GB CPU | 14.4GB GPU / 2.96GB CPU | 9.8GB GPU / 17.8GB CPU |
bigscience/mt0-xxl (12B パラメータ) | OOM GPU | 56GB GPU / 3GB CPU | 22GB GPU / 52GB CPU |
bigscience/bloomz-7b1 (7B パラメータ) | OOM GPU | 32GB GPU / 3.8GB CPU | 18.1GB GPU / 35GB CPU |
LoRA を使用すると、80GB GPU のメモリ不足になる 12B パラメータ モデルを完全に微調整し、3B パラメータ モデルを快適にフィットさせてトレーニングすることができます。 3B パラメーター モデルのパフォーマンスを見ると、GPU メモリの一部で完全に微調整されたモデルに匹敵します。
提出物名 | 正確さ |
---|---|
人間のベースライン (クラウドソーシング) | 0.897 |
フラン-T5 | 0.892 |
lora-t0-3b | 0.863 |
ヒント
bigscience/T0_3B モデルのパフォーマンスは、上の表では最適化されていません。入力命令テンプレート、LoRA ハイパーパラメータ、その他のトレーニング関連のハイパーパラメータを試してみることで、さらにパフォーマンスを絞り出すことができます。このモデルの最終チェックポイント サイズは、完全な bigscience/T0_3B モデルの 11 GB と比較して、わずか 19 MB です。 PEFT を使用した微調整の利点について詳しくは、このブログ投稿をご覧ください。
量子化は、データをより低い精度で表現することにより、モデルのメモリ要件を削減するもう 1 つの方法です。 PEFT メソッドと組み合わせると、推論用の LLM のトレーニングとロードがさらに簡単になります。
PEFT を使用すると、下流のタスクまたはデータセットごとにモデルを完全に微調整する必要がなくなり、ストレージを節約できます。多くの場合、微調整するのはモデルのパラメーターのほんの一部だけであり、各チェックポイントのサイズは (GB ではなく) わずか数 MB です。これらの小型 PEFT アダプターは、完全に微調整されたモデルに匹敵するパフォーマンスを示します。多数のデータセットがある場合、PEFT モデルを使用すると大量のストレージを節約でき、バックボーンやベース モデルの致命的な忘れや過剰適合を心配する必要がなくなります。
PEFT は、トレーニングと推論に大きな効率をもたらすため、Hugging Face エコシステム全体で広くサポートされています。
反復拡散プロセスは大量のメモリを消費するため、トレーニングが困難になる可能性があります。 PEFT は、メモリ要件を削減し、最終モデル チェックポイントのストレージ サイズを削減するのに役立ちます。たとえば、64 GB 以上の CPU RAM を搭載した A100 80 GB GPU で LoRA を使用して安定拡散モデルをトレーニングするために必要なメモリを考えてみましょう。最終モデルのチェックポイント サイズはわずか 8.8MB です。
モデル | 完全な微調整 | PEFT-LoRA | 勾配チェックポイント機能を備えた PEFT-LoRA |
---|---|---|---|
CompVis/安定拡散-v1-4 | 27.5GB GPU / 3.97GB CPU | 15.5GB GPU / 3.84GB CPU | 8.12GB GPU / 3.77GB CPU |
ヒント
Examples/lora_dreambooth/train_dreambooth.py トレーニング スクリプトを参照して、LoRA を使用して独自の安定拡散モデルをトレーニングし、T4 インスタンスで実行されている smangrul/peft-lora-sd-dreambooth スペースを試してみてください。このチュートリアルでは、ディフューザーでの PEFT の統合について詳しく説明します。
Accelerate は、さまざまなトレーニング設定およびハードウェア (GPU、TPU、Apple Silicon など) での分散トレーニングと推論のためのライブラリです。 PEFT モデルはすぐに Accelerate と連携して動作するため、非常に大規模なモデルをトレーニングしたり、リソースが限られているコンシューマ ハードウェアでの推論にモデルを使用したりするのに非常に便利です。
PEFT は、ランカーやポリシーなどの RLHF コンポーネントを使用した LLM のトレーニングにも適用できます。まずは以下を読んでください。
このスペースを使用するか、ドキュメントをチェックして、すぐに PEFT メソッドを正式にサポートしているモデルを見つけてください。以下にモデルが表示されない場合でも、モデル構成を手動で構成してモデルの PEFT を有効にすることができます。その方法については、新しいトランスフォーマー アーキテクチャ ガイドを参照してください。
PEFT に貢献したい場合は、貢献ガイドをご覧ください。
使用するには?出版物で PEFT を使用する場合は、次の BibTeX エントリを使用して引用してください。
@Misc { peft ,
title = { PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods } ,
author = { Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan } ,
howpublished = { url{https://github.com/huggingface/peft} } ,
year = { 2022 }
}