# Các thành phần và cấu hình

## ComponentSpec[[diffusers.ComponentSpec]]

#### diffusers.ComponentSpec[[diffusers.ComponentSpec]]

```python
diffusers.ComponentSpec(name: str | None = None, type_hint: typing.Optional[typing.Type] = None, description: str | None = None, config: diffusers.configuration_utils.FrozenDict | None = None, pretrained_model_name_or_path: str | list[str] | None = None, subfolder: str | None = '', variant: str | None = None, revision: str | None = None, default_creation_method: typing.Literal['from_config', 'from_pretrained'] = 'from_pretrained', repo: str | list[str] | None = None)
```

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

**Tham số:**

name : Tên của thành phần

type_hint : Kiểu của thành phần (ví dụ: UNet2DConditionModel)

description : Mô tả tùy chọn của thành phần

config : Dict cấu hình tùy chọn cho việc tạo __init__

pretrained_model_name_or_path : Đường dẫn pretrained_model_name_or_path tùy chọn để tạo từ from_pretrained

subfolder : Thư mục con tùy chọn trong pretrained_model_name_or_path

variant : Biến thể tùy chọn trong pretrained_model_name_or_path

revision : Phiên bản tùy chọn trong pretrained_model_name_or_path

default_creation_method : Phương pháp tạo được ưu tiên - "from_config" hoặc "from_pretrained"

Quy cách cho một thành phần pipeline.

Một thành phần có thể được tạo theo hai cách:
1. Từ đầu bằng __init__ với một dict cấu hình
2. sử dụng `from_pretrained`

#### tạo[[diffusers.ComponentSpec.create]]

```python
create(config: diffusers.configuration_utils.FrozenDict | dict[str, typing.Any] | None = None, **kwargs)
```

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

Tạo component bằng cách sử dụng from_config với config.

#### decode_load_id[[diffusers.ComponentSpec.decode_load_id]]

```python
decode_load_id(load_id: str)
```

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

**Tham số:**

load_id : Chuỗi load_id cần giải mã, định dạng: "pretrained_model_name_or_path|subfolder|variant|revision" trong đó các giá trị None được biểu diễn là "null"

**Trả về:**

Dict ánh xạ tên trường nạp vào giá trị tương ứng. Ví dụ: { "pretrained_model_name_or_path": "path/to/repo", "subfolder": "subfolder", "variant": "variant", "revision": "revision" } Nếu giá trị của một phân đoạn là "null", nó sẽ được thay thế bằng None. Trả về None nếu load_id là "null" (cho thấy thành phần không được tạo bằng phương thức `load`).

Giải mã chuỗi load_id thành một từ điển chứa các trường và giá trị nạp.

#### from_component[[diffusers.ComponentSpec.from_component]]

```python
from_component(name: str, component: Any)
```

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

**Tham số:**

name : Tên của thành phần

component : Đối tượng Component để tạo spec từ đó

**Trả về:**

Đối tượng ComponentSpec

**Lỗi:** ``ValueError``

- ``ValueError`` -- Nếu component không được hỗ trợ (ví dụ: nn.Module không có load_id, không phải ConfigMixin)

Tạo một ComponentSpec từ một Component.

Hiện hỗ trợ:
- Các thành phần được tạo bằng phương thức `ComponentSpec.load()`
- Các thành phần là lớp con của ConfigMixin nhưng không phải là nn.Module (ví dụ: scheduler, guider)

#### load[[diffusers.ComponentSpec.load]]

```python
load(**kwargs)
```

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

Tải component bằng from_pretrained.

#### loading_fields[[diffusers.ComponentSpec.loading_fields]]

```python
loading_fields()
```

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

Trả về tên của tất cả các trường liên quan đến việc nạp (tức là những trường có field.metadata["loading"] là True).

## ConfigSpec[[diffusers.ConfigSpec]]

#### diffusers.ConfigSpec[[diffusers.ConfigSpec]]

