# PEFT

Diffusers mendukung pemuatan adapter seperti [LoRA](../../tutorials/using_peft_for_inference) dengan pustaka [PEFT](https://huggingface.co/docs/peft/index) menggunakan kelas [PeftAdapterMixin](/docs/diffusers/v0.43.0/id/api/loaders/peft#diffusers.loaders.PeftAdapterMixin). Hal ini memungkinkan kelas pemodelan di Diffusers seperti [UNet2DConditionModel](/docs/diffusers/v0.43.0/id/api/models/unet2d-cond#diffusers.UNet2DConditionModel), [SD3Transformer2DModel](/docs/diffusers/v0.43.0/id/api/models/sd3_transformer2d#diffusers.SD3Transformer2DModel) untuk beroperasi dengan adapter.

> [!TIP]
> Lihat tutorial [Inference with PEFT](../../tutorials/using_peft_for_inference) untuk gambaran tentang cara menggunakan PEFT di Diffusers untuk inferensi.

## PeftAdapterMixin[[diffusers.loaders.PeftAdapterMixin]]

#### diffusers.loaders.PeftAdapterMixin[[diffusers.loaders.PeftAdapterMixin]]

```python
diffusers.loaders.PeftAdapterMixin()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L62)

Kelas yang berisi semua fungsi untuk memuat dan menggunakan bobot adapter yang didukung di pustaka PEFT. Untuk detail lebih lanjut tentang adapter dan cara menyuntikkannya ke model dasar, lihat [dokumentasi](https://huggingface.co/docs/peft/index) PEFT.

Instal versi terbaru PEFT, dan gunakan mixin ini untuk:

- Lampirkan adapter baru ke dalam model.
- Lampirkan beberapa adapter dan aktifkan/nonaktifkan secara iteratif.
- Aktifkan/nonaktifkan semua adapter dari model.
- Dapatkan daftar adapter yang aktif.

#### active_adapters[[diffusers.loaders.PeftAdapterMixin.active_adapters]]

```python
active_adapters()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L652)

Mendapatkan daftar adapter aktif saat ini dari model.

Jika Anda belum familiar dengan adapter dan metode PEFT, kami mengundang Anda untuk membaca lebih lanjut tentang hal tersebut di [dokumentasi](https://huggingface.co/docs/peft) PEFT.

#### add_adapter[[diffusers.loaders.PeftAdapterMixin.add_adapter]]

```python
add_adapter(adapter_config, adapter_name: str = 'default')
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L518)

**Parameter:**

adapter_config (`[~peft.PeftConfig]`) : Konfigurasi adapter yang akan ditambahkan; adapter yang didukung adalah metode non-prefix tuning dan adaption prompt.

adapter_name (`str`, *opsional*, defaultnya `"default"`) : Nama adapter yang akan ditambahkan. Jika tidak ada nama yang diberikan, nama default akan ditugaskan ke adapter tersebut.

Menambahkan adapter baru ke model saat ini untuk pelatihan. Jika nama adapter tidak diberikan, nama default akan ditugaskan ke adapter tersebut untuk mengikuti konvensi dari pustaka PEFT.

Jika Anda belum familiar dengan adapter dan metode PEFT, kami mengundang Anda untuk membaca lebih lanjut tentang hal tersebut dalam [dokumentasi](https://huggingface.co/docs/peft) PEFT.

#### delete_adapters[[diffusers.loaders.PeftAdapterMixin.delete_adapters]]

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

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L777)

**Parameter:**

adapter_names (`list[str, str]`) : Nama (string tunggal atau daftar string) dari adapter yang akan dihapus.

Hapus lapisan LoRA dari adapter pada model dasarnya.

Contoh:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.unet.delete_adapters("cinematic")
```

#### disable_adapters[[diffusers.loaders.PeftAdapterMixin.disable_adapters]]

```python
disable_adapters()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L607)

Nonaktifkan semua adapter yang terpasang pada model dan kembali ke inferensi hanya dengan model dasar.

Jika Anda belum familiar dengan adapter dan metode PEFT, kami mengundang Anda untuk membaca lebih lanjut tentang hal tersebut di [dokumentasi](https://huggingface.co/docs/peft) PEFT.

#### disable_lora[[diffusers.loaders.PeftAdapterMixin.disable_lora]]

```python
disable_lora()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L731)

Menonaktifkan lapisan LoRA aktif dari model yang mendasarinya.

