Transformers documentation
PEFT
PEFT
PeftAdapterMixin は、Transformers におけるアダプタの管理に PEFT ライブラリの関数を提供します。このミックスインは、プロンプト学習以外のすべての PEFT メソッド(LoRA、IA3、AdaLoRA など)をサポートしています。プロンプトチューニング手法(プロンプトチューニング、プロンプト学習)は、torch モジュールに注入できないためサポートされていません。
PEFTライブラリでサポートされているアダプター重みの読み込みと使用に関するすべての関数を含むクラスです。アダプターや、transformerベースのモデルへの注入に関する詳細については、PEFTライブラリのドキュメント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"orbool, optional, defaults to"auto") Whether to substitute an existing (LoRA) adapter with the newly loaded adapter in-place. This means that, instead of loading an additional adapter, this will take the existing adapter weights and replace them with the weights of the new adapter. This can be faster and more memory efficient. However, the main advantage of hotswapping is that when the model is compiled with torch.compile, loading the new adapter does not require recompilation of the model. When using hotswapping, the passedadapter_nameshould be the name of an already loaded adapter.新しいアダプターと古いアダプターでランクと/またはLoRA alpha(つまりスケーリング)が異なる場合、アダプターを読み込む前に追加のメソッドを呼び出す必要があります。
model = AutoModel.from_pretrained(...) max_rank = ... # the highest rank among all LoRAs that you want to load # call *before* compiling and loading the LoRA adapter model.enable_peft_hotswap(target_rank=max_rank) model.load_adapter(file_name_1, adapter_name="default") # optionally compile the model now model = torch.compile(model, ...) output_1 = model(...) # now you can hotswap the 2nd adapter, use the same name as for the 1st # hotswap is activated by default since enable_peft_hotswap was called model.load_adapter(file_name_2, adapter_name="default") output_2 = model(...)デフォルトでは、hotswapは無効化されており、
hotswap=Trueを渡す必要があります。enable_peft_hotswapを先に呼び出した場合は、有効化されます。その場合でも、hotswap=Falseを渡すことで手動で無効化できます。ホットスワップには、https://huggingface.co/docs/peft/main/en/package_reference/hotswap に記載されているいくつかの制限があります。
- adapter_kwargs (
dict[str, Any]、省略可) — アダプタ設定のfrom_pretrainedメソッドおよびfind_adapter_config_fileメソッドに渡される追加のキーワード引数。
ファイルまたはリモートの 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アダプターを削除します。