# PEFTの統合

PEFTの実用的な利点は、[Diffusers](https://hf.co/docs/diffusers)や[Transformers](https://hf.co/docs/transformers)といった他のHugging Faceライブラリにも広がります。PEFTの主な利点の一つは、PEFT手法によって生成されるアダプターファイルが元のモデルよりもはるかに小さいことであり、これにより複数のアダプターを管理・利用することが非常に容易になります。事前学習済みのベースモデルを1つ用意し、解決しようとしているタスク用にファインチューニングされた新しいアダプターを読み込むだけで、複数のタスクに活用できます。また、テキストから画像を生成する拡散モデルに複数のアダプターを組み合わせることで、新しいエフェクトを作成することも可能です。

このチュートリアルでは、PEFTがDiffusersとTransformersにおけるアダプタの管理をどのように支援できるかを示します。

## Diffusers

Diffusersは、拡散モデルを用いてテキストや画像から画像や動画を生成するための生成AIライブラリです。LoRAは、新しいスタイルで画像を生成する拡散モデルを非常に素早く学習・共有できるため、拡散モデルの学習手法として特に人気があります。複数のLoRAモデルをより簡単に使用・試すために、DiffusersはPEFTライブラリを使用して、推論用の異なるアダプタの管理を支援します。

例えば、ベースモデルを読み込んだ後、[`load_lora_weights`](https://huggingface.co/docs/diffusers/v0.24.0/en/api/loaders/lora#diffusers.loaders.LoraLoaderMixin.load_lora_weights) メソッドを使用して推論用の [artificialguybr/3DRedmond-V1](https://huggingface.co/artificialguybr/3DRedmond-V1) アダプターを読み込みます。読み込みメソッドの `adapter_name` 引数は PEFT によって有効化されており、アダプターに名前を付けることで参照しやすくします。

```py
import torch
from diffusers import DiffusionPipeline

device = torch.accelerator.current_accelerator().type if hasattr(torch, "accelerator") else "cuda"

pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to(device)
pipeline.load_lora_weights(
    "peft-internal-testing/artificialguybr__3DRedmond-V1", 
    weight_name="3DRedmond-3DRenderStyle-3DRenderAF.safetensors", 
    adapter_name="3d"
)
image = pipeline("sushi rolls shaped like kawaii cat faces").images[0]
image
```

    

次に、もう1つのクールなLoRAモデル、[ostris/super-cereal-sdxl-lora](https://huggingface.co/ostris/super-cereal-sdxl-lora)を試してみましょう。この新しいアダプターを`adapter_name`で読み込み、名前を付けるだけで、[`set_adapters`](https://huggingface.co/docs/diffusers/api/loaders/unet#diffusers.loaders.UNet2DConditionLoadersMixin.set_adapters)メソッドを使用して現在アクティブなアダプターとして設定できます。

```py
pipeline.load_lora_weights(
    "ostris/super-cereal-sdxl-lora", 
    weight_name="cereal_box_sdxl_v1.safetensors", 
    adapter_name="cereal"
)
pipeline.set_adapters("cereal")
image = pipeline("sushi rolls shaped like kawaii cat faces").images[0]
image
```

    

最後に、[`disable_lora`](https://huggingface.co/docs/diffusers/api/loaders/unet#diffusers.loaders.UNet2DConditionLoadersMixin.disable_lora) メソッドを呼び出してベースモデルを復元できます。

```py
pipeline.disable_lora()
```

PEFTがDiffusersをどのようにサポートしているかについては、[Inference with PEFT](https://huggingface.co/docs/diffusers/tutorials/using_peft_for_inference)チュートリアルを参照してください。

## Transformers

🤗 [Transformers](https://hf.co/docs/transformers) は、あらゆるモダリティのあらゆるタスク向けの事前学習済みモデルのコレクションです。これらのモデルは、学習や推論のために読み込むことができます。多くのモデルが大型言語モデル（LLM）であるため、アダプターを管理・学習するために PEFT を Transformers と統合するのが理にかなっています。

学習用のベース事前学習モデルを読み込みます。

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")
```

次に、モデルパラメータの適応方法を指定するためのアダプター設定を追加します。[add_adapter()](/docs/peft/main/ja/package_reference/peft_model#peft.PeftModel.add_adapter) メソッドを呼び出して、ベースモデルに設定を追加します。

```py
from peft import LoraConfig

peft_config = LoraConfig(
    lora_alpha=16,
    lora_dropout=0.1,
    r=64,
    bias="none",
    task_type="CAUSAL_LM"
)
model.add_adapter(peft_config)
```

これで、Transformersの[Trainer](https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.Trainer)クラス、またはお好みのトレーニングフレームワークを使用してモデルをトレーニングできます。

新しく学習したモデルを推論に使用するには、[AutoModel](https://huggingface.co/docs/transformers/main/en/model_doc/auto#transformers.AutoModel) クラスはバックエンドで PEFT を使用して、アダプター重みと設定ファイルをベースの事前学習モデルに読み込みます。

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("peft-internal-testing/opt-350m-lora")
```

代わりに、[Pipelines](https://huggingface.co/docs/transformers/en/main_classes/pipelines) を使用してモデルを読み込み、推論を簡単に実行することもできます。

```py
from transformers import pipeline

model = pipeline("text-generation", "peft-internal-testing/opt-350m-lora")
print(model("Hello World"))
```

複数のアダプタの比較や使用に関心がある場合は、[add_adapter()](/docs/peft/main/ja/package_reference/peft_model#peft.PeftModel.add_adapter)メソッドを呼び出して、ベースモデルにアダプタの構成を追加できます。唯一の要件は、アダプタの種類が同一であることです（LoRAとLoHaのアダプタを混在させることはできません）。

```py
from transformers import AutoModelForCausalLM
from peft import LoraConfig

model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")
model.add_adapter(lora_config_1, adapter_name="adapter_1")
```

ベースモデルに新しいアダプターを接続するには、[add_adapter()](/docs/peft/main/ja/package_reference/peft_model#peft.PeftModel.add_adapter)を再度呼び出します。

```py
model.add_adapter(lora_config_2, adapter_name="adapter_2")
```

その後、[set_adapter()](/docs/peft/main/ja/package_reference/peft_model#peft.PeftModel.set_adapter) を使用して、現在アクティブなアダプターを設定できます。

```py
model.set_adapter("adapter_1")
output = model.generate(**inputs)
print(tokenizer.decode(output_disabled[0], skip_special_tokens=True))
```

アダプターを無効にするには、[disable_adapters](https://github.com/huggingface/transformers/blob/4e3490f79b40248c53ee54365a9662611e880892/src/transformers/integrations/peft.py#L313) メソッドを呼び出します。

```py
model.disable_adapters()
```

[enable_adapters](https://github.com/huggingface/transformers/blob/4e3490f79b40248c53ee54365a9662611e880892/src/transformers/integrations/peft.py#L336) を使用すると、アダプターを再度有効にできます。

ご興味があれば、[PEFTでアダプターを読み込み、学習する](https://huggingface.co/docs/transformers/main/peft)チュートリアルを参照して、詳細をご覧ください。

