Diffusers documentation
状态
快速入门
推理
使用扩散流水线
适配器与个性化
优化与扩展
模块化 Diffusers
概述快速入门来自 DiffusionPipeline状态ModularPipelineBlocksSequentialPipelineBlocksLoopSequentialPipelineBlocksAutoPipelineBlocksModularPipeline引导者ComponentsManager自动文档字符串和参数模板构建自定义块使用 Mellon 搭配自定义块
训练与微调
资源
贡献
API
You are viewing main version, which requires installation from source. If you'd like
regular pip install, checkout the latest stable version (v0.42.1).
状态
Blocks 依赖 PipelineState 和 BlockState 数据结构来通信和共享数据。
| 状态 | 描述 |
|---|---|
| PipelineState | 维护管道执行所需的整体数据,并允许各个块读取和更新其数据。 |
| BlockState | 允许每个块使用 inputs 中的必要数据来执行其计算 |
本指南将解释状态如何工作,以及它们如何连接各个块。
PipelineState
PipelineState 是所有 block 的全局状态容器。它维护流水线的完整运行时状态,并为 block 读写共享数据提供了一种结构化的方式。
PipelineState 将所有数据存储在一个 values 字典中,该字典是一个可变的状态,包含用户提供的输入值以及由各个 block 生成的中间输出值。如果某个 block 修改了某个 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 是单个 block 从 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 可以修改某个输入(例如block_state.image),并通过调用set_block_state将该更改全局传播到 PipelineState。intermediate_outputs是某个 block 创建的新变量。它会被添加到 PipelineState 的values字典中,供后续的 block 使用,也可以由用户作为 pipeline 的最终输出进行访问。