```python
diffusers.ConfigSpec(name: str, default: Any, description: str | None = None)
```

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

Quy cách cho một tham số cấu hình pipeline.

## ComponentsManager[[diffusers.ComponentsManager]]

#### diffusers.ComponentsManager[[diffusers.ComponentsManager]]

```python
diffusers.ComponentsManager()
```

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

Một hệ thống đăng ký và quản lý trung tâm cho các thành phần mô hình trên nhiều pipeline khác nhau.

[ComponentsManager](/docs/diffusers/main/vi/api/modular_diffusers/pipeline_components#diffusers.ComponentsManager) cung cấp một cách thống nhất để đăng ký, theo dõi và tái sử dụng các thành phần mô hình (như UNet, VAE, text encoders, v.v.) xuyên suốt các pipeline modular khác nhau. Nó bao gồm các tính năng phát hiện trùng lặp, quản lý bộ nhớ và tổ chức thành phần.

> [!WARNING] > Đây là một tính năng thử nghiệm và có thể sẽ thay đổi trong tương lai.

Ví dụ:
```python
from diffusers import ComponentsManager

# Create a components manager
cm = ComponentsManager()

# Add components
cm.add("unet", unet_model, collection="sdxl")
cm.add("vae", vae_model, collection="sdxl")

# Enable auto offloading
cm.enable_auto_cpu_offload()

# Retrieve components
unet = cm.get_one(name="unet", collection="sdxl")
```

#### thêm[[diffusers.ComponentsManager.add]]

```python
add(name: str, component: Any, collection: str | None = None)
```

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

**Tham số:**

name (str) : Tên của thành phần

component (Bất kỳ) : Thành phần cần thêm

collection (str | None) : Bộ sưu tập để thêm thành phần vào

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

ID thành phần duy nhất, được tạo dưới dạng "{name}_{id(component)}" trong đó id(component) là định danh duy nhất tích hợp sẵn của Python cho đối tượng

Thêm một thành phần vào ComponentsManager.

#### disable_auto_cpu_offload[[diffusers.ComponentsManager.disable_auto_cpu_offload]]

```python
disable_auto_cpu_offload()
```

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

Tắt tính năng chuyển CPU tự động cho tất cả các thành phần.

#### enable_auto_cpu_offload[[diffusers.ComponentsManager.enable_auto_cpu_offload]]

```python
enable_auto_cpu_offload(device: str | int | torch.device = None, memory_reserve_margin = '3GB', offload_strategy = None)
```

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

**Tham số:**

device (str | int | torch.device) : Thiết bị thực thi mà các mô hình được chuyển đến để thực hiện các bước truyền thẳng

memory_reserve_margin (str) : Biên dự phòng bộ nhớ cần sử dụng, mặc định là 3GB. Đây là lượng bộ nhớ cần giữ trống trên thiết bị để tránh hết bộ nhớ trong quá trình thực thi mô hình (ví dụ: cho các kích hoạt trung gian, gradient, v.v.)

offload_strategy : Bất kỳ callable nào có chữ ký `(hooks, model_id, model, execution_device) -> hooks`, trả về các model resident cần offload trước khi model sắp tới được nạp. Mặc định là `AutoOffloadStrategy`, giải phóng tổ hợp nhỏ nhất đủ điều kiện.

Bật tính năng offload CPU tự động cho tất cả các thành phần.

Thuật toán hoạt động như sau:
1. Tất cả các mô hình đều bắt đầu trên CPU theo mặc định
2. Khi forward pass của một model được gọi, nó sẽ được chuyển đến thiết bị thực thi
3. Nếu bộ nhớ không đủ, các mô hình khác trên thiết bị sẽ được chuyển trở lại CPU
4. Hệ thống cố gắng offload tổ hợp các model nhỏ nhất sao cho giải phóng đủ bộ nhớ
5. Các mô hình sẽ ở lại trên thiết bị thực thi cho đến khi một mô hình khác cần bộ nhớ và buộc chúng phải rời đi

Một mô hình thuộc nhóm offload tham gia vào quá trình này nhưng tự đặt vị trí của mình: nó vẫn có thể tạo chỗ trống bằng cách di chuyển các mô hình khác sang một bên, và không bao giờ bị di chuyển để nhường chỗ cho chúng. Thứ tự nào cũng được — offload nhóm trước hoặc sau khi bật tính năng này. `AutoOffloadStrategy` đưa ra quyết định dựa trên dung lượng bộ nhớ của mô hình, vốn không mô tả một mô hình chỉ giữ một nhóm tại một thời điểm, vì vậy hãy truyền một `offload_strategy` đưa ra quyết định dựa trên quy trình làm việc.

#### get_components_by_ids[[diffusers.ComponentsManager.get_components_by_ids]]

```python
get_components_by_ids(ids: list[str], return_dict_with_names: bool | None = True)
```

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

**Tham số:**

ids (list[str]) : danh sách các ID thành phần

return_dict_with_names (bool | None) : Có nên trả về một từ điển với tên các thành phần làm khóa không:

**Trả về:** dict[str, Any]

Từ điển các thành phần.
- Nếu return_dict_with_names=True, các khóa là tên của các thành phần.
- Nếu return_dict_with_names=False, các khóa là ID của các thành phần.

**Lỗi:** ``ValueError``

- ``ValueError`` -- Nếu tìm thấy các tên thành phần trùng lặp trong kết quả tìm kiếm khi return_dict_with_names=True

Lấy các thành phần theo một danh sách ID.

#### get_components_by_names[[diffusers.ComponentsManager.get_components_by_names]]

```python
get_components_by_names(names: list[str], collection: str | None = None)
```

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

**Tham số:**

names (list[str]) : danh sách tên các thành phần

collection (str | None) : Bộ sưu tập tùy chọn để lọc

**Trả về:** dict[str, Any]

Từ điển các thành phần với tên thành phần làm khóa

**Lỗi:** ``ValueError``

- ``ValueError`` -- Nếu tìm thấy các tên thành phần trùng lặp trong kết quả tìm kiếm

Lấy các thành phần theo một danh sách tên, tùy chọn lọc theo bộ sưu tập.

#### get_ids[[diffusers.ComponentsManager.get_ids]]

```python
get_ids(names: str | list[str] = None, collection: str | None = None)
```

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

**Tham số:**

names (str | list[str]) : danh sách tên các thành phần

collection (str | None) : Bộ sưu tập tùy chọn để lọc

**Trả về:** list[str]

danh sách ID thành phần

Lấy các ID thành phần theo một danh sách tên, tùy chọn lọc theo bộ sưu tập.

#### get_model_info[[diffusers.ComponentsManager.get_model_info]]

```python
get_model_info(component_id: str, fields: str | list[str] | None = None)
```

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

**Tham số:**

component_id (str) : Tên của thành phần cần lấy thông tin

fields (str | list[str] | None) : Trường (hoặc các trường) cần trả về. Có thể là một chuỗi cho một trường duy nhất hoặc một danh sách các trường. Nếu là None, sẽ sử dụng cài đặt available_info_fields.

**Trả về:**

Từ điển chứa metadata của thành phần được yêu cầu. Nếu fields được chỉ định, chỉ trả về các trường đó. Ngược lại, trả về tất cả các trường.

Lấy thông tin chi tiết về một thành phần.

#### get_one[[diffusers.ComponentsManager.get_one]]

```python
get_one(component_id: str | None = None, name: str | None = None, collection: str | None = None, load_id: str | None = None)
```

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

**Tham số:**

component_id (str | None) : ID thành phần tùy chọn để lấy

name (str | None) : Tên hoặc mẫu của thành phần

collection (str | None) : Bộ sưu tập tùy chọn để lọc

load_id (str | None) : load_id tùy chọn để lọc

**Trả về:**

Một thành phần duy nhất

**Lỗi:** ``ValueError``

- ``ValueError`` -- Nếu không có thành phần nào khớp hoặc có nhiều thành phần khớp

Lấy một thành phần duy nhất bằng cách:
- tìm kiếm theo tên (khớp mẫu), bộ sưu tập, hoặc load_id.
- truyền vào một component_id
Gây ra lỗi nếu nhiều thành phần khớp hoặc không tìm thấy thành phần nào.

#### xóa[[diffusers.ComponentsManager.remove]]

```python
remove(component_id: str = None)
```

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

**Tham số:**

component_id (str) : ID của thành phần cần xóa

Xóa một thành phần khỏi ComponentsManager.

#### remove_from_collection[[diffusers.ComponentsManager.remove_from_collection]]

```python
remove_from_collection(component_id: str, collection: str)
```

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

Xóa một thành phần khỏi bộ sưu tập.

#### search_components[[diffusers.ComponentsManager.search_components]]

```python
search_components(names: str | None = None, collection: str | None = None, load_id: str | None = None, return_dict_with_names: bool = True)
```

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

**Tham số:**

names : Tên hoặc mẫu của thành phần Các mẫu: - "unet" : khớp với bất kỳ thành phần nào có tên cơ sở là "unet" (ví dụ: unet_123abc) - "!unet" : mọi thứ ngoại trừ các thành phần có tên cơ sở là "unet" - "unet*" : mọi thứ có tên cơ sở bắt đầu bằng "unet" - "!unet*" : mọi thứ có tên cơ sở KHÔNG bắt đầu bằng "unet" - "*unet*" : mọi thứ có tên cơ sở chứa "unet" - "!*unet*" : mọi thứ có tên cơ sở KHÔNG chứa "unet" - "refiner|vae|unet" : mọi thứ có tên cơ sở khớp chính xác với "refiner", "vae" hoặc "unet" - "!refiner|vae|unet" : mọi thứ có tên cơ sở KHÔNG khớp chính xác với "refiner", "vae" hoặc "unet" - "unet*|vae*" : mọi thứ có tên cơ sở bắt đầu bằng "unet" HOẶC bắt đầu bằng "vae"

collection : Bộ sưu tập tùy chọn để lọc

load_id : load_id tùy chọn để lọc theo

return_dict_with_names : Nếu là True, trả về một từ điển với tên các thành phần làm khóa, và ném ra lỗi nếu tìm thấy nhiều thành phần có cùng tên. Nếu là False, trả về một từ điển với ID của các thành phần làm khóa

**Trả về:**

Từ điển ánh xạ tên thành phần tới các thành phần nếu return_dict_with_names=True, hoặc một từ điển ánh xạ ID thành phần tới các thành phần nếu return_dict_with_names=False

Tìm kiếm các thành phần theo tên bằng cách khớp mẫu đơn giản. Tùy chọn lọc theo bộ sưu tập hoặc load_id.

#### set_offload_strategy[[diffusers.ComponentsManager.set_offload_strategy]]

```python
set_offload_strategy(offload_strategy)
```

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

**Tham số:**

offload_strategy : Bất kỳ callable nào có chữ ký `(hooks, model_id, model, execution_device) -> hooks`: nó nhận các hooks của các model hiện đang trên thiết bị và trả về các hooks cần offload trước khi model đến được nạp. Mặc định là `AutoOffloadStrategy`, giải phóng tổ hợp nhỏ nhất đủ điều kiện.

Thay thế chiến lược offload trên tất cả các model được quản lý. Chỉ hợp lệ khi auto CPU offloading được bật.

## InsertableDict[[diffusers.modular_pipelines.InsertableDict]]

#### diffusers.modular_pipelines.InsertableDict[[diffusers.modular_pipelines.InsertableDict]]

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

