Diffusers documentation

Estados

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Estados

Os blocos dependem das estruturas de dados PipelineState e BlockState para comunicar e compartilhar dados.

EstadoDescrição
PipelineStateMantém os dados gerais necessários para a execução de um pipeline e permite que os blocos leiam e atualizem seus dados.
BlockStatePermite que cada bloco execute seu cálculo com os dados necessários de inputs

Este guia explica como os estados funcionam e como eles conectam os blocos.

PipelineState

O PipelineState é um contêiner de estado global para todos os blocos. Ele mantém o estado de tempo de execução completo do pipeline e fornece uma maneira estruturada para que os blocos leiam e gravem dados compartilhados.

PipelineState armazena todos os dados em um dicionário values, que é um estado mutável contendo os valores de entrada fornecidos pelo usuário e os valores de saída intermediários gerados pelos blocos. Se um bloco modifica uma input, essa modificação será refletida no dicionário values após a chamada 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

O BlockState é uma visão local das variáveis relevantes que um bloco individual precisa do PipelineState para realizar seus cálculos.

Acesse essas variáveis diretamente como atributos, como block_state.image.

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

Quando o método __call__ de um bloco é executado, ele recupera o BlockState com self.get_block_state(state), executa suas operações e atualiza o PipelineState com 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

Interação de estado

A interação entre PipelineState e BlockState é definida pelos inputs e intermediate_outputs de um bloco.

  • inputs, um bloco pode modificar uma entrada - como block_state.image - e essa alteração pode ser propagada globalmente para PipelineState chamando set_block_state.
  • intermediate_outputs é uma nova variável criada por um bloco. Ela é adicionada ao dicionário values do PipelineState e fica disponível para blocos subsequentes ou acessada pelos usuários como saída final do pipeline.
Update on GitHub