Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /fr /modular_diffusers /modular_diffusers_states.md
mishig's picture
|
download
raw
4.23 kB

É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, 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.

Xet Storage Details

Size:
4.23 kB
·
Xet hash:
c24f4df2934112e6605c1400085fef08de5d9629ad76a863b3dd7bfe0006c178

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.