Contoh:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.disable_lora()
```

#### enable_adapters[[diffusers.loaders.PeftAdapterMixin.enable_adapters]]

```python
enable_adapters()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L629)

Aktifkan adapter yang terpasang pada model. Model menggunakan `self.active_adapters()` untuk mengambil daftar adapter yang akan diaktifkan.

Jika Anda belum familiar dengan adapter dan metode PEFT, kami mengundang Anda untuk membaca lebih lanjut tentang hal tersebut di [dokumentasi](https://huggingface.co/docs/peft) PEFT.

#### enable_lora[[diffusers.loaders.PeftAdapterMixin.enable_lora]]

```python
enable_lora()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L754)

Mengaktifkan lapisan LoRA aktif dari model yang mendasarinya.

Contoh:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.enable_lora()
```

#### enable_lora_hotswap[[diffusers.loaders.PeftAdapterMixin.enable_lora_hotswap]]

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

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L815)

**Parameter:**

target_rank (`int`, *opsional*, defaultnya `128`) : Rank tertinggi di antara semua adapter yang akan dimuat.

check_compiled (`str`, *opsional*, defaultnya `"error"`) : Cara menangani kasus ketika model sudah dikompilasi, yang umumnya sebaiknya dihindari. Opsinya adalah: - "error" (default): lempar error - "warn": terbitkan peringatan - "ignore": tidak melakukan apa pun

Memungkinkan kemungkinan untuk mengganti adapter LoRA secara langsung.

Pemanggilan metode ini hanya diperlukan saat melakukan hotswap adapter dan jika model dikompilasi atau jika rank dari adapter yang dimuat berbeda.

#### load_lora_adapter[[diffusers.loaders.PeftAdapterMixin.load_lora_adapter]]

```python
load_lora_adapter(pretrained_model_name_or_path_or_dict, prefix = 'transformer', hotswap: bool = False, **kwargs)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L85)

**Parameter:**

pretrained_model_name_or_path_or_dict (`str` atau `os.PathLike` atau `dict`) : Bisa berupa:  - String, *model id* (misalnya `google/ddpm-celebahq-256`) dari model pretrained yang dihosting di Hub. - Path ke *directory* (misalnya `./my_model_directory`) yang berisi bobot model yang disimpan dengan [ModelMixin.save_pretrained()](/docs/diffusers/v0.43.0/id/api/models/overview#diffusers.ModelMixin.save_pretrained). - [torch state dict](https://pytorch.org/tutorials/beginner/saving_loading_models.html#what-is-a-state-dict).

prefix (`str`, *opsional*) : Prefiks untuk memfilter state dict.

cache_dir (`str | os.PathLike`, *opsional*) : Path ke direktori tempat konfigurasi model pretrained yang diunduh di-cache jika cache standar tidak digunakan.

force_download (`bool`, *opsional*, defaultnya `False`) : Apakah akan memaksa (mengunduh ulang) bobot model dan file konfigurasi, menimpa versi yang di-cache jika ada.

proxies (`dict[str, str]`, *opsional*) : Kamus server proxy yang akan digunakan berdasarkan protokol atau endpoint, misalnya `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}`. Proxy digunakan pada setiap permintaan.

local_files_only (`bool`, *opsional*, defaultnya `False`) : Apakah hanya memuat bobot model dan file konfigurasi lokal atau tidak. Jika diatur ke `True`, model tidak akan diunduh dari Hub.

token (`str` atau *bool*, *opsional*) : Token yang digunakan sebagai otorisasi bearer HTTP untuk file jarak jauh. Jika `True`, token yang dihasilkan dari `diffusers-cli login` (disimpan di `~/.huggingface`) akan digunakan.

revision (`str`, *opsional*, defaultnya `"main"`) : Versi model spesifik yang akan digunakan. Bisa berupa nama branch, nama tag, id commit, atau identifikasi apa pun yang diizinkan oleh Git.

subfolder (`str`, *opsional*, defaultnya `""`) : Lokasi subfolder dari file model di dalam repositori model yang lebih besar di Hub atau secara lokal.

network_alphas (`dict[str, float]`) : Nilai network alpha yang digunakan untuk pembelajaran yang stabil dan mencegah underflow. Nilai ini memiliki arti yang sama dengan opsi `--network_alpha` dalam skrip trainer kohya-ss. Lihat [tautan ini](https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_network_README-en.md#execute-learning).

low_cpu_mem_usage (`bool`, *opsional*) : Mempercepat pemuatan model dengan hanya memuat bobot LoRA pretrained dan tidak menginisialisasi bobot acak.

hotswap : (`bool`, *opsional*) Bawaan adalah `False`. Apakah akan mengganti adapter (LoRA) yang sudah ada dengan adapter yang baru dimuat secara in-place. Artinya, alih-alih memuat adapter tambahan, proses ini akan mengambil bobot adapter yang ada dan menggantinya dengan bobot dari adapter baru. Hal ini bisa lebih cepat dan lebih efisien dalam penggunaan memori. Namun, keunggulan utama dari hotswapping adalah ketika model dikompilasi dengan torch.compile, pemuatan adapter baru tidak memerlukan kompilasi ulang model. Saat menggunakan hotswapping, `adapter_name` yang diberikan harus berupa nama dari adapter yang sudah dimuat. Jika adapter baru dan adapter lama memiliki rank dan/atau LoRA alphas (yaitu scaling) yang berbeda, Anda perlu memanggil metode tambahan sebelum memuat adapter: ```py pipeline = ...  # load diffusers pipeline max_rank = ...  # the highest rank among all LoRAs that you want to load # call *before* compiling and loading the LoRA adapter pipeline.enable_lora_hotswap(target_rank=max_rank) pipeline.load_lora_weights(file_name) # optionally compile the model now ``` Perhatikan bahwa hotswapping adapter untuk text encoder belum didukung. Ada beberapa keterbatasan lain untuk teknik ini, yang didokumentasikan di sini: https://huggingface.co/docs/peft/main/en/package_reference/hotswap

