Diffusers documentation
Компоненты и конфигурации
Компоненты и конфигурации
ComponentSpec
класс 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 )
Параметры
- name — Название компонента
- type_hint — Тип компонента (например, UNet2DConditionModel)
- description — Необязательное описание компонента
- config — Необязательный словарь конфигурации для создания init
- pretrained_model_name_or_path — Необязательный путь pretrained_model_name_or_path для создания через from_pretrained
- subfolder — Необязательная подпапка в pretrained_model_name_or_path
- variant — Необязательный вариант в pretrained_model_name_or_path
- revision — необязательная ревизия в pretrained_model_name_or_path
- default_creation_method — предпочтительный метод создания — «from_config» или «from_pretrained»
Спецификация компонента конвейера.
Компонент можно создать двумя способами:
- С нуля с помощью init и словаря конфигурации
- с помощью
from_pretrained
create
< source >( config: diffusers.configuration_utils.FrozenDict | dict[str, typing.Any] | None = None**kwargs )
Создайте компонент с помощью from_config с конфигурацией.
decode_load_id
< source >( load_id: str )
Декодировать строку load_id обратно в словарь полей и значений загрузки.
from_component
< source >( name: strcomponent: Any )
Создайте ComponentSpec из Component.
В настоящее время поддерживаются:
- Компоненты, созданные с помощью метода
ComponentSpec.load() - Компоненты, являющиеся подклассами ConfigMixin, но не nn.Modules (например, планировщики, направляющие)
Загрузите компонент с помощью from_pretrained.
Возвращает имена всех полей, связанных с загрузкой (то есть тех, для которых field.metadata[“loading”] равно True).
ConfigSpec
Спецификация параметра конфигурации конвейера.
ComponentsManager
Центральный реестр и система управления компонентами моделей в нескольких конвейерах.
ComponentsManager предоставляет единый способ регистрации, отслеживания и повторного использования компонентов модели (таких как UNet, VAE, текстовые энкодеры и т. д.) в различных модульных конвейерах. Он включает функции для обнаружения дубликатов, управления памятью и организации компонентов.
> Это экспериментальная функция, которая может измениться в будущем.
Пример:
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")add
< source >( name: strcomponent: Anycollection: str | None = None ) → str
Параметры
- name (str) — Имя компонента
- component (Any) — Компонент для добавления
- collection (str | None) — Коллекция, в которую нужно добавить компонент
Возвращает
str
Уникальный идентификатор компонента, который генерируется как “{name}_{id(component)}”, где id(component) — это встроенный в Python уникальный идентификатор объекта
Добавьте компонент в ComponentsManager.
Отключите автоматическую выгрузку на CPU для всех компонентов.
enable_auto_cpu_offload
< source >( device: str | int | torch.device = Nonememory_reserve_margin = '3GB'offload_strategy = None )
Параметры
- device (str | int | torch.device) — Устройство выполнения, на которое модели перемещаются для прямых проходов
- memory_reserve_margin (str) — Запас памяти, который следует использовать. По умолчанию — 3 ГБ. Это объём памяти, который нужно держать свободным на устройстве, чтобы избежать нехватки памяти во время выполнения модели (например, для промежуточных активаций, градиентов и т. д.).
- offload_strategy — любой вызываемый объект с сигнатурой
(hooks, model_id, model, execution_device) -> hooks, возвращающий, какие резидентные модели следует выгрузить (offload) перед загрузкой входящей. По умолчанию используетсяAutoOffloadStrategy, который освобождает наименьшую достаточную комбинацию.
Включите автоматическую выгрузку на CPU для всех компонентов.
Алгоритм работает следующим образом:
- Все модели по умолчанию загружаются на CPU
- Когда вызывается прямой проход модели, она перемещается на устройство выполнения
- Если памяти недостаточно, другие модели на устройстве возвращаются на CPU
- Система пытается выгрузить наименьшую комбинацию моделей, которая освобождает достаточно памяти
- Модели остаются на устройстве выполнения, пока другая модель не потребует память и не вытеснит их
Модель, выгружаемая группами, участвует в этом процессе, но определяет своё расположение: она может освободить место, переместив другие модели, но никогда не перемещается, чтобы освободить место для них. Порядок не имеет значения — выгрузка групп может выполняться до или после включения этой функции. AutoOffloadStrategy принимает решения на основе объёма памяти, занимаемой моделями, что не отражает ситуацию, когда модель удерживает только одну группу за раз, поэтому передайте offload_strategy, который принимает решения на основе рабочего процесса.
get_components_by_ids
< source >( ids: list[str]return_dict_with_names: bool | None = True ) → dict[str, Any]
Параметры
- ids (list[str]) — список идентификаторов компонентов
- return_dict_with_names (bool | None) — Возвращать ли словарь с именами компонентов в качестве ключей:
Возвращает
dict[str, Any]
Словарь компонентов.
- Если return_dict_with_names=True, ключами являются имена компонентов.
- Если return_dict_with_names=False, ключами являются идентификаторы компонентов.
Исключения
ValueError
ValueError— если в результатах поиска обнаружены дублирующиеся имена компонентов при return_dict_with_names=True
Получение компонентов по списку идентификаторов.
get_components_by_names
< source >( names: list[str]collection: str | None = None ) → dict[str, Any]
Параметры
- names (list[str]) — список имён компонентов
- collection (str | None) — Необязательная коллекция для фильтрации
Возвращает
dict[str, Any]
Словарь компонентов, где ключами являются имена компонентов
Исключения
ValueError
ValueError— если в результатах поиска обнаружены дублирующиеся имена компонентов
Получить компоненты по списку имен, при необходимости с фильтром по коллекции.
get_ids
< source >( names: str | list[str] = Nonecollection: str | None = None ) → list[str]
Получить идентификаторы компонентов по списку имен, при необходимости с фильтрацией по коллекции.
get_model_info
< source >( component_id: strfields: str | list[str] | None = None )
Получите подробную информацию о компоненте.
get_one
< source >( component_id: str | None = Nonename: str | None = Nonecollection: str | None = Noneload_id: str | None = None )
Параметры
- component_id (str | None) — Необязательный идентификатор компонента для получения
- name (str | None) — Имя компонента или шаблон
- collection (str | None) — Необязательная коллекция для фильтрации
- load_id (str | None) — Необязательный load_id для фильтрации
Исключения
ValueError
ValueError— если ни один компонент не совпадает или совпадает несколько
Получить один компонент можно одним из способов:
- поиск по имени (совпадение по шаблону), коллекции или load_id.
- передача параметра component_id Вызывает ошибку, если найдено несколько совпадающих компонентов или ни одного.
удаление
< source >( component_id: str = None )
Удалить компонент из ComponentsManager.
Удалить компонент из коллекции.
search_components
< source >( names: str | None = Nonecollection: str | None = Noneload_id: str | None = Nonereturn_dict_with_names: bool = True )
Параметры
- names — Имя или имена компонентов или шаблон(ы)
Шаблоны:
- “unet” : совпадает с любым компонентом с базовым именем “unet” (например, unet_123abc)
- “!unet”: всё, кроме компонентов с базовым именем “unet”
- “unet*” : всё, что имеет базовое имя, начинающееся с “unet”
- “!unet*” : всё, чьё базовое имя НЕ начинается с “unet”
- ”unet” : всё, что содержит “unet” в базовом имени
- “!unet” : всё, что в базовом имени НЕ содержит “unet”
- “refiner|vae|unet” : всё, что имеет базовое имя, точно совпадающее с “refiner”, “vae” или “unet”
- “!refiner|vae|unet” : всё, чьё базовое имя НЕ совпадает точно с “refiner”, “vae” или “unet”
- “unet|vae”: всё, что имеет базовое имя, начинающееся с “unet” ИЛИ с “vae”
- collection — Необязательная коллекция для фильтрации
- load_id — Необязательный load_id для фильтрации
- return_dict_with_names — Если True, возвращает словарь с именами компонентов в качестве ключей; если обнаружено несколько компонентов с одинаковым именем, возникает ошибка. Если False, возвращает словарь с идентификаторами компонентов в качестве ключей
Ищите компоненты по имени с помощью простого сопоставления шаблонов. При необходимости фильтруйте по коллекции или load_id.
set_offload_strategy
< source >( offload_strategy )
Параметры
- offload_strategy —
Любая вызываемая функция с сигнатурой
(hooks, model_id, model, execution_device) -> hooks: она принимает хуки моделей, находящихся в данный момент на устройстве, и возвращает те, которые нужно выгрузить перед загрузкой входящей модели. По умолчанию используетсяAutoOffloadStrategy, который освобождает наименьшую достаточную комбинацию.
Замените стратегию offload для всех управляемых моделей. Действительно только при включённом автоматическом offloading на CPU.