Diffusers documentation
Pipeline
Pipeline
ModularPipeline
class diffusers.ModularPipeline
< source >( blocks: typing.Optional[diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks] = None pretrained_model_name_or_path: typing.Union[str, os.PathLike, NoneType] = None components_manager: typing.Optional[diffusers.modular_pipelines.components_manager.ComponentsManager] = None collection: typing.Optional[str] = None **kwargs )
Base class for all Modular pipelines.
This is an experimental feature and is likely to change in the future.
from_pretrained
< source >( pretrained_model_name_or_path: typing.Union[str, os.PathLike, NoneType] trust_remote_code: typing.Optional[bool] = None components_manager: typing.Optional[diffusers.modular_pipelines.components_manager.ComponentsManager] = None collection: typing.Optional[str] = None **kwargs )
Parameters
- pretrained_model_name_or_path (
str
oros.PathLike
, optional) — Path to a pretrained pipeline configuration. If provided, will load component specs (only for from_pretrained components) and config values from the modular_model_index.json file. - trust_remote_code (
bool
, optional) — Whether to trust remote code when loading the pipeline, need to be set to True if you want to create pipeline blocks based on the custom code inpretrained_model_name_or_path
- components_manager (
ComponentsManager
, optional) — ComponentsManager instance for managing multiple component cross different pipelines and apply offloading strategies. - collection (
str
, optional) —` Collection name for organizing components in the ComponentsManager.
Load a ModularPipeline from a huggingface hub repo.
load_components
< source >( names: typing.Union[typing.List[str], str] **kwargs )
Parameters
- names — List of component names to load; by default will not load any components
- **kwargs — additional kwargs to be passed to
from_pretrained()
.Can be:- a single value to be applied to all components to be loaded, e.g. torch_dtype=torch.bfloat16
- a dict, e.g. torch_dtype={“unet”: torch.bfloat16, “default”: torch.float32}
- if potentially override ComponentSpec if passed a different loading field in kwargs, e.g.
repo
,variant
,revision
, etc.
Load selected components from specs.
load_default_components
< source >( **kwargs )
Load from_pretrained components using the loading specs in the config dict.
register_components
< source >( **kwargs )
Register components with their corresponding specifications.
This method is responsible for:
- Sets component objects as attributes on the loader (e.g., self.unet = unet)
- Updates the config dict, which will be saved as
modular_model_index.json
duringsave_pretrained
(only for from_pretrained components) - Adds components to the component manager if one is attached (only for from_pretrained components)
This method is called when:
- Components are first initialized in init:
- from_pretrained components not loaded during init so they are registered as None;
- non from_pretrained components are created during init and registered as the object itself
- Components are updated with the
update_components()
method: e.g. loader.update_components(unet=unet) or loader.update_components(guider=guider_spec) - (from_pretrained) Components are loaded with the
load_default_components()
method: e.g. loader.load_default_components(names=[“unet”])
Notes:
- When registering None for a component, it sets attribute to None but still syncs specs with the config
dict, which will be saved as
modular_model_index.json
duringsave_pretrained
- component_specs are updated to match the new component outside of this method, e.g. in
update_components()
method
save_pretrained
< source >( save_directory: typing.Union[str, os.PathLike] push_to_hub: bool = False **kwargs )
Save the pipeline to a directory. It does not save components, you need to save them separately.
to
< source >( *args **kwargs ) → DiffusionPipeline
Parameters
- dtype (
torch.dtype
, optional) — Returns a pipeline with the specifieddtype
- device (
torch.Device
, optional) — Returns a pipeline with the specifieddevice
- silence_dtype_warnings (
str
, optional, defaults toFalse
) — Whether to omit warnings if the targetdtype
is not compatible with the targetdevice
.
Returns
The pipeline converted to specified dtype
and/or dtype
.
Performs Pipeline dtype and/or device conversion. A torch.dtype and torch.device are inferred from the
arguments of self.to(*args, **kwargs).
If the pipeline already has the correct torch.dtype and torch.device, then it is returned as is. Otherwise, the returned pipeline is a copy of self with the desired torch.dtype and torch.device.
Here are the ways to call to
:
to(dtype, silence_dtype_warnings=False) → DiffusionPipeline
to return a pipeline with the specifieddtype
to(device, silence_dtype_warnings=False) → DiffusionPipeline
to return a pipeline with the specifieddevice
to(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipeline
to return a pipeline with the specifieddevice
anddtype
update_components
< source >( **kwargs )
Parameters
- **kwargs — Component objects, ComponentSpec objects, or configuration values to update:
- Component objects: Only supports components we can extract specs using
ComponentSpec.from_component()
method i.e. components created with ComponentSpec.load() or ConfigMixin subclasses that aren’t nn.Modules (e.g.,unet=new_unet, text_encoder=new_encoder
) - ComponentSpec objects: Only supports default_creation_method == “from_config”, will call create()
method to create a new component (e.g.,
guider=ComponentSpec(name="guider", type_hint=ClassifierFreeGuidance, config={...}, default_creation_method="from_config")
) - Configuration values: Simple values to update configuration settings (e.g.,
requires_safety_checker=False
)
- Component objects: Only supports components we can extract specs using
Raises
ValueError
ValueError
— If a component object is not supported in ComponentSpec.from_component() method:- nn.Module components without a valid
_diffusers_load_id
attribute - Non-ConfigMixin components without a valid
_diffusers_load_id
attribute
- nn.Module components without a valid
Update components and configuration values and specs after the pipeline has been instantiated.
This method allows you to:
- Replace existing components with new ones (e.g., updating
self.unet
orself.text_encoder
) - Update configuration values (e.g., changing
self.requires_safety_checker
flag)
In addition to updating the components and configuration values as pipeline attributes, the method also updates:
- the corresponding specs in
_component_specs
and_config_specs
- the
config
dict, which will be saved asmodular_model_index.json
duringsave_pretrained
Examples:
# Update multiple components at once
pipeline.update_components(unet=new_unet_model, text_encoder=new_text_encoder)
# Update configuration values
pipeline.update_components(requires_safety_checker=False)
# Update both components and configs together
pipeline.update_components(unet=new_unet_model, requires_safety_checker=False)
# Update with ComponentSpec objects (from_config only)
pipeline.update_components(
guider=ComponentSpec(
name="guider",
type_hint=ClassifierFreeGuidance,
config={"guidance_scale": 5.0},
default_creation_method="from_config",
)
)
Notes:
- Components with trained weights must be created using ComponentSpec.load(). If the component has not been
shared in huggingface hub and you don’t have loading specs, you can upload it using
push_to_hub()
- ConfigMixin objects without weights (e.g., schedulers, guiders) can be passed directly
- ComponentSpec objects with default_creation_method=“from_pretrained” are not supported in update_components()