Diffusers documentation
状態
はじめに
推論
拡散パイプラインの使用
アダプターとパーソナライズ
最適化とスケーリング
モジュール型 Diffusers
概要クイックスタートDiffusionPipeline から状態ModularPipelineBlocksSequentialPipelineBlocksLoopSequentialPipelineBlocksAutoPipelineBlocksModularPipelineガイドComponentsManager自動ドキュメント文字列とパラメータのテンプレートカスタムブロックの構築Mellonでのカスタムブロックの使用
学習とファインチューニング
リソース
コントリビュート
API
状態
Blocks は、データの通信と共有のために PipelineState および BlockState データ構造に依存しています。
| 状態 | 説明 |
|---|---|
| PipelineState | パイプラインの実行に必要な全体データを保持し、ブロックがそのデータの読み取りと更新を行うことを可能にします。 |
| BlockState | inputsから必要なデータを使用して、各ブロックが計算を実行できるようにします |
このガイドでは、ステートの仕組みと、ブロックを接続する方法について説明します。
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ディクショナリに追加され、後続のブロックで使用可能になるほか、ユーザーがパイプラインの最終出力としてアクセスすることもできます。