Diffusers documentation
Pipeline
Pipeline
ModularPipeline
lớp diffusers.ModularPipeline
< source >( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )
Lớp cơ sở cho tất cả các pipeline Modular.
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | Nonetrust_remote_code: bool | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = None**kwargs )
Tham số
- pretrained_model_name_or_path (
strhoặcos.PathLike, tùy chọn) — Đường dẫn đến cấu hình pipeline được huấn luyện trước. Hệ thống sẽ cố gắng tải cấu hình từmodular_model_index.jsontrước, sau đó chuyển sangmodel_index.jsonđể đảm bảo tương thích với các kho lưu trữ chuẩn không dùng kiến trúc modular. Nếu pretrained_model_name_or_path không chứa bất kỳ cấu hình pipeline nào, nó sẽ được đặt thành None trong quá trình khởi tạo. - trust_remote_code (
bool, tùy chọn) — Có tin tưởng mã từ xa khi tải pipeline hay không, cần đặt thành True nếu bạn muốn tạo các khối pipeline dựa trên mã tùy chỉnh trongpretrained_model_name_or_path - components_manager (
ComponentsManager, optional) — Thư mục ComponentsManager để quản lý nhiều thành phần xuyên suốt các pipeline khác nhau và áp dụng các chiến lược offloading. - collection (
str, optional) —` Tên bộ sưu tập để tổ chức các thành phần trong ComponentsManager. - workflow (
str, optional) — Tên của một workflow được khai báo bởi các khối pipeline. Nếu được cung cấp, các khối sẽ được cắt giảm xuống các khối thực thi của workflow đó, do đó pipeline chỉ mong đợi — vàload_components()chỉ tải — các thành phần mà workflow đó sử dụng.
Tải một ModularPipeline từ kho lưu trữ trên huggingface hub.
load_components
< source >( names: list[str] | str | None = Noneworkflow: str | None = None**kwargs )
Tham số
- names — danh sách tên các thành phần cần nạp. Nếu là None, sẽ nạp tất cả các thành phần có default_creation_method == “from_pretrained”. Nếu được cung cấp dưới dạng danh sách hoặc chuỗi, sẽ chỉ nạp các thành phần được chỉ định.
- workflow — tên của một workflow được khai báo bởi các khối pipeline. Nếu được cung cấp, chỉ các thành phần mà các khối thực thi của workflow sử dụng sẽ được tải. Không thể kết hợp với
names. - **kwargs — các kwargs bổ sung để truyền cho
from_pretrained().Có thể là:- một giá trị duy nhất được áp dụng cho tất cả các thành phần cần được nạp, ví dụ dtype=torch.bfloat16
- một dict, ví dụ dtype={“unet”: torch.bfloat16, “default”: torch.float32}
- nếu có thể ghi đè ComponentSpec nếu được truyền một trường nạp khác trong kwargs, ví dụ
pretrained_model_name_or_path,variant,revision, v.v. - nếu có thể ghi đè ComponentSpec nếu được truyền một trường nạp khác trong kwargs, ví dụ
pretrained_model_name_or_path,variant,revision, v.v.
Tải các thành phần đã chọn từ các thông số kỹ thuật.
register_components
< source >( **kwargs )
Đăng ký các thành phần cùng với thông số kỹ thuật tương ứng của chúng.
Phương thức này chịu trách nhiệm cho:
- Đặt các đối tượng thành phần làm thuộc tính trên loader (ví dụ: self.unet = unet)
- Cập nhật dict cấu hình, sẽ được lưu dưới dạng
modular_model_index.jsontrongsave_pretrained(chỉ dành cho các thành phần from_pretrained) - Thêm các thành phần vào trình quản lý thành phần nếu có một trình quản lý được gắn kết (chỉ dành cho các thành phần từ from_pretrained)
Phương thức này được gọi khi:
- Các thành phần được khởi tạo lần đầu trong init:
- các thành phần from_pretrained không được nạp trong init nên chúng được đăng ký là None;
- Các thành phần không có từ_pretrained được tạo trong quá trình init và được đăng ký dưới dạng chính đối tượng đó
- Các thành phần được cập nhật bằng phương thức
update_components(): ví dụ loader.update_components(unet=unet) hoặc loader.update_components(guider=guider_spec) - (from_pretrained) Các thành phần được nạp bằng phương thức
load_components(): ví dụ loader.load_components(names=[“unet”]) hoặc loader.load_components() để nạp tất cả các thành phần mặc định
Ghi chú:
- Khi đăng ký None cho một thành phần, thuộc tính sẽ được đặt thành None nhưng vẫn đồng bộ hóa các thông số với dict cấu hình, vốn sẽ được lưu dưới dạng
modular_model_index.jsontrong quá trìnhsave_pretrained - component_specs được cập nhật để khớp với component mới bên ngoài phương thức này, ví dụ trong phương thức
update_components()
save_pretrained
< source >( save_directory: str | os.PathLikesafe_serialization: bool = Truevariant: str | None = Nonemax_shard_size: int | str | None = Nonepush_to_hub: bool = False**kwargs )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục để lưu pipeline. Sẽ được tạo nếu chưa tồn tại. - 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àNone) — 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 giá trị 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. - push_to_hub (
bool, tùy chọn, mặc định làFalse) — Có nên đẩy pipeline lên Hugging Face model hub sau khi lưu nó hay không. - **kwargs — Các tham số từ khóa bổ sung:
overwrite_modular_index(bool, tùy chọn, mặc định làTrue): Có nên cập nhậtmodular_model_index.jsonđể thông số tải của từng thành phần được lưu trỏ đến đích:repo_idkhi đẩy lên Hub, nếu không thì làsave_directory. Các thành phần không được tải sẽ không được lưu và luôn giữ nguyên thông số tải đã ghi nhận. TruyềnFalseđể cũng giữ nguyên thông số tải đã ghi nhận của các thành phần đang được lưu (ví dụ cho một index cố ý tham chiếu các kho khác); các thành phần không có id tải (chẳng hạn như các model tùy chỉnh được thêm bằngupdate_components) vẫn sẽ được viết lại vì chúng không có nguồn đã ghi nhận.repo_id(str, tùy chọn): ID của kho để đẩy pipeline đến. Mặc định là thành phần cuối cùng củasave_directory.commit_message(str, tùy chọn): Thông báo commit cho thao tác đẩy lên hub.private(bool, tùy chọn): Xác định xem kho có nên là kho riêng tư hay không.create_pr(bool, tùy chọn, mặc định làFalse): Có tạo pull request thay vì đẩy trực tiếp hay không.token(str, tùy chọn): Token Hugging Face được sử dụng để xác thực.
Lưu pipeline và tất cả các thành phần 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().
đến
< source >( *args**kwargs ) → DiffusionPipeline
Tham số
- dtype (
torch.dtype, tùy chọn) — Trả về một pipeline vớidtypeđược chỉ định - device (
torch.Device, tùy chọn) — Trả về một pipeline vớideviceđược chỉ định - silence_dtype_warnings (
str, tùy chọn, mặc định làFalse) — Có nên bỏ qua các cảnh báo nếudtypeđích không tương thích vớideviceđích hay không.
Trả về
Pipeline đã được chuyển đổi sang dtype và/hoặc dtype được chỉ định.
Thực hiện chuyển đổi dtype và/hoặc device của Pipeline. Một torch.dtype và torch.device được suy ra từ các đối số của self.to(*args, **kwargs).
> Nếu pipeline đã có torch.dtype và torch.device đúng, thì nó được trả về nguyên vẹn. Ngược lại, > pipeline được trả về là bản sao của self với torch.dtype và torch.device mong muốn.
Dưới đây là các cách để gọi to:
to(dtype, silence_dtype_warnings=False) → DiffusionPipelineđể trả về một pipeline vớidtypeđược chỉ địnhto(device, silence_dtype_warnings=False) → DiffusionPipelineđể trả về một pipeline vớideviceđược chỉ địnhto(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipelineđể trả về một pipeline vớidevicevàdtypeđược chỉ định
unload_components
< source >( names: list[str] | str )
Gỡ các thành phần đã chọn, giải phóng bộ nhớ của chúng.
Thuộc tính component được đặt lại về None và, nếu có gắn một ComponentsManager, component sẽ bị gỡ bỏ khỏi nó. Spec của component không bị thay đổi, do đó component có thể được tải lại sau đó bằng load_components().
update_components
< source >( **kwargs )
Tham số
- **kwargs — Các đối tượng thành phần hoặc giá trị cấu hình cần cập nhật:
- Các đối tượng thành phần: Các mô hình được nạp bằng
AutoModel.from_pretrained()hoặcComponentSpec.load()được gắn nhãn tự động với thông tin nạp. Các đối tượng ConfigMixin không có trọng số (ví dụ: schedulers, guiders) có thể được truyền trực tiếp. - Giá trị cấu hình: Các giá trị đơn giản để cập nhật cài đặt cấu hình
(ví dụ:
requires_safety_checker=False)
- Các đối tượng thành phần: Các mô hình được nạp bằng
Cập nhật các thành phần và giá trị cấu hình cũng như thông số kỹ thuật sau khi pipeline đã được khởi tạo.
Phương pháp này cho phép bạn:
- Thay thế các thành phần hiện có bằng những thành phần mới (ví dụ: cập nhật
self.unethoặcself.text_encoder) - Cập nhật các giá trị cấu hình (ví dụ: thay đổi cờ
self.requires_safety_checker)
Ngoài việc cập nhật các thành phần và giá trị cấu hình dưới dạng thuộc tính của pipeline, phương thức này còn cập nhật:
- các thông số tương ứng trong
_component_specsvà_config_specs - từ điển
config, sẽ được lưu dưới dạngmodular_model_index.jsontrong quá trìnhsave_pretrained
Ví dụ:
# Update pre-trained model
pipeline.update_components(unet=new_unet_model, text_encoder=new_text_encoder)
# Update configuration values
pipeline.update_components(requires_safety_checker=False)Ghi chú:
- Các thành phần được nạp bằng
AutoModel.from_pretrained()hoặcComponentSpec.load()sẽ được giữ lại thông tin cấu hình nạp (loading specs) để phục vụ cho việc xuất chuỗi (serialization). Các thành phần tùy chỉnh hoặc được nạp cục bộ mà không có tham chiếu đến Hub sẽ có các mục trongmodular_model_index.jsoncủa chúng được cập nhật tự động trong quá trìnhsave_pretrained(). - Các đối tượng ConfigMixin không có trọng số (ví dụ: scheduler, guider) có thể được truyền trực tiếp.