# Pipeline

## ModularPipeline[[diffusers.ModularPipeline]]

#### diffusers.ModularPipeline[[diffusers.ModularPipeline]]

```python
diffusers.ModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1700)

**Tham số:**

blocks : ModularPipelineBlocks, các khối được sử dụng trong pipeline

Lớp cơ sở cho tất cả các pipeline Modular.

#### from_pretrained[[diffusers.ModularPipeline.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | os.PathLike | None, trust_remote_code: bool | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1925)

**Tham số:**

pretrained_model_name_or_path (`str` hoặc `os.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.json` trước, sau đó chuyển sang `model_index.json` để đảm bảo tương thích với các kho lưu trữ chuẩn không modular. Nếu pretrained_model_name_or_path không chứa bất kỳ cấu hình pipeline nào, giá trị này sẽ được đặt thành None trong quá trình khởi tạo.

trust_remote_code (`bool`, optional) : 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 trong `pretrained_model_name_or_path`

components_manager (`ComponentsManager`, tùy chọn) : Instance của ComponentsManager để quản lý nhiều component xuyên suốt các pipeline khác nhau và áp dụng các chiến lược offloading.

collection (`str`, tùy chọn) -- 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.

#### get_component_spec[[diffusers.ModularPipeline.get_component_spec]]

```python
get_component_spec(name: str)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2401)

**Trả về:**

- một bản sao của đối tượng ComponentSpec cho tên thành phần được chỉ định

#### load_components[[diffusers.ModularPipeline.load_components]]

```python
load_components(names: list[str] | str | None = None, workflow: str | None = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2489)

**Tham số:**

names : danh sách tên các thành phần cần tải. Nếu là None, sẽ tải 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ỉ tải 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 vào `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 tải, 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 tải 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 tải 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[[diffusers.ModularPipeline.register_components]]

```python
register_components(**kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2186)

**Tham số:**

- ****kwargs** : Các đối số dạng từ khóa, trong đó các khóa là tên thành phần và các giá trị là các đối tượng thành phần. Ví dụ: register_components(unet=unet_model, text_encoder=encoder_model)

Đă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:
1. Đặt các đối tượng thành phần làm thuộc tính trên loader (ví dụ: self.unet = unet)
2. Cập nhật dict cấu hình, sẽ được lưu dưới dạng `modular_model_index.json` trong quá trình `save_pretrained` (chỉ dành cho các thành phần from_pretrained)
3. 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 từ điển cấu hình, vốn sẽ được lưu dưới dạng `modular_model_index.json` trong quá trình `save_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[[diffusers.ModularPipeline.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, safe_serialization: bool = True, variant: str | None = None, max_shard_size: int | str | None = None, push_to_hub: bool = False, **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2026)

**Tham số:**

save_directory (`str` hoặc `os.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`) : 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.

variant (`str`, *tùy chọn*) : Nếu được chỉ định, trọng số sẽ được lưu ở định dạng `pytorch_model.<variant>.bin`.

max_shard_size (`int` hoặc `str`, 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ó đẩy pipeline lên Hugging Face model hub sau khi lưu nó hay không.

- ****kwargs** : Các đối số từ khóa bổ sung: - `overwrite_modular_index` (`bool`, *tùy chọn*, mặc định là `True`): Có cập nhật `modular_model_index.json` để thông số nạp của từng thành phần được lưu trỏ đến đích: `repo_id` khi đẩy lên Hub, nếu không thì là `save_directory`. Các thành phần không được nạp sẽ không được lưu và luôn giữ nguyên thông số nạp đã ghi nhận. Truyền `False` để cũng giữ nguyên thông số đã ghi nhận của các thành phần đang được lưu (ví dụ: cho một chỉ mục cố ý tham chiếu các kho lưu trữ khác); các thành phần không có id nạp (chẳng hạn như các mô hình tùy chỉnh được thêm bằng `update_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 kho lưu trữ để đẩy pipeline đến. Mặc định là thành phần cuối của `save_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*): Kho lưu trữ có nên ở chế độ riêng tư 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 không. - `token` (`str`, *tùy chọn*): Token Hugging Face để sử dụng cho 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()](/docs/diffusers/main/vi/api/modular_diffusers/pipeline#diffusers.ModularPipeline.from_pretrained).

#### đến[[diffusers.ModularPipeline.to]]

```python
to(*args, **kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2651)

**Tham số:**

dtype (`torch.dtype`, *tùy chọn*) : Trả về một pipeline với [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) được chỉ định

device (`torch.Device`, *tùy chọn*) : Trả về một pipeline với [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) đượ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ếu `dtype` đích không tương thích với `device` đích hay không.

**Trả về:** [DiffusionPipeline](/docs/diffusers/main/vi/api/pipelines/overview#diffusers.DiffusionPipeline)

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).`

> [!TIP] > Nếu pipeline đã có torch.dtype và torch.device đúng, thì nó sẽ đượ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ới [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) được chỉ định
- `to(device, silence_dtype_warnings=False) → DiffusionPipeline` để trả về một pipeline với [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) được chỉ định
- `to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline` để trả về một pipeline với [`device`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.device) và [`dtype`](https://pytorch.org/docs/stable/tensor_attributes.html#torch.dtype) được chỉ định

#### unload_components[[diffusers.ModularPipeline.unload_components]]

```python
unload_components(names: list[str] | str)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2595)

**Tham số:**

names : tên thành phần hoặc danh sách tên thành phần cần unmount.

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ỡ 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[[diffusers.ModularPipeline.update_components]]

```python
update_components(**kwargs)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L2408)

**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: - Đối tượng thành phần: Các mô hình được nạp bằng `AutoModel.from_pretrained()` hoặc `ComponentSpec.load()` sẽ được gắn thẻ thông tin nạp tự động. 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. - 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ậ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:
1. 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.unet` hoặc `self.text_encoder`)
2. 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ũng cập nhật:
- các thông số tương ứng trong `_component_specs` và `_config_specs`
- từ điển `config`, sẽ được lưu dưới dạng `modular_model_index.json` trong quá trình `save_pretrained`

Ví dụ:
```python
# 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ặc `ComponentSpec.load()` sẽ có
loading specs được giữ lại để phục vụ cho việc serialization. Các thành phần tùy chỉnh hoặc được tải cục bộ mà không có tham chiếu đến Hub sẽ có các mục trong `modular_model_index.json` của chúng được cập nhật tự động trong quá trình `save_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.

