Buckets:

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

Estados

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

Estado Descrição
PipelineState Mantém os dados gerais necessários para a execução de um pipeline e permite que os blocos leiam e atualizem seus dados.
BlockState Permite 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 pelos 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.

Xet Storage Details

Size:
4.1 kB
·
Xet hash:
7ea07ae0fef7eb9de159f2ea392a80531d285a3433faae1a5635142c872138c1

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