# PEFT[[transformers.integrations.PeftAdapterMixin]]

[PeftAdapterMixin](/docs/transformers/main/ja/main_classes/peft#transformers.integrations.PeftAdapterMixin) は、Transformers でのアダプター管理のために [PEFT](https://huggingface.co/docs/peft/index) ライブラリから関数を提供します。このミックスインは、すべての非プロンプト学習 PEFT メソッド（LoRA、IA3、AdaLoRA など）をサポートしています。プロンプトチューニングメソッド（プロンプトチューニング、プロンプト学習）は、torch モジュールに注入できないためサポートされていません。

#### transformers.integrations.PeftAdapterMixin[[transformers.integrations.PeftAdapterMixin]]

```python
transformers.integrations.PeftAdapterMixin()
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L57)

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[[transformers.integrations.PeftAdapterMixin.load_adapter]]

```python
load_adapter(peft_model_id: str | None = None, adapter_name: str | None = None, peft_config: dict[str, typing.Any] | None = None, adapter_state_dict: dict[str, 'torch.Tensor'] | None = None, low_cpu_mem_usage: bool = False, is_trainable: bool = False, hotswap: typing.Union[bool, typing.Literal['auto']] = 'auto', local_files_only: bool = False, adapter_kwargs: dict[str, typing.Any] | None = None, load_config: typing.Optional[ForwardRef('LoadStateDictConfig')] = None, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L80)

**パラメータ:**

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) アダプターを、新しく読み込まれたアダプターでその場で置き換えるかどうかを指定します。つまり、追加のアダプターを読み込むのではなく、既存のアダプターの重みを新しいアダプターの重みで置き換えます。これにより、より高速かつメモリ効率の高い処理が可能になります。ただし、ホットスワップの主な利点は、モデルが torch.compile でコンパイルされている場合、新しいアダプターを読み込んでもモデルの再コンパイルが不要になる点です。ホットスワップを使用する場合は、渡す `adapter_name` は、すでに読み込まれているアダプターの名前である必要があります。 新しいアダプターと古いアダプターでランクと/または LoRA alpha (すなわちスケーリング) が異なる場合、アダプターを読み込む前に追加のメソッドを呼び出す必要があります: ```py 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=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[[transformers.integrations.PeftAdapterMixin.add_adapter]]

```python
add_adapter(adapter_config, adapter_name: str | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L390)

**パラメータ:**

adapter_config (`~peft.PeftConfig`) : 追加するアダプターの設定です。サポートされているアダプターは、プロンプト学習以外の手法（LoRA、IA³ など）です。

adapter_name (`str`、*任意*、デフォルトは`"default"`) : 追加するアダプターの名前です。名前が指定されない場合、アダプターにデフォルトの名前が割り当てられます。

アダプターやPEFT手法に詳しくない場合は、PEFTの公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。

学習目的で、現在のモデルに新しいアダプターを追加します。アダプター名が指定されない場合、PEFTライブラリの慣例に従い、アダプターにデフォルト名が割り当てられます（PEFTでは、デフォルトのアダプター名として"default"を使用しています）。

新たに追加されたアダプターは自動的に有効化されません。有効化するには、`model.set_adapter`を使用してください。

#### set_adapter[[transformers.integrations.PeftAdapterMixin.set_adapter]]

```python
set_adapter(adapter_name: list[str] | str)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L430)

**パラメータ:**

adapter_name (`Union[list[str], str]`) : 設定するアダプターの名前。複数のアダプターを設定するには、文字列のリストを指定できます。

アダプターやPEFT手法に詳しくない場合は、PEFTの公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。

特定のアダプターを設定し、モデルにそのアダプターを使用するよう強制して、他のアダプターを無効にします。

#### disable_adapters[[transformers.integrations.PeftAdapterMixin.disable_adapters]]

```python
disable_adapters()
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L471)

アダプターやPEFT手法に詳しくない場合は、PEFTの公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。

モデルにアタッチされているすべてのアダプターを無効にします。これにより、ベースモデルのみで推論が行われます。

#### enable_adapters[[transformers.integrations.PeftAdapterMixin.enable_adapters]]

```python
enable_adapters()
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L490)

アダプターやPEFT手法に詳しくない場合は、PEFTの公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。

モデルにアタッチされたアダプターを有効にします。

#### enable_peft_hotswap[[transformers.integrations.PeftAdapterMixin.enable_peft_hotswap]]

```python
enable_peft_hotswap(target_rank: int = 128, check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error')
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L353)

**パラメータ:**

target_rank (`int`、*任意*、デフォルトは`128`) : 読み込まれるすべてのアダプターの中で最も高いランク。

check_compiled (`str`、*任意*、デフォルトは`"error"`) : モデルがすでにコンパイルされている場合の処理方法です。一般的には回避すべきです。オプションは以下の通りです: - "error" (デフォルト): エラーを送出 - "warn": 警告を発行 - "ignore": 何もしない

異なるランクのPEFTアダプターをホットスワップする可能性を有効にします。また、モデルがコンパイルされている場合、再コンパイルをトリガーせずにスワップできます。

現在、ホットスワップはLoRAのみサポートされています。

このメソッドを呼び出す必要があるのは、アダプターをホットスワップする場合で、かつモデルがコンパイルされているか、読み込まれたアダプターのランクが異なる場合です。すべてのランクが同一であり、モデルがコンパイルされていない場合は、このメソッドを先に呼び出さなくてもホットスワップが機能します。

#### active_adapters[[transformers.integrations.PeftAdapterMixin.active_adapters]]

```python
active_adapters()
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L508)

アダプターやPEFT手法に詳しくない場合は、PEFTの公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。

モデルの現在アクティブなアダプターを取得します。マルチアダプター推論（複数のアダプターを組み合わせる推論）の場合、ユーザーが適切に対処できるよう、すべてのアクティブなアダプターのリストを返します。

以前の PEFT バージョン（マルチアダプタ推論に対応していないもの）では、`module.active_adapter` は単一の文字列を返します。

#### get_adapter_state_dict[[transformers.integrations.PeftAdapterMixin.get_adapter_state_dict]]

```python
get_adapter_state_dict(adapter_name: str | None = None, state_dict: dict | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L537)

**パラメータ:**

adapter_name (`str`, *任意*) : state dict を取得するアダプターの名前です。名前が指定されない場合、アクティブなアダプターが使用されます。

state_dict （`torch.Tensor` のネストされた辞書、*任意*）: モデルのステートディクショナリです。デフォルトでは `self.state_dict()` が使用されますが、モデルのステートディクショナリを復元する際に特別な注意が必要になる場合（モデル並列化を使用している場合など）に使用できます。

アダプターやPEFT手法に詳しくない場合は、PEFTの公式ドキュメント https://huggingface.co/docs/peft で詳しくお読みください。

指定されたadapter_nameアダプターに属する重みテンソルのみを含むアダプター状態辞書を取得します。adapter_nameが指定されない場合、アクティブなアダプターが使用されます。

#### delete_adapter[[transformers.integrations.PeftAdapterMixin.delete_adapter]]

```python
delete_adapter(adapter_names: list[str] | str)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/peft.py#L622)

**パラメータ:**

adapter_names (`Union[list[str], str]`) : 削除するアダプターの名前。

ベースとなるモデルからPEFTアダプターを削除します。

