Diffusers documentation
Pipeline
Pipeline
ModularPipeline
класс diffusers.ModularPipeline
< source >( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )
Базовый класс для всех модульных конвейеров.
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | Nonetrust_remote_code: bool | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = None**kwargs )
Параметры
- pretrained_model_name_or_path (
strилиos.PathLike, необязательно) — Путь к конфигурации предобученного конвейера. Сначала будет предпринята попытка загрузить конфигурацию изmodular_model_index.json, затем, для совместимости со стандартными немодульными репозиториями, будет использованmodel_index.json. Если pretrained_model_name_or_path не содержит конфигурации конвейера, в процессе инициализации он будет установлен в None. - trust_remote_code (
bool, optional) — Следует ли доверять удалённому коду при загрузке конвейера. Необходимо установить в True, если вы хотите создавать блоки конвейера на основе пользовательского кода изpretrained_model_name_or_path - components_manager (
ComponentsManager, optional) — экземпляр ComponentsManager для управления несколькими компонентами в разных пайплайнах и применения стратегий offloading. - collection (
str, optional) —` Имя коллекции для организации компонентов в ComponentsManager. - workflow (
str, optional) — Имя workflow, объявленного блоками pipeline. Если указано, блоки обрезаются до блоков выполнения этого workflow, так что pipeline ожидает — иload_components()загружает — только те компоненты, которые использует данный workflow.
Загрузите ModularPipeline из репозитория на Hugging Face Hub.
load_components
< source >( names: list[str] | str | None = Noneworkflow: str | None = None**kwargs )
Параметры
- names — list of component names to load. If None, will load all components with default_creation_method == “from_pretrained”. If provided as a list or string, will load only the specified components.
- workflow — имя workflow, объявленного блоками конвейера. Если указано, загружаются только те компоненты, которые используются блоками выполнения этого workflow. Не может использоваться вместе с
names. - **kwargs — дополнительные аргументы, передаваемые в
from_pretrained().Может быть:- единое значение, применяемое ко всем компонентам, которые будут загружены, например, dtype=torch.bfloat16
- словарь, например, dtype={“unet”: torch.bfloat16, “default”: torch.float32}
- если при передаче в kwargs другого поля загрузки, например
pretrained_model_name_or_path,variant,revisionи т. д., потенциально переопределяет ComponentSpec - если при передаче в kwargs другого поля загрузки, например
pretrained_model_name_or_path,variant,revisionи т. д., потенциально переопределяет ComponentSpec
Загрузите выбранные компоненты из спецификаций.
register_components
< source >( **kwargs )
Зарегистрируйте компоненты с соответствующими им спецификациями.
Этот метод отвечает за:
- Устанавливает объекты компонентов в качестве атрибутов загрузчика (например, self.unet = unet)
- Обновляет словарь конфигурации, который будет сохранён как
modular_model_index.jsonво времяsave_pretrained(только для компонентов from_pretrained) - Добавляет компоненты в менеджер компонентов, если он подключен (только для компонентов from_pretrained)
Этот метод вызывается, когда:
- Компоненты сначала инициализируются в init:
- компоненты from_pretrained не загружаются во время init, поэтому регистрируются как None;
- компоненты, отличные от from_pretrained, создаются во время init и регистрируются как сам объект
- Компоненты обновляются с помощью метода
update_components(): например, loader.update_components(unet=unet) или loader.update_components(guider=guider_spec) - (from_pretrained) Компоненты загружаются с помощью метода
load_components(): например, loader.load_components(names=[“unet”]) или loader.load_components() для загрузки всех компонентов по умолчанию
Примечания:
- При регистрации None для компонента атрибуту присваивается значение None, но спецификации всё равно синхронизируются со словарём конфигурации, который сохраняется как
modular_model_index.jsonво время вызоваsave_pretrained - component_specs обновляются в соответствии с новым компонентом вне этого метода, например, в методе
update_components()
save_pretrained
< source >( save_directory: str | os.PathLikesafe_serialization: bool = Truevariant: str | None = Nonemax_shard_size: int | str | None = Nonepush_to_hub: bool = False**kwargs )
Параметры
- save_directory (
strилиos.PathLike) — Каталог для сохранения конвейера. Будет создан, если не существует. - safe_serialization (
bool, необязательный, по умолчаниюTrue) — Определяет, сохранять ли модель с помощьюsafetensorsили традиционным способом PyTorch с использованиемpickle. - variant (
str, необязательный) — Если указано, веса сохраняются в форматеpytorch_model.<variant>.bin. - max_shard_size (
intorstr, по умолчаниюNone) — Максимальный размер контрольной точки перед её разбиением на части. Каждая часть контрольной точки будет иметь размер, меньший этого значения. Если значение указано в виде строки, оно должно состоять из цифр, за которыми следует единица измерения (например,"5GB"). Если значение указано в виде целого числа, единицей измерения являются байты. - push_to_hub (
bool, необязательный, по умолчаниюFalse) — Следует ли отправить пайплайн на Hugging Face model hub после его сохранения. - **kwargs — Дополнительные именованные аргументы:
overwrite_modular_index(bool, необязательный, по умолчаниюTrue): Определяет, следует ли обновлятьmodular_model_index.jsonтак, чтобы спецификация загрузки каждого сохраняемого компонента указывала на назначение:repo_idпри отправке на Hub, в противном случаеsave_directory. Компоненты, которые не загружаются, не сохраняются и всегда сохраняют свои записанные спецификации загрузки. ПередайтеFalse, чтобы также сохранить записанные спецификации компонентов, которые сохраняются (например, для индекса, который намеренно ссылается на другие репозитории); компоненты без идентификатора загрузки (например, пользовательские модели, добавленные с помощьюupdate_components) всё равно переписываются, поскольку у них нет записанного источника.repo_id(str, необязательный): Идентификатор репозитория, в который будет загружен конвейер. По умолчанию используется последний компонентsave_directory.commit_message(str, необязательный): Сообщение коммита для операции push в hub.private(bool, необязательный): Определяет, должна ли репозиторий быть закрытым.create_pr(bool, необязательный, по умолчаниюFalse): Создавать ли pull request вместо прямого push.token(str, необязательный): Токен Hugging Face, используемый для аутентификации.
Сохраните конвейер и все его компоненты в каталог, чтобы его можно было загрузить снова с помощью метода класса from_pretrained().
до
< source >( *args**kwargs ) → DiffusionPipeline
Параметры
- dtype (
torch.dtype, необязательный) — Возвращает конвейер с указаннымdtype - device (
torch.Device, необязательный) — Возвращает конвейер с указаннымdevice - silence_dtype_warnings (
str, необязательный, по умолчаниюFalse) — Определяет, следует ли подавлять предупреждения, если целевойdtypeнесовместим с целевымdevice.
Возвращает
Пайплайн преобразован в указанный dtype и/или dtype.
Выполняет преобразование dtype и/или device для Pipeline. Значения torch.dtype и torch.device выводятся из аргументов self.to(*args, **kwargs).
> Если у пайплайна уже есть необходимые torch.dtype и torch.device, он возвращается без изменений. В противном случае > возвращаемый пайплайн является копией self с требуемыми torch.dtype и torch.device.
Способы вызова to:
to(dtype, silence_dtype_warnings=False) → DiffusionPipelineдля возврата пайплайна с указаннымdtypeto(device, silence_dtype_warnings=False) → DiffusionPipelineдля возврата пайплайна с указаннымdeviceto(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipelineвозвращает пайплайн с указаннымиdeviceиdtype
unload_components
< source >( names: list[str] | str )
Разгрузите выбранные компоненты, освободив их память.
Атрибут компонента сбрасывается в None, а если к нему подключён ComponentsManager, компонент удаляется из него. Спецификация компонента остаётся без изменений, поэтому компонент можно снова загрузить позже с помощью load_components().
update_components
< source >( **kwargs )
Параметры
- **kwargs — Объекты компонентов или значения конфигурации для обновления:
- Объекты компонентов: модели, загруженные с помощью
AutoModel.from_pretrained()илиComponentSpec.load(), автоматически помечаются информацией о загрузке. Объекты ConfigMixin без весов (например, планировщики, направляющие) можно передавать напрямую. - Значения конфигурации: простые значения для обновления параметров конфигурации
(например,
requires_safety_checker=False)
- Объекты компонентов: модели, загруженные с помощью
Обновите компоненты и значения конфигурации и спецификации после того, как конвейр будет создан.
Этот метод позволяет вам:
- Замените существующие компоненты новыми (например, обновите
self.unetилиself.text_encoder) - Обновление значений конфигурации (например, изменение флага
self.requires_safety_checker)
Помимо обновления компонентов и значений конфигурации в качестве атрибутов конвейера, метод также обновляет:
- соответствующие спецификации в
_component_specsи_config_specs - словарь
config, который будет сохранён какmodular_model_index.jsonпри вызовеsave_pretrained
Примеры:
# 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)Примечания:
- Компоненты, загруженные с помощью
AutoModel.from_pretrained()илиComponentSpec.load(), сохраняют спецификации загрузки для сериализации. Для пользовательских или локально загруженных компонентов без ссылок на Hub записи вmodular_model_index.jsonобновляются автоматически во времяsave_pretrained(). - Объекты ConfigMixin без весов (например, планировщики, направляющие) можно передавать напрямую.