Diffusers documentation
Các thành phần và cấu hình
Các thành phần và cấu hình
ComponentSpec
lớp diffusers.ComponentSpec
< source >( name: str | None = Nonetype_hint: typing.Optional[typing.Type] = Nonedescription: str | None = Noneconfig: diffusers.configuration_utils.FrozenDict | None = Nonepretrained_model_name_or_path: str | list[str] | None = Nonesubfolder: str | None = ''variant: str | None = Nonerevision: str | None = Nonedefault_creation_method: typing.Literal['from_config', 'from_pretrained'] = 'from_pretrained'repo: str | list[str] | None = None )
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 — Từ điển cấu hình tùy chọn cho việc tạo init
- pretrained_model_name_or_path — Đường dẫn tùy chọn pretrained_model_name_or_path cho việc tạo từ from_pretrained
- subfolder — Thư mục con tùy chọn trong pretrained_model_name_or_path
- variant — Phiên bản 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:
- Từ đầu bằng init với một dict cấu hình
- sử dụng
from_pretrained
tạo
< source >( config: diffusers.configuration_utils.FrozenDict | dict[str, typing.Any] | None = None**kwargs )
Tạo component bằng cách sử dụng from_config với config.
decode_load_id
< source >( load_id: str )
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
< source >( name: strcomponent: Any )
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)
Tải component bằng from_pretrained.
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
Quy cách cho một tham số cấu hình pipeline.
ComponentsManager
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 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.
> Đây là một tính năng thử nghiệm và có thể sẽ thay đổi trong tương lai.
Ví dụ:
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
< source >( name: strcomponent: Anycollection: str | None = None ) → str
Thêm một thành phần vào ComponentsManager.
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
< source >( device: str | int | torch.device = Nonememory_reserve_margin = '3GB'offload_strategy = None )
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:
- Tất cả các mô hình đều bắt đầu trên CPU theo mặc định
- Khi forward pass của một model được gọi, nó sẽ được chuyển đến thiết bị thực thi
- 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
- Hệ thống cố gắng offload tổ hợp các model nhỏ nhất sao cho giải phóng đủ bộ nhớ
- 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
< source >( ids: list[str]return_dict_with_names: bool | None = True ) → dict[str, Any]
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.
Gây ra
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
< source >( names: list[str]collection: str | None = None ) → dict[str, Any]
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
< source >( names: str | list[str] = Nonecollection: str | None = None ) → list[str]
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
< source >( component_id: strfields: str | list[str] | None = None )
Lấy thông tin chi tiết về một thành phần.
get_one
< source >( component_id: str | None = Nonename: str | None = Nonecollection: str | None = Noneload_id: str | None = None )
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
Gây ra
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 có nhiều thành phần khớp hoặc không tìm thấy thành phần nào.
remove
< source >( component_id: str = None )
Xóa một thành phần khỏi ComponentsManager.
Xóa một thành phần khỏi bộ sưu tập.
search_components
< source >( names: str | None = Nonecollection: str | None = Noneload_id: str | None = Nonereturn_dict_with_names: bool = True )
Tham số
- names — Tên thành phần hoặc mẫu
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ơ bản 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” : bất kỳ thứ gì có tên cơ bản 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
- return_dict_with_names — Nếu True, trả về một từ điển với tên các thành phần làm khóa, ném lỗi nếu phát hiện nhiều thành phần có cùng tên. Nếu False, trả về một từ điển với ID của các thành phần làm khóa
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.
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.