# Các khối Pipeline

## ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

#### diffusers.ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

```python
diffusers.ModularPipelineBlocks()
```

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

Lớp cơ sở cho tất cả các Khối Pipeline: ConditionalPipelineBlocks, AutoPipelineBlocks, SequentialPipelineBlocks, LoopSequentialPipelineBlocks

[ModularPipelineBlocks](/docs/diffusers/v0.43.0/vi/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) cung cấp phương thức để tải và lưu trữ định nghĩa của các khối pipeline.

#### get_block_state[[diffusers.ModularPipelineBlocks.get_block_state]]

```python
get_block_state(state: PipelineState)
```

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

Lấy tất cả các đầu vào và các giá trị trung gian trong một từ điển

#### get_execution_blocks[[diffusers.ModularPipelineBlocks.get_execution_blocks]]

```python
get_execution_blocks(**kwargs)
```

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

**Tham số:**

- ****kwargs** : Tên và giá trị của các đầu vào. Chỉ các đầu vào kích hoạt mới ảnh hưởng đến việc chọn khối.

Lấy khối (hoặc các khối) sẽ được thực thi dựa trên các đầu vào. Phải được triển khai bởi các lớp con hỗ trợ chọn khối có điều kiện.

#### get_workflow[[diffusers.ModularPipelineBlocks.get_workflow]]

```python
get_workflow(workflow_name: str)
```

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

**Tham số:**

workflow_name : Tên của workflow cần truy xuất.

Lấy các khối thực thi cho một workflow cụ thể. Phải được triển khai bởi các lớp con định nghĩa `_workflow_map`.

#### init_pipeline[[diffusers.ModularPipelineBlocks.init_pipeline]]

```python
init_pipeline(pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None)
```

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

tạo một ModularPipeline, tùy chọn chấp nhận pretrained_model_name_or_path để tải từ hub.

## SequentialPipelineBlocks[[diffusers.SequentialPipelineBlocks]]

#### diffusers.SequentialPipelineBlocks[[diffusers.SequentialPipelineBlocks]]

```python
diffusers.SequentialPipelineBlocks()
```

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

**Tham số:**

block_classes : danh sách các lớp khối sẽ được sử dụng

block_names : danh sách các tiền tố cho mỗi khối

Một Pipeline Blocks kết hợp nhiều lớp pipeline block thành một. Khi được gọi, nó sẽ gọi từng block theo thứ tự.

