Diffusers documentation
États
États
Les blocs s'appuient sur les structures de données PipelineState et BlockState pour communiquer et partager des données.
| État | Description |
|---|---|
| PipelineState | Conserve les données globales nécessaires à l’exécution d’un pipeline et permet aux blocs de lire et de mettre à jour ces données. |
| BlockState | Permet à chaque bloc d'effectuer son calcul avec les données nécessaires de inputs |
Ce guide explique le fonctionnement des états et la manière dont ils relient les blocs.
PipelineState
Le PipelineState est un conteneur d'état global pour tous les blocs. Il maintient l'état d'exécution complet du pipeline et offre une méthode structurée pour que les blocs lisent et écrivent dans des données partagées.
PipelineState stocke toutes les données dans un dictionnaire values, qui est un état mutable contenant les valeurs d’entrée fournies par l’utilisateur ainsi que les valeurs de sortie intermédiaires générées par les blocs. Si un bloc modifie une input, la modification sera reflétée dans le dictionnaire values après l’appel de set_block_state.
PipelineState(
values={
'prompt': 'a cat'
'guidance_scale': 7.0
'num_inference_steps': 25
'prompt_embeds': Tensor(dtype=torch.float32, shape=torch.Size([1, 1, 1, 1]))
'negative_prompt_embeds': None
},
)BlockState
Le BlockState est une vue locale des variables pertinentes dont un bloc individuel a besoin depuis PipelineState pour effectuer ses calculs.
Accédez à ces variables directement en tant qu'attributs, comme block_state.image.
BlockState(
image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)Lorsque la méthode __call__ d’un bloc est exécutée, elle récupère le BlockState via self.get_block_state(state), effectue ses opérations, puis met à jour PipelineState avec self.set_block_state(state, block_state).
def __call__(self, components, state):
# retrieve BlockState
block_state = self.get_block_state(state)
# computation logic on inputs
# update PipelineState
self.set_block_state(state, block_state)
return components, stateInteraction avec l'état
L’interaction entre PipelineState et BlockState est définie par les inputs et les intermediate_outputs d’un bloc.
inputs, un bloc peut modifier une entrée - commeblock_state.image- et ce changement peut être propagé globalement à PipelineState en appelantset_block_state.intermediate_outputsest une nouvelle variable créée par un bloc. Elle est ajoutée au dictionnairevaluesde l’objet PipelineState et est disponible pour les blocs suivants ou accessible par les utilisateurs en tant que sortie finale du pipeline.