Diffusers documentation

Estados

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Estados

Los bloques se basan en las estructuras de datos PipelineState y BlockState para comunicarse y compartir datos.

EstadoDescripción
PipelineStateMantiene los datos generales necesarios para la ejecución de un pipeline y permite a los bloques leer y actualizar sus datos.
BlockStatePermite que cada bloque realice su computación con los datos necesarios de inputs

Esta guía explica cómo funcionan los estados y cómo conectan los bloques.

PipelineState

El PipelineState es un contenedor de estado global para todos los bloques. Mantiene el estado de tiempo de ejecución completo de la canalización y proporciona una forma estructurada para que los bloques lean y escriban en datos compartidos.

PipelineState almacena todos los datos en un diccionario values, que es un estado mutable que contiene los valores de entrada proporcionados por el usuario y los valores de salida intermedios generados por los bloques. Si un bloque modifica una input, el cambio se reflejará en el diccionario values después de llamar a 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

El BlockState es una vista local de las variables relevantes que un bloque individual necesita de PipelineState para realizar sus cálculos.

Acceda a estas variables directamente como atributos, por ejemplo, block_state.image.

BlockState(
    image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)

Cuando se ejecuta el método __call__ de un bloque, recupera el BlockState con self.get_block_state(state), realiza sus operaciones y actualiza PipelineState con 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

Interacción de estado

La interacción entre PipelineState y BlockState está definida por los inputs y los intermediate_outputs de un bloque.

  • inputs, un bloque puede modificar una entrada, como block_state.image, y este cambio puede propagarse globalmente a PipelineState llamando a set_block_state.
  • intermediate_outputs es una variable nueva que crea un bloque. Se añade al diccionario values del PipelineState y está disponible para los bloques posteriores o puede ser accedida por los usuarios como salida final del pipeline.
Update on GitHub