Lớp này kế thừa từ [ModularPipelineBlocks](/docs/diffusers/v0.43.0/vi/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các khối pipeline (chẳng hạn như tải hoặc lưu, v.v.)

#### from_blocks_dict[[diffusers.SequentialPipelineBlocks.from_blocks_dict]]

```python
from_blocks_dict(blocks_dict: dict[str, typing.Any], description: str | None = None)
```

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

**Tham số:**

blocks_dict : Từ điển ánh xạ tên khối đến các lớp hoặc instance của khối

**Trả về:**

Một instance mới của SequentialPipelineBlocks

Tạo một instance của SequentialPipelineBlocks từ một từ điển các khối.

#### get_execution_blocks[[diffusers.SequentialPipelineBlocks.get_execution_blocks]]

```python
get_execution_blocks(**kwargs)
```

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

**Tham số:**

- ****kwargs** : Tên và giá trị của các đầu vào. Chỉ các đầu vào kích hoạt mới ảnh hưởng đến việc chọn khối.

**Trả về:**

SequentialPipelineBlocks chỉ chứa các khối sẽ được thực thi

Lấy các khối sẽ được thực thi dựa trên các đầu vào được chỉ định.

Khi quá trình duyệt đi qua các khối tuần tự, các đầu ra trung gian từ các khối đã được giải quyết sẽ được thêm vào các đầu vào đang hoạt động. Điều này có nghĩa là các khối điều kiện phụ thuộc vào các giá trị trung gian (ví dụ: "chạy img2img nếu image_latents có mặt") sẽ được giải quyết chính xác, miễn là điều kiện dựa trên sự hiện diện hay vắng mặt (None hoặc không phải None), chứ không phải dựa trên giá trị thực tế.

## LoopSequentialPipelineBlocks[[diffusers.LoopSequentialPipelineBlocks]]

#### diffusers.LoopSequentialPipelineBlocks[[diffusers.LoopSequentialPipelineBlocks]]

```python
diffusers.LoopSequentialPipelineBlocks()
```

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

**Tham số:**

block_classes : danh sách các lớp khối sẽ được sử dụng

block_names : danh sách các tiền tố cho mỗi khối

Pipeline blocks là các khối kết hợp nhiều lớp khối pipeline khác nhau vào một vòng lặp For. Khi được gọi, nó sẽ gọi từng khối theo thứ tự.

Lớp này kế thừa từ [ModularPipelineBlocks](/docs/diffusers/v0.43.0/vi/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các khối pipeline (chẳng hạn như tải hoặc lưu, v.v.)

#### from_blocks_dict[[diffusers.LoopSequentialPipelineBlocks.from_blocks_dict]]

```python
from_blocks_dict(blocks_dict: dict[str, typing.Any])
```

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

**Tham số:**

blocks_dict : Từ điển ánh xạ tên khối đến các instance của khối

**Trả về:**

Một instance mới của LoopSequentialPipelineBlocks

Tạo một instance của LoopSequentialPipelineBlocks từ một từ điển các blocks.

## AutoPipelineBlocks[[diffusers.AutoPipelineBlocks]]

#### diffusers.AutoPipelineBlocks[[diffusers.AutoPipelineBlocks]]

```python
diffusers.AutoPipelineBlocks()
```

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

**Tham số:**

block_classes : Danh sách các lớp khối sẽ được sử dụng. Phải có cùng độ dài với `block_names` và `block_trigger_inputs`.

block_names : Danh sách tên cho mỗi khối. Phải có cùng độ dài với `block_classes` và `block_trigger_inputs`.

block_trigger_inputs : Danh sách tên đầu vào, trong đó mỗi phần tử chỉ định đầu vào kích hoạt cho khối tương ứng. Sử dụng `None` để đánh dấu khối mặc định.

Một Pipeline Blocks tự động chọn khối để chạy dựa trên sự hiện diện của các đầu vào kích hoạt.

Đây là một phiên bản chuyên dụng của `ConditionalPipelineBlocks` trong đó:
- Mỗi khối có một đầu vào kích hoạt tương ứng (lớp ánh xạ 1:1)
- Việc chọn khối là tự động: khối đầu tiên có đầu vào kích hoạt sẽ được chọn
- `block_trigger_inputs` phải có cùng độ dài với `block_names` và `block_classes`
- Sử dụng `None` trong `block_trigger_inputs` để chỉ định khối mặc định, tức là khối sẽ được thực thi nếu không có đầu vào kích hoạt nào

Ví dụ:
```python
    class MyAutoBlock(AutoPipelineBlocks):
        block_classes = [InpaintEncoderBlock, ImageEncoderBlock, TextEncoderBlock]
        block_names = ["inpaint", "img2img", "text2img"]
        block_trigger_inputs = ["mask_image", "image", None]  # text2img is the default
```

Với định nghĩa này:
- Miễn là `mask_image` được cung cấp, khối "inpaint" sẽ được thực thi (bất kể `image` có được cung cấp hay không)
- Nếu `mask_image` không được cung cấp nhưng `image` được cung cấp, khối "img2img" sẽ chạy
- Ngược lại, khối "text2img" sẽ được thực thi (mặc định, kích hoạt là `None`)

#### select_block[[diffusers.AutoPipelineBlocks.select_block]]

```python
select_block(**kwargs)
```

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

Chọn khối dựa trên đầu vào kích hoạt nào có mặt (không phải None).

## ConditionalPipelineBlocks[[diffusers.ConditionalPipelineBlocks]]

#### diffusers.ConditionalPipelineBlocks[[diffusers.ConditionalPipelineBlocks]]

```python
diffusers.ConditionalPipelineBlocks()
```

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

**Tham số:**

block_classes : Danh sách các lớp khối sẽ được sử dụng. Phải có cùng độ dài với `block_names`.

block_names : Danh sách tên cho mỗi khối. Phải có cùng độ dài với `block_classes`.

block_trigger_inputs : Danh sách tên đầu vào mà `select_block()` sử dụng để xác định khối nào cần chạy. Đối với `ConditionalPipelineBlocks`, danh sách này không cần tương ứng với `block_names` và `block_classes`. Đối với `AutoPipelineBlocks`, danh sách này phải có cùng độ dài với `block_names` và `block_classes`, trong đó mỗi phần tử chỉ định đầu vào kích hoạt cho khối tương ứng.

default_block_name : Tên của khối mặc định để chạy khi không có đầu vào kích hoạt nào khớp. Nếu là None, khối này có thể bị bỏ qua hoàn toàn khi không có đầu vào kích hoạt nào được cung cấp.

Một Pipeline Blocks chọn có điều kiện một block để chạy dựa trên các đầu vào. Các lớp con phải triển khai phương thức `select_block` để định nghĩa logic chọn block. Hiện tại, chúng tôi chỉ hỗ trợ logic chọn dựa trên sự hiện diện hoặc vắng mặt của các đầu vào (tức là chúng có phải là `None` hay không)

Lớp này kế thừa từ [ModularPipelineBlocks](/docs/diffusers/v0.43.0/vi/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các khối pipeline (chẳng hạn như tải hoặc lưu, v.v.)

#### get_execution_blocks[[diffusers.ConditionalPipelineBlocks.get_execution_blocks]]

```python
get_execution_blocks(**kwargs)
```

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

**Tham số:**

- ****kwargs** : Tên và giá trị của các đầu vào. Chỉ các đầu vào kích hoạt mới ảnh hưởng đến việc chọn khối.

**Trả về:** - `ModularPipelineBlocks`

Một khối lá hoặc `SequentialPipelineBlocks` đã được giải quyết
- `None`: Nếu khối này bị bỏ qua (không có bộ kích hoạt nào khớp và không có giá trị mặc định)

Lấy khối (các khối) sẽ được thực thi dựa trên các đầu vào.

Giải quyết đệ quy các ConditionalPipelineBlocks lồng nhau cho đến khi đạt được một trong các điều kiện sau:
- Một khối lá (không có sub_blocks hay LoopSequentialPipelineBlocks) → trả về một `ModularPipelineBlocks` đơn
- Một `SequentialPipelineBlocks` → chuyển tiếp đến `get_execution_blocks()` của nó, hàm này trả về
một `SequentialPipelineBlocks` chứa các khối thực thi đã được phân giải

#### select_block[[diffusers.ConditionalPipelineBlocks.select_block]]

```python
select_block(**kwargs)
```

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

**Tham số:**

- ****kwargs** : Tên và giá trị của các đầu vào kích hoạt từ trạng thái.

**Trả về:** `str | None`

Tên của khối cần chạy, hoặc None để sử dụng mặc định/bỏ qua.

Chọn khối để chạy dựa trên các đầu vào kích hoạt. Các lớp con phải triển khai phương thức này để định nghĩa logic cho việc chọn khối.

Lưu ý: Khi các đầu vào kích hoạt bao gồm các đầu ra trung gian từ các khối trước đó, logic chọn lọc chỉ nên phụ thuộc vào sự hiện diện hay vắng mặt của đầu vào (tức là có phải là None hay không), chứ không phải giá trị thực tế của nó. Điều này là do `get_execution_blocks()` giải quyết các điều kiện một cách tĩnh bằng cách lan truyền tên của các đầu ra trung gian mà không kèm theo giá trị thời gian chạy của chúng.

