PEFT documentation
Llama-Adapter
Llama-Adapter

Llama-Adapterは、Llamaを指示追従モデルに変換するために特化して設計されたPEFT手法です。Llamaモデルは凍結され、入力される指示トークンの前に付加される適応プロンプトのセットのみが学習されます。モデル内に挿入されたランダム初期化されたモジュールが、モデルの既存の知識の一部を喪失させる可能性があるため、Llama-Adapterはゼロ初期化されたアテンションとゼロゲーティングを用いて、指示プロンプトを段階的にモデルに追加します。
論文の抄録は以下の通りです:
LLaMA-Adapterは、LLaMAを効率的にファインチューニングして指示追従モデルに変換するための軽量な適応手法です。52Kのセルフインストラクトデモを用いることで、凍結されたLLaMA 7Bモデルに対して学習可能なパラメータをわずか1.2Mのみ追加し、8枚のA100 GPU上で1時間未満でファインチューニングを完了します。具体的には、学習可能な適応プロンプトのセットを採用し、より上位のトランスフォーマー層において入力テキストトークンの先頭に付加します。その後、ゼロ初期化されたゼロゲーティング付きアテンション機構を提案し、事前学習済みの知識を効果的に保持しつつ、LLaMAに新しい指示キューを適応的に注入します。効率的なトレーニングにより、LLaMA-Adapterは、7Bパラメータを完全にファインチューニングしたAlpacaと同等の高品質な応答を生成します。さらに、本手法は画像などのマルチモーダル入力に簡単に拡張でき、画像条件付きLLaMAとして、ScienceQAで優れた推論能力を発揮します。コードはhttps://github.com/ZrrSkywalker/LLaMA-Adapterで公開しています。
Llama-Adapterを使用するタイミング
Llama-Adapterは、次のような場合に優れた選択肢です:
- 非常に小さなチェックポイントが必要です。学習および保存されるのはアダプタプロンプトとそのゲートのみで、パラメータ数は
adapter_layers * (adapter_len * hidden_size + 1)に相当します。 - サポートされているモデル(Llama、Mistral、GPT-2)のインストラクションチューニングを実行している場合、これは論文が焦点を当てているユースケースです。
- 同じベースモデルに対して複数のタスク固有のアダプターを保持し、
set_adapterでそれらを切り替えたい場合
Llama-Adapterを使用しない場合
Llama-Adapterが最適な選択ではない場合:
- モデルがLlama、Mistral、GPT-2のいずれでもない場合、他のアーキテクチャでは
ValueErrorが発生します。代わりにLoRAを検討してください。 - 推論時のオーバーヘッドがゼロである必要があります。アダプターはベースの重みにマージできません(
merge_and_unload()はサポートされていません)。そのため、推論時には各アダプター付きレイヤーがadapter_len個の追加トークンにアテンションを向けることになります。 - 複数のアダプタを同時にアクティブにしたい場合があります。ただし、アクティブにできるアダプタは1つのみであり、同一のattentionモジュールにadaptionプロンプトをスタックすることはできません。
ベンチマーク概要
API
AdaptionPromptConfig
クラス peft.AdaptionPromptConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetarget_modules: str = Noneadapter_len: int = Noneadapter_layers: int = None )
AdaptionPromptModelの設定を保存します。
AdaptionPromptModel
https://huggingface.co/papers/2303.16199 に記載されているアダプテーションプロンプトを実装します。
上位のL個のattentionモジュールは、元のモジュールをラップするAdaptedAttentionモジュールに置き換えられますが、ゼロ初期化用のゲートを備えた学習可能なプロンプトを挿入します。
マルチアダプターパターンに関する注記:
- 異なるアダプタの状態は、アダプタ名をキーとするAdaptedAttentionモジュールの辞書を保持することで保存します。
- アダプターを切り替えるたびに、現在アクティブなアダプターのモジュールをモデルから削除し、辞書に保存してから、新しいアダプターのモジュールに置き換えます。
- 重複し、潜在的に不一致が生じる状態を回避するため、現在アクティブなアダプターは常に辞書から削除されます。
- アダプターを無効にすると、モジュールがモデルから削除されます。
指定された名前と設定でアダプターを追加します。
指定された名前のアダプターを削除します。
AdaptedAttentionモジュールを差し替えることで、アダプターレイヤーを無効にします。
AdaptedAttentionモジュールをキャッシュから読み込んで差し替えることで、アダプタ層を有効にします。
指定された名前のアダプターを使用するようにモデルを設定します。