Diffusers documentation

Состояния

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Состояния

Блоки полагаются на структуры данных PipelineState и BlockState для обмена и общего использования данных.

СостояниеОписание
PipelineStateХранит общие данные, необходимые для выполнения конвейера, и позволяет блокам читать и обновлять эти данные.
BlockStateПозволяет каждому блоку выполнять свои вычисления с необходимыми данными из inputs

В этом руководстве объясняется, как работают состояния и как они связывают блоки.

PipelineState

PipelineState — это глобальный контейнер состояния для всех блоков. Он хранит полное состояние конвейера во время выполнения и предоставляет структурированный способ для блоков читать и записывать общие данные.

PipelineState хранит все данные в словаре values, который представляет собой изменяемое состояние, содержащее входные значения, предоставленные пользователем, и промежуточные выходные значения, генерируемые блоками. Если блок изменяет input, это изменение отразится в словаре values после вызова 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

BlockState представляет собой локальный вид тех переменных, которые отдельному блоку необходимы из PipelineState для выполнения вычислений.

Обращайтесь к этим переменным напрямую как к атрибутам, например block_state.image.

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

Когда выполняется метод __call__ блока, он получает BlockState с помощью self.get_block_state(state), выполняет свои операции и обновляет PipelineState с помощью 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

Взаимодействие состояния

Взаимодействие PipelineState и BlockState определяется параметрами inputs и intermediate_outputs блока.

  • inputs, блок может изменить входной параметр — например, block_state.image — и это изменение может быть глобально передано в PipelineState с помощью вызова set_block_state.
  • intermediate_outputs — это новая переменная, создаваемая блоком. Она добавляется в словарь values объекта PipelineState и доступна для последующих блоков или может быть получена пользователем в качестве итогового вывода конвейера.
Update on GitHub