Diffusers documentation
Estados
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, stateInteraçã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 - comoblock_state.image- e essa alteração pode ser propagada globalmente para PipelineState chamandoset_block_state.intermediate_outputsé uma nova variável criada por um bloco. Ela é adicionada ao dicionáriovaluesdo PipelineState e fica disponível para blocos subsequentes ou acessada pelos usuários como saída final do pipeline.