Diffusers documentation

Состояния

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
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