metadata : Metadata adapter LoRA. Jika diberikan, metadata yang disimpulkan melalui state dict tidak digunakan untuk menginisialisasi `LoraConfig`.

Memuat adapter LoRA ke dalam model yang mendasarinya.

#### save_lora_adapter[[diffusers.loaders.PeftAdapterMixin.save_lora_adapter]]

```python
save_lora_adapter(save_directory, adapter_name: str = 'default', upcast_before_saving: bool = False, safe_serialization: bool = True, weight_name: str | None = None)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L394)

**Parameter:**

save_directory (`str` atau `os.PathLike`) : Direktori untuk menyimpan parameter LoRA. Akan dibuat jika belum ada.

adapter_name : (`str`, defaultnya "default"): Nama adapter yang akan diserialisasi. Berguna ketika model dasar memiliki beberapa adapter yang dimuat.

upcast_before_saving (`bool`, defaultnya `False`) : Apakah model dasar akan di-cast ke `torch.float32` sebelum serialisasi.

safe_serialization (`bool`, *opsional*, defaultnya `True`) : Apakah model disimpan menggunakan `safetensors` atau cara tradisional PyTorch dengan `pickle`.

weight_name : (`str`, *opsional*, defaultnya `None`): Nama file untuk menserialisasi state dict.

Simpan parameter LoRA yang sesuai dengan model dasarnya.

#### set_adapter[[diffusers.loaders.PeftAdapterMixin.set_adapter]]

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

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L558)

**Parameter:**

adapter_name (str | list[str])) : Daftar adapter yang akan diatur atau nama adapter dalam kasus satu adapter.

Menetapkan adapter tertentu dengan memaksa model untuk hanya menggunakan adapter tersebut dan menonaktifkan adapter lainnya.

Jika Anda belum familiar dengan adapter dan metode PEFT, kami mengundang Anda untuk membaca lebih lanjut tentang hal tersebut di [dokumentasi](https://huggingface.co/docs/peft) PEFT.

#### set_adapters[[diffusers.loaders.PeftAdapterMixin.set_adapters]]

```python
set_adapters(adapter_names: list[str] | str, weights: float | dict | list[float] | list[dict] | list[None] | None = None)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/loaders/peft.py#L462)

**Parameter:**

adapter_names (`list[str]` atau `str`) : Nama-nama adapter yang akan digunakan.

weights (`Union[List[float], float]`, *opsional*) : Bobot adapter yang akan digunakan dengan UNet. Jika `None`, bobot disetel ke `1.0` untuk semua adapter.

Atur adapter yang saat ini aktif untuk digunakan dalam jaringan difusi (misalnya, unet, transformer, dll.).

Contoh:

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
    "jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.unet.set_adapters(["cinematic", "pixel"], weights=[0.5, 0.5])
```

