Diffusers documentation
PEFT
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
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.
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.
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
< source >( adapter_names: list[str] | str )
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")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.
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()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.
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
< source >( 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
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
Tham số
- pretrained_model_name_or_path_or_dict (
strhoặcos.PathLikehoặcdict) — 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.
- Một chuỗi, model id (ví dụ
- 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ànhTrue, mô hình sẽ không được tải xuống từ Hub. - token (
strhoặc bool, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. NếuTrue, 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_alphatrong 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_namephả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
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
Tham số
- save_directory (
strhoặcos.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 sangtorch.float32trướ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ằngsafetensorshay theo cách truyền thống của PyTorch vớipicklehay 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
< source >( adapter_name: str | list[str] )
Đặ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
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
Đặ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])