Diffusers documentation
Mô hình
Mô hình
🤗 Diffusers cung cấp các mô hình được huấn luyện trước cho các thuật toán phổ biến và các module để tạo ra các hệ thống khuếch tán tùy chỉnh. Chức năng chính của các mô hình là khử nhiễu một mẫu đầu vào theo phân phối .
Tất cả các model được xây dựng từ lớp cơ sở ModelMixin, vốn là một torch.nn.Module cung cấp các chức năng cơ bản để lưu và tải model, cả cục bộ lẫn từ Hugging Face Hub.
ModelMixin
Lớp cơ sở cho tất cả các mô hình.
ModelMixin chịu trách nhiệm lưu trữ cấu hình mô hình và cung cấp các phương thức để tải xuống, tải và lưu trữ mô hình.
- config_name (
str) — Tên tệp để lưu mô hình khi gọi save_pretrained().
Chỉ biên dịch những module con được lặp lại thường xuyên của mô hình (ví dụ: các lớp Transformer) thay vì biên dịch toàn bộ mô hình. Kỹ thuật này—thường được gọi là biên dịch theo vùng (xem công thức PyTorch https://docs.pytorch.org/tutorials/recipes/regional_compilation.html) có thể giảm đáng kể thời gian biên dịch đầu-cuối, trong khi vẫn giữ được tốc độ chạy nhanh hơn như bạn kỳ vọng từ torch.compile đầy đủ.
Bộ các module con cần biên dịch được xác định dựa trên sự hiện diện của thuộc tính _repeated_blocks trong định nghĩa model. Hãy định nghĩa thuộc tính này trên lớp con của model dưới dạng danh sách/bộ ba tên lớp (chuỗi). Mọi module có tên lớp khớp sẽ được biên dịch.
Khi được phát hiện, mỗi sub-module khớp sẽ được biên dịch bằng cách gọi submodule.compile(*args, **kwargs). Bất kỳ đối số vị trí hay đối số từ khóa nào bạn cung cấp cho compile_repeated_blocks đều được chuyển nguyên vẹn đến torch.compile.
Một giá trị giả lập cho một đường dẫn có dấu chấm (ví dụ: torch.float32): các chuỗi truy cập thuộc tính, các cuộc gọi hoạt động như các decorator pass-through, repr là đường dẫn có dấu chấm, và việc sử dụng nó như một lớp cơ sở sẽ thay thế bằng một lớp cơ sở type thông thường (PEP 560 __mro_entries__), do đó các lớp con thực sự vẫn giữ nguyên metaclass bình thường và inspect.signature sẽ đọc __init__ thực của chúng thay vì của một mock.
Có thể khử lượng tử hóa mô hình trong trường hợp nó đã được lượng tử hóa bằng một phương pháp lượng tử hóa hỗ trợ khử lượng tử hóa.
Tắt gradient checkpointing cho model hiện tại (có thể được gọi là activation checkpointing hoặc checkpoint activations trong các framework khác).
tắt npu flash attention từ torch_npu
Tắt chú ý tiết kiệm bộ nhớ từ xFormers.
Tắt kernel pallals của flash attention cho torch_xla.
enable_gradient_checkpointing
< source >( gradient_checkpointing_func: typing.Optional[typing.Callable] = None )
Bật gradient checkpointing cho model hiện tại (có thể được gọi là activation checkpointing hoặc checkpoint activations trong các framework khác).
enable_group_offload
< source >( onload_device: deviceoffload_device: device = torch.device()offload_type: str = 'block_level'num_blocks_per_group: int | None = Nonenon_blocking: bool = Falseuse_stream: bool = Falserecord_stream: bool = Falselow_cpu_mem_usage = Falseoffload_to_disk_path: str | None = Noneblock_modules: str | None = Noneexclude_kwargs: str | None = None )
Kích hoạt việc chuyển nhóm (group offloading) cho mô hình hiện tại.
Xem apply_group_offloading() để biết thêm thông tin.
Ví dụ:
>>> from diffusers import CogVideoXTransformer3DModel
>>> transformer = CogVideoXTransformer3DModel.from_pretrained(
... "THUDM/CogVideoX-5b", subfolder="transformer", torch_dtype=torch.bfloat16
... )
>>> transformer.enable_group_offload(
... onload_device=torch.device("cuda"),
... offload_device=torch.device("cpu"),
... offload_type="leaf_level",
... use_stream=True,
... )enable_layerwise_casting
< source >( storage_dtype: dtype = torch.float8_e4m3fncompute_dtype: typing.Optional[torch.dtype] = Noneskip_modules_pattern: tuple[str, ...] | None = Noneskip_modules_classes: tuple[typing.Type[torch.nn.Module], ...] | None = Nonenon_blocking: bool = False )
Tham số
- storage_dtype (
torch.dtype) — dtype mà mô hình cần được chuyển đổi để lưu trữ. - compute_dtype (
torch.dtype) — Dtype mà trọng số của mô hình cần được chuyển đổi trong quá trình truyền thẳng. - skip_modules_pattern (
tuple[str, ...], tuỳ chọn) — Một danh sách các mẫu để khớp với tên của các module cần bỏ qua trong quá trình chuyển đổi kiểu dữ liệu theo từng lớp. Nếu được đặt thànhNone, các mẫu bỏ qua mặc định sẽ được sử dụng để bỏ qua một số lớp nội bộ của các module và các lớp PEFT. - skip_modules_classes (
tuple[Type[torch.nn.Module], ...], tùy chọn) — Danh sách các lớp module cần bỏ qua trong quá trình chuyển đổi kiểu theo từng lớp. - non_blocking (
bool, tùy chọn, mặc định làFalse) — NếuTrue, các thao tác chuyển đổi kiểu trọng số sẽ không chặn.
Kích hoạt việc chuyển đổi kiểu dữ liệu theo từng lớp cho mô hình hiện tại.
Layerwise casting là một kỹ thuật chuyển đổi trọng số mô hình sang dtype độ chính xác thấp hơn để lưu trữ, nhưng tự động chuyển đổi chúng lên dtype độ chính xác cao hơn khi tính toán. Quy trình này có thể giảm đáng kể bộ nhớ sử dụng bởi trọng số mô hình, nhưng có thể dẫn đến một số suy giảm chất lượng trong đầu ra. Phần lớn các suy giảm là không đáng kể, chủ yếu bắt nguồn từ việc chuyển đổi trọng số trong các lớp chuẩn hóa và điều biến.
Mặc định, hầu hết các model trong diffusers đặt thuộc tính _skip_layerwise_casting_patterns để bỏ qua các lớp patch embedding, positional embedding và normalization. Điều này là do các lớp này có khả năng cao là nhạy cảm với độ chính xác đối với chất lượng. Nếu bạn muốn thay đổi hành vi này, bạn có thể đặt thuộc tính _skip_layerwise_casting_patterns thành None, hoặc gọi apply_layerwise_casting() với các đối số tùy chỉnh.
Ví dụ:
Sử dụng enable_layerwise_casting():
>>> from diffusers import CogVideoXTransformer3DModel
>>> transformer = CogVideoXTransformer3DModel.from_pretrained(
... "THUDM/CogVideoX-5b", subfolder="transformer", torch_dtype=torch.bfloat16
... )
>>> # Enable layerwise casting via the model, which ignores certain modules by default
>>> transformer.enable_layerwise_casting(storage_dtype=torch.float8_e4m3fn, compute_dtype=torch.bfloat16)Bật npu flash attention từ torch_npu
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Tham số
- attention_op (
Callable, tùy chọn) — Ghi đè toán tử mặc địnhNoneđể sử dụng làm đối sốopcho hàmmemory_efficient_attention()của xFormers.
Bật chú ý tiết kiệm bộ nhớ từ xFormers.
Khi tùy chọn này được bật, bạn nên quan sát thấy mức sử dụng bộ nhớ GPU thấp hơn và khả năng tăng tốc trong quá trình suy luận. Việc tăng tốc trong quá trình huấn luyện không được đảm bảo.
> ⚠️ Khi cả memory efficient attention và sliced attention đều được bật, memory efficient attention sẽ có > ưu tiên.
Ví dụ:
>>> import torch
>>> from diffusers import UNet2DConditionModel
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> model = UNet2DConditionModel.from_pretrained(
... "stabilityai/stable-diffusion-2-1", subfolder="unet", torch_dtype=torch.float16
... )
>>> model = model.to("cuda")
>>> model.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)enable_xla_flash_attention
< source >( partition_spec: typing.Optional[typing.Callable] = None**kwargs )
Bật kernel pallals của flash attention cho torch_xla.
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | None**kwargs )
Tham số
- pretrained_model_name_or_path (
strhoặcos.PathLike, tùy chọn) — 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 save_pretrained().
- Một chuỗi, model id (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. - dtype (
torch.dtype, tùy chọn) — Ghi đètorch.dtypemặc định và tải mô hình với một dtype khác. - 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. - output_loading_info (
bool, tùy chọn, mặc định làFalse) — Có nên trả về một từ điển chứa các khóa bị thiếu, các khóa không mong đợi và thông báo lỗi hay không. - local_files_only(
bool, tuỳ chọn, mặc định làFalse) — Có chỉ tải trọng số và tệp cấu hình mô hình 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ộ. - mirror (
str, optional) — Mirror source to resolve accessibility issues if you’re downloading a model in China. We do not guarantee the timeliness or safety of the source, and you should refer to the mirror site for more information. - device_map (
int | str | torch.devicehoặcdict[str, int | str | torch.device], tuỳ chọn) — Một bản đồ chỉ định vị trí của từng submodule. Không cần định nghĩa cho từng tên parameter/buffer; một khi tên module đã được đưa vào, mọi submodule của nó sẽ được gửi đến cùng một thiết bị. Mặc định làNone, nghĩa là mô hình sẽ được tải lên CPU.Ví dụ:
Tạo một mô hình PyTorch được huấn luyện trước từ cấu hình của một mô hình được huấn luyện trước.
Mô hình được đặt ở chế độ đánh giá - model.eval() - theo mặc định, và các module dropout bị vô hiệu hóa. Để huấn luyện mô hình, hãy đặt lại nó ở chế độ huấn luyện bằng model.train().
> Để sử dụng các mô hình riêng tư hoặc có kiểm soát truy cập, hãy đăng nhập bằng
hf > auth login. Bạn cũng có thể kích hoạt chế độ đặc biệt > “offline-mode” để sử dụng phương pháp này trong môi trường có tường lửa.
Ví dụ:
from diffusers import UNet2DConditionModel
unet = UNet2DConditionModel.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", subfolder="unet")Nếu bạn nhận được thông báo lỗi bên dưới, bạn cần tinh chỉnh trọng số cho tác vụ hạ nguồn của mình:
Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.get_memory_footprint
< source >( return_buffers = True )
Tham số
- return_buffers (
bool, tùy chọn, mặc định làTrue) — Có nên trả về kích thước của các tensor buffer trong quá trình tính toán mức sử dụng bộ nhớ hay không. Buffer là các tensor không yêu cầu gradient và không được đăng ký dưới dạng tham số. Ví dụ: mean và std trong các lớp batch norm. Vui lòng xem: https://discuss.pytorch.org/t/what-pytorch-means-by-buffers/120266/2
Lấy dấu chân bộ nhớ của một mô hình. Hàm này sẽ trả về dấu chân bộ nhớ của mô hình hiện tại tính bằng byte. Có ích để đo lường dấu chân bộ nhớ của mô hình hiện tại và thiết kế một số bài kiểm tra. Giải pháp được lấy cảm hứng từ các cuộc thảo luận trên PyTorch: https://discuss.pytorch.org/t/gpu-memory-that-model-uses/56822/2
số_tham_số
< source >( only_trainable: bool = Falseexclude_embeddings: bool = False ) → int
Lấy số lượng tham số (có thể huấn luyện hoặc không phải nhúng) trong module.
Đặt lại backend chú ý cho mô hình. Các cuộc gọi tiếp theo đến forward sẽ sử dụng mặc định của môi trường, nếu được đặt, hoặc chú ý tích vô hướng có tỷ lệ bản địa của torch.
save_pretrained
< source >( save_directory: str | os.PathLikeis_main_process: bool = Truesave_function: typing.Optional[typing.Callable] = Nonesafe_serialization: bool = Truevariant: str | None = Nonemax_shard_size: int | str = '10GB'push_to_hub: bool = Falseuse_flashpack: bool = False**kwargs )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục để lưu trữ mô hình và tệp cấu hình của nó. 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) — Liệu có lưu mô hình bằngsafetensorshay theo cách truyền thống của PyTorch vớipicklehay không. - variant (
str, tùy chọn) — Nếu được chỉ định, trọng số sẽ được lưu ở định dạngpytorch_model.<variant>.bin. - max_shard_size (
inthoặcstr, mặc định là"10GB") — Kích thước tối đa của một checkpoint trước khi được chia nhỏ. Các checkpoint sau khi chia nhỏ sẽ có kích thước nhỏ hơn mức này. Nếu biểu diễn dưới dạng chuỗi, cần là các chữ số theo sau bởi một đơn vị (ví dụ"5GB"). Nếu biểu diễn dưới dạng số nguyên, đơn vị là byte. Lưu ý rằng giới hạn này sẽ được giảm sau một khoảng thời gian nhất định (bắt đầu từ tháng 10 năm 2024) để cho phép người dùng nâng cấp lên phiên bản mới nhất củadiffusers. Điều này nhằm thiết lập một kích thước mặc định chung cho tham số này giữa các thư viện khác nhau trong hệ sinh thái Hugging Face (ví dụ nhưtransformersvàaccelerate). - push_to_hub (
bool, tùy chọn, mặc định làFalse) — Có đẩy mô hình của bạn lên Hugging Face Hub sau khi lưu hay không. Bạn có thể chỉ định kho lưu trữ muốn đẩy bằngrepo_id(mặc định sẽ là tên củasave_directorytrong không gian tên của bạn). - kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung được truyền đến phương thức push_to_hub().
Lưu một mô hình và tệp cấu hình của nó vào một thư mục để có thể tải lại bằng phương thức lớp from_pretrained().
set_attention_backend
< source >( backend: str )
Đặt backend chú ý cho mô hình.
Đặt công tắc cho npu flash attention.
Một giá trị giả lập cho một đường dẫn có dấu chấm (ví dụ: torch.float32): các chuỗi truy cập thuộc tính, các cuộc gọi hoạt động như các decorator pass-through, repr là đường dẫn có dấu chấm, và việc sử dụng nó như một lớp cơ sở sẽ thay thế bằng một lớp cơ sở type thông thường (PEP 560 __mro_entries__), do đó các lớp con thực sự vẫn giữ nguyên metaclass bình thường và inspect.signature sẽ đọc __init__ thực của chúng thay vì của một mock.
PushToHubMixin
Một Mixin để đẩy mô hình, bộ lập lịch hoặc pipeline lên Hugging Face Hub.
push_to_hub
< source >( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )
Tham số
- repo_id (
str) — Tên của kho mà bạn muốn đẩy tệp mô hình, trình lập lịch hoặc pipeline của mình đến. Nó nên chứa tên tổ chức của bạn khi đẩy đến một tổ chức.repo_idcũng có thể là đường dẫn đến một thư mục cục bộ. - commit_message (
str, tùy chọn) — Thông điệp để commit khi đẩy. Mặc định là"Upload {object}". - private (
bool, optional) — Xác định có làm cho kho (repo) ở chế độ riêng tư hay không. Nếu làNone(mặc định), kho sẽ ở chế độ công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại. - token (
str, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Token được tạo khi chạyhf auth login(được lưu trong~/.huggingface). - create_pr (
bool, tùy chọn, mặc định làFalse) — Có tạo PR với các tệp đã tải lên hay commit trực tiếp hay không. - safe_serialization (
bool, tùy chọn, mặc định làTrue) — Có chuyển đổi trọng số mô hình sang định dạngsafetensorshay không. - variant (
str, tùy chọn) — Nếu được chỉ định, trọng số sẽ được lưu ở định dạngpytorch_model.<variant>.bin.
Tải tệp mô hình, trình lập lịch hoặc pipeline lên 🤗 Hugging Face Hub.
Ví dụ:
from diffusers import UNet2DConditionModel
unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")
# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")
# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")