Diffusers documentation
UNet
UNet
Một số phương pháp huấn luyện - như LoRA và Custom Diffusion - thường nhắm vào các lớp attention của UNet, nhưng các phương pháp huấn luyện này cũng có thể nhắm đến các lớp không phải attention khác. Thay vì huấn luyện tất cả các tham số của mô hình, chỉ một tập con các tham số được huấn luyện, giúp nhanh hơn và hiệu quả hơn. Lớp này hữu ích nếu bạn chỉ nạp trọng số vào một UNet. Nếu bạn cần nạp trọng số vào text encoder hoặc cả text encoder và UNet, hãy thử sử dụng hàm load_lora_weights() thay thế.
Lớp UNet2DConditionLoadersMixin cung cấp các hàm để tải và lưu trọng số, hợp nhất và tách LoRA, vô hiệu hóa và kích hoạt LoRA, cũng như thiết lập và xóa adapter.
Để tìm hiểu thêm về cách tải trọng số LoRA, hãy xem hướng dẫn LoRA.
UNet2DConditionLoadersMixin
Nạp các lớp LoRA vào UNet2DCondtionModel.
load_attn_procs
< source >( pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor]**kwargs )
Tham số
- pretrained_model_name_or_path_or_dict (
strhoặcos.PathLikehoặcdict) — Có thể là:- Một chuỗi, id của mô hình (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, id của mô hình (ví dụ
- 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ộ. - weight_name (
str, tùy chọn, mặc định là None) — Tên của tệp state dict đã được serialize.
Tải các lớp attention processor của Custom Diffusion đã được huấn luyện trước vào UNet2DConditionModel. Các lớp attention processor phải được định nghĩa trong attention_processor.py và là một lớp torch.nn.Module. Để tải các lớp LoRA, hãy sử dụng load_lora_adapter() thay thế.
save_attn_procs
< source >( save_directory: str | os.PathLikeis_main_process: bool = Trueweight_name: str = Nonesave_function: typing.Callable = Nonesafe_serialization: bool = True**kwargs )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục để lưu trữ attention processor (sẽ được tạo nếu chưa tồn tại). - is_main_process (
bool, tùy chọn, mặc định làTrue) — Xác định xem tiến trình gọi hàm này có phải là tiến trình chính hay không. Hữu ích trong quá trình huấn luyện phân tán khi bạn cần gọi hàm này trên tất cả các tiến trình. Trong trường hợp này, chỉ đặtis_main_process=Truetrên tiến trình chính để tránh điều kiện đua. - save_function (
Callable) — Hàm được sử dụng để lưu state dictionary. Hữu ích trong quá trình huấn luyện phân tán khi bạn cần thay thếtorch.savebằng một phương pháp khác. Có thể được cấu hình bằng biến môi trườngDIFFUSERS_SAVE_MODE. - safe_serialization (
bool, tùy chọn, mặc định làTrue) — Có nên lưu mô hình bằngsafetensorshay bằngpicklehay không.
Lưu các lớp attention processor của Custom Diffusion vào một thư mục để có thể tải lại bằng phương thức load_attn_procs(). Để lưu các lớp LoRA, hãy sử dụng save_lora_adapter() thay thế.
Ví dụ:
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4",
torch_dtype=torch.float16,
).to("cuda")
pipeline.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
pipeline.unet.save_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")