Diffusers documentation

PEFT

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PEFT

Diffusers hỗ trợ nạp các adapter như LoRA bằng thư viện PEFT với lớp PeftAdapterMixin. Điều này cho phép các lớp mô hình trong Diffusers như UNet2DConditionModel, SD3Transformer2DModel hoạt động với một adapter.

Tham khảo hướng dẫn Suy luận với PEFT để có cái nhìn tổng quan về cách sử dụng PEFT trong Diffusers cho suy luận.

PeftAdapterMixin

lớp diffusers.loaders.PeftAdapterMixin

< >

( )

Một lớp chứa tất cả các hàm để tải và sử dụng trọng số adapter được hỗ trợ trong thư viện PEFT. Để biết thêm chi tiết về adapter và cách tiêm chúng vào một mô hình cơ sở, hãy xem tài liệu của PEFT.

Cài đặt phiên bản PEFT mới nhất và sử dụng mixin này để:

  • Gắn các adapter mới vào mô hình.
  • Gắn nhiều adapter và kích hoạt/tắt chúng một cách lặp lại.
  • Bật/tắt tất cả các adapter từ mô hình.
  • Lấy danh sách các adapter đang hoạt động.

active_adapters

< >

( )

Lấy danh sách các adapter đang hoạt động hiện tại của mô hình.

Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu PEFT.

add_adapter

< >

( adapter_configadapter_name: str = 'default' )

Tham số

  • adapter_config ([~peft.PeftConfig]) — Cấu hình của adapter cần thêm; các adapter được hỗ trợ là các phương pháp non-prefix tuning và adaption prompt.
  • adapter_name (str, tùy chọn, mặc định là "default") — Tên của adapter cần thêm. Nếu không truyền tên, một tên mặc định sẽ được gán cho adapter.

Thêm một adapter mới vào mô hình hiện tại để huấn luyện. Nếu không truyền tên adapter, một tên mặc định sẽ được gán cho adapter để tuân theo quy ước của thư viện PEFT.

Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu PEFT.

delete_adapters

< >

( adapter_names: list[str] | str )

Tham số

  • adapter_names (list[str, str]) — Tên (chuỗi đơn hoặc danh sách các chuỗi) của adapter cần xóa.

Xóa các lớp LoRA của adapter khỏi mô hình cơ sở.

Ví dụ:

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

< >

( )

Tắt tất cả các adapter được gắn vào mô hình và quay về suy luận chỉ với mô hình cơ sở.

Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu PEFT.

disable_lora

< >

( )

Tắt các lớp LoRA đang hoạt động của mô hình cơ sở.

Ví dụ:

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

< >

( )

Bật các adapter được gắn vào mô hình. Mô hình sử dụng self.active_adapters() để lấy danh sách các adapter cần bật.

Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu PEFT.

enable_lora

< >

( )

Bật các lớp LoRA đang hoạt động của mô hình cơ sở.

Ví dụ:

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

< >

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

Tham số

  • target_rank (int, tuỳ chọn, mặc định là 128) — Rank cao nhất trong số tất cả các adapter sẽ được nạp.
  • check_compiled (str, tuỳ chọn, mặc định là "error") — Cách xử lý khi mô hình đã được biên dịch, điều này thường nên tránh. Các tùy chọn là:
    • “error” (mặc định): gây ra một lỗi
    • “warn”: phát ra cảnh báo
    • “ignore”: không làm gì

Cho phép khả năng thay đổi nóng các bộ thích ứng LoRA.

Việc gọi phương thức này chỉ bắt buộc khi hotswap các adapter và nếu mô hình đã được biên dịch hoặc nếu bậc (ranks) của các adapter được nạp khác nhau.

load_lora_adapter

< >

( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )

Tham số

  • pretrained_model_name_or_path_or_dict (str hoặc os.PathLike hoặc dict) — Có thể là:
    • Một chuỗi, model id (ví dụ google/ddpm-celebahq-256) của một mô hình được huấn luyện trước có sẵn trên Hub.
    • Đường dẫn đến một thư mục (ví dụ ./my_model_directory) chứa các trọng số mô hình đã được lưu bằng ModelMixin.save_pretrained().
    • Một torch state dict.
  • prefix (str, tùy chọn) — Tiền tố để lọc state dict.
  • cache_dir (str | os.PathLike, tùy chọn) — Đường dẫn đến thư mục nơi cấu hình mô hình được huấn luyện trước đã tải xuống được lưu đệm nếu không sử dụng bộ lưu đệm tiêu chuẩn.
  • force_download (bool, tùy chọn, mặc định là False) — Có nên buộc tải lại (re-download) trọng số mô hình và các tệp cấu hình, ghi đè lên các phiên bản đã được lưu trong bộ nhớ đệm nếu chúng tồn tại hay không.
  • proxies (dict[str, str], tuỳ chọn) — Một từ điển các máy chủ proxy để sử dụng theo giao thức hoặc điểm cuối, ví dụ, {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Các proxy này được sử dụng cho mỗi yêu cầu.
  • local_files_only (bool, tùy chọn, mặc định là False) — Xác định có chỉ tải trọng số và tệp cấu hình của mô hình từ cục bộ hay không. Nếu đặt thành True, mô hình sẽ không được tải xuống từ Hub.
  • token (str hoặc bool, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Nếu True, token được tạo từ diffusers-cli login (được lưu trong ~/.huggingface) sẽ được sử dụng.
  • revision (str, tùy chọn, mặc định là "main") — Phiên bản mô hình cụ thể cần sử dụng. Nó có thể là tên nhánh, tên thẻ, id commit, hoặc bất kỳ định danh nào được Git cho phép.
  • subfolder (str, tùy chọn, mặc định là "") — Vị trí thư mục con của tệp mô hình bên trong một kho lưu trữ mô hình lớn hơn trên Hub hoặc cục bộ.
  • network_alphas (dict[str, float]) — Giá trị của network alpha được sử dụng cho việc học ổn định và ngăn ngừa underflow. Giá trị này có cùng ý nghĩa với tùy chọn --network_alpha trong script trainer của kohya-ss. Tham khảo liên kết này.
  • low_cpu_mem_usage (bool, tùy chọn) — Tăng tốc độ tải mô hình bằng cách chỉ tải trọng số LoRA được huấn luyện trước và không khởi tạo các trọng số ngẫu nhiên.
  • hotswap — (bool, tuỳ chọn) Mặc định là False. Liệu có thay thế adapter (LoRA) hiện có bằng adapter mới được nạp vào tại chỗ hay không. Điều này có nghĩa là, thay vì nạp thêm một adapter, phương thức này sẽ lấy trọng số của adapter hiện có và thay thế chúng bằng trọng số của adapter mới. Cách này có thể nhanh hơn và tiết kiệm bộ nhớ hơn. Tuy nhiên, lợi ích chính của hotswap là khi mô hình được biên dịch bằng torch.compile, việc nạp adapter mới không yêu cầu biên dịch lại mô hình. Khi sử dụng hotswap, adapter_name phải là tên của một adapter đã được nạp trước đó.

    Nếu adapter mới và adapter cũ có rank và/hoặc alpha LoRA (tức là hệ số scale) khác nhau, bạn cần gọi thêm một phương thức trước khi nạp adapter:

Tải bộ thích ứng LoRA vào mô hình cơ bản.

save_lora_adapter

< >

( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )

Tham số

  • save_directory (str hoặc os.PathLike) — Thư mục để lưu các tham số LoRA. Sẽ được tạo nếu chưa tồn tại.
  • adapter_name — (str, mặc định là “default”): Tên của adapter cần xuất ra. Hữu ích khi mô hình cơ bản có nhiều adapter được nạp.
  • upcast_before_saving (bool, mặc định là False) — Có nên chuyển model cơ bản sang torch.float32 trước khi xuất chuỗi không.
  • safe_serialization (bool, tùy chọn, mặc định là True) — Liệu có lưu mô hình bằng safetensors hay theo cách truyền thống của PyTorch với pickle hay không.
  • weight_name — (str, tùy chọn, mặc định là None): Tên tệp để serialize state dict.

Lưu các tham số LoRA tương ứng với mô hình cơ sở.

set_adapter

< >

( adapter_name: str | list[str] )

Tham số

  • adapter_name (str | list[str])) — Danh sách các adapter cần thiết lập hoặc tên adapter trong trường hợp chỉ có một adapter.

Đặt một adapter cụ thể bằng cách buộc mô hình chỉ sử dụng adapter đó và vô hiệu hóa các adapter khác.

Nếu bạn chưa quen thuộc với adapter và các phương pháp PEFT, chúng tôi mời bạn đọc thêm về chúng trong tài liệu PEFT.

set_adapters

< >

( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )

Tham số

  • adapter_names (list[str] hoặc str) — Tên của các adapter cần sử dụng.
  • weights (Union[List[float], float], tùy chọn) — Trọng số của adapter(s) để sử dụng với UNet. Nếu là None, trọng số sẽ được đặt thành 1.0 cho tất cả các adapter.

Đặt các adapter đang hoạt động hiện tại để sử dụng trong mạng khuếch tán (ví dụ: unet, transformer, v.v.).

Ví dụ:

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])
Update on GitHub