Diffusers documentation

États

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

États

Les blocs s'appuient sur les structures de données PipelineState et BlockState pour communiquer et partager des données.

ÉtatDescription
PipelineStateConserve 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.
BlockStatePermet à 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, state

Interaction 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 - comme block_state.image - et ce changement peut être propagé globalement à PipelineState en appelant set_block_state.
  • intermediate_outputs est une nouvelle variable créée par un bloc. Elle est ajoutée au dictionnaire values de l’objet PipelineState et est disponible pour les blocs suivants ou accessible par les utilisateurs en tant que sortie finale du pipeline.
Update on GitHub