Transformers documentation
PEFT
PEFT
PeftAdapterMixin は、Transformers におけるアダプタの管理に PEFT ライブラリの関数を提供します。このミックスインは、プロンプト学習以外のすべての PEFT メソッド(LoRA、IA3、AdaLoRA など)をサポートしています。プロンプトチューニング手法(プロンプトチューニング、プロンプト学習)は、torch モジュールに注入できないためサポートされていません。
A class containing all functions for loading and using adapters weights that are supported in PEFT library. For more details about adapters and injecting them on a transformer-based model, check out the documentation of PEFT library: https://huggingface.co/docs/peft/index
現在サポートされている PEFT メソッドはすべて、プロンプト学習以外の手法(LoRA、IA³ など)です。プロンプトチューニングやプロンプト学習などの他の PEFT モデルは、これらのアダプターが torch モジュールに「注入」できないため、対象外です。これらの手法を使用するには、PEFT ライブラリの使用ガイドを参照してください。
このミックスインを使用すると、適切なPEFTバージョン(>= 0.20.0)がインストールされている場合、以下が可能になります:
- ローカルパスまたはリモートのHubリポジトリに保存されたアダプターを読み込み、モデルに注入します
- モデルに新しいアダプターをアタッチし、Trainerまたは独自の実装で学習します。
- 複数のアダプターをアタッチし、それらを反復的にアクティブ化/非アクティブ化します
- モデルからすべてのアダプターを有効化/無効化します。
- アクティブなアダプターの
state_dictを取得します。
load_adapter
< source >( peft_model_id: str | None = Noneadapter_name: str | None = Nonepeft_config: dict[str, typing.Any] | None = Noneadapter_state_dict: dict[str, 'torch.Tensor'] | None = Nonelow_cpu_mem_usage: bool = Falseis_trainable: bool = Falsehotswap: typing.Union[bool, typing.Literal['auto']] = 'auto'local_files_only: bool = Falseadapter_kwargs: dict[str, typing.Any] | None = Noneload_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None**kwargs )
パラメータ
- peft_model_id (
str, 任意) — Hub で検索するモデルの識別子、または保存されたアダプター設定ファイルとアダプター重みのローカルパス。 - adapter_name (
str, 省略可) — 使用するアダプター名です。設定されていない場合、“default”が使用されます。 - load_config (
LoadStateDictConfig、省略可) — アダプター重みを取得する際に再利用するロード設定です。通常はfrom_pretrainedから取得します。 - kwargs (
dict[str, Any]、省略可) — キーワード引数として渡される、LoadStateDictConfigの追加フィールドです。 - peft_config (
dict[str, Any], 省略可) — 追加するアダプタの設定です。サポートされているアダプタは、プロンプト学習以外のすべての設定(LoRA、IA³ など)です。この引数は、ユーザーが PEFT の状態辞書を直接渡す場合に使用されます。 - adapter_state_dict (
dict[str, torch.Tensor]、省略可) — 読み込むアダプターの state dict です。ユーザーが PEFT の state dict を直接渡す場合に、この引数が使用されます。 - low_cpu_mem_usage (
bool、省略可、デフォルトはFalse) — PEFT アダプターを読み込む際のメモリ使用量を削減します。これにより、読み込みプロセスの高速化も期待できます。 - is_trainable (
bool、省略可、デフォルトはFalse) — アダプターを学習可能にするかどうかを指定します。Falseの場合、アダプターは凍結され、推論にのみ使用できます。 - hotswap — (
"auto"またはbool, 省略可, デフォルトは"auto") 既存の (LoRA) アダプターを、新しく読み込まれたアダプターでその場で置き換えるかどうか。つまり、追加のアダプターを読み込むのではなく、既存のアダプターの重みを新しいアダプターの重みで置き換えます。これにより、より高速かつメモリ効率の高い処理が可能になります。ただし、hotswap の主な利点は、モデルが torch.compile でコンパイルされている場合、新しいアダプターを読み込んでもモデルの再コンパイルが不要になる点です。hotswap を使用する場合は、渡すadapter_nameは、すでに読み込まれているアダプターの名前である必要があります。新しいアダプターと古いアダプターでランクと/またはLoRA alpha(つまりスケーリング)が異なる場合、アダプターを読み込む前に追加のメソッドを呼び出す必要があります。
ファイルまたはリモートの Hub フォルダからアダプター重みをロードします。アダプターや PEFT 手法について詳しくない場合は、PEFT 公式ドキュメント https://huggingface.co/docs/peft を参照してください。
アダプター重みの読み込みにバックエンドとしてPEFTのインストールが必要です。
add_adapter
< source >( adapter_configadapter_name: str | None = None )
アダプターや PEFT 手法について詳しくない場合は、PEFT の公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。
学習目的で、現在のモデルに新しいアダプターを追加します。アダプター名が指定されない場合、PEFT ライブラリの慣例に従い、アダプターにデフォルト名が割り当てられます(PEFT では、デフォルトのアダプター名として “default” を使用しています)。
新たに追加されたアダプターは自動的に有効化されません。有効化するには、model.set_adapterを使用してください。
set_adapter
< source >( adapter_name: list[str] | str )
アダプターや PEFT 手法について詳しくない場合は、PEFT の公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。
特定のアダプターを設定し、モデルにそのアダプターを使用するよう強制して、他のアダプターを無効にします。
アダプターや PEFT 手法について詳しくない場合は、PEFT の公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。
モデルにアタッチされているすべてのアダプターを無効にします。これにより、ベースモデルのみで推論が行われます。
アダプターや PEFT 手法について詳しくない場合は、PEFT の公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。
モデルにアタッチされたアダプターを有効にします。
enable_peft_hotswap
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
異なるランクのPEFTアダプターをホットスワップする可能性を有効にします。また、モデルがコンパイル済みの場合、再コンパイルをトリガーせずにスワップを行うこともできます。
現在、ホットスワップはLoRAのみサポートされています。
このメソッドを呼び出す必要があるのは、アダプターをホットスワップする場合で、かつモデルがコンパイルされているか、読み込まれたアダプターのランクが異なる場合です。すべてのランクが同一であり、モデルがコンパイルされていない場合は、このメソッドを先に呼び出さなくてもホットスワップが機能します。
アダプターや PEFT 手法について詳しくない場合は、PEFT の公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。
モデルの現在アクティブなアダプターを取得します。マルチアダプター推論(複数のアダプターを組み合わせる推論)の場合、ユーザーが適切に対処できるよう、すべてのアクティブなアダプターのリストを返します。
以前のPEFTバージョン(マルチアダプター推論に対応していないもの)では、module.active_adapterは単一の文字列を返します。
get_adapter_state_dict
< source >( adapter_name: str | None = Nonestate_dict: dict | None = None )
アダプターや PEFT 手法について詳しくない場合は、PEFT の公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。
指定されたadapter_nameアダプターに属する重みテンソルのみを含むべきアダプター状態辞書を取得します。 adapter_nameが指定されない場合、アクティブなアダプターが使用されます。
delete_adapter
< source >( adapter_names: list[str] | str )
ベースとなるモデルからPEFTアダプターを削除します。