Diffusers documentation

状態

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

状態

Blocks は、データの通信と共有のために PipelineState および BlockState データ構造に依存しています。

状態説明
PipelineStateパイプラインの実行に必要な全体データを保持し、ブロックがそのデータの読み取りと更新を行うことを可能にします。
BlockStateinputsから必要なデータを使用して、各ブロックが計算を実行できるようにします

このガイドでは、ステートの仕組みと、ブロックを接続する方法について説明します。

PipelineState

PipelineState は、すべてのブロック用のグローバルな状態コンテナです。パイプラインの完全なランタイム状態を保持し、ブロックが共有データを読み書きするための構造化された方法を提供します。

PipelineState は、ユーザーが指定した入力値とブロックによって生成される中間出力値を含む 変更可能 な状態である values ディクショナリにすべてのデータを格納します。あるブロックが input を変更した場合、set_block_state を呼び出した後、その変更は values ディクショナリに反映されます。

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__メソッドが実行されると、self.get_block_state(state)によってBlockStateを取得し、処理を実行したうえで、self.set_block_state(state, block_state)によってPipelineStateを更新します。

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 など)を変更でき、set_block_stateを呼び出すことで、この変更をPipelineStateにグローバルに反映させることができます。
  • intermediate_outputs は、ブロックが作成する新しい変数です。PipelineState の values ディクショナリに追加され、後続のブロックで使用可能になるほか、ユーザーがパイプラインの最終出力としてアクセスすることもできます。
Update on GitHub