Buckets:
| # 状态 | |
| Blocks 依赖 [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) 和 [BlockState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) 数据结构来通信和共享数据。 | |
| | 状态 | 描述 | | |
| |-------|-------------| | |
| | [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) | 维护管道执行所需的整体数据,并允许各个块读取和更新其数据。 | | |
| | [BlockState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) | 允许每个块使用 `inputs` 中的必要数据来执行其计算| | |
| 本指南将解释状态如何工作,以及它们如何连接各个块。 | |
| ## PipelineState | |
| [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) 是所有 block 的全局状态容器。它维护流水线的完整运行时状态,并为 block 读写共享数据提供了一种结构化的方式。 | |
| [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) 将所有数据存储在一个 `values` 字典中,该字典是一个**可变的**状态,包含用户提供的输入值以及由各个 block 生成的中间输出值。如果某个 block 修改了某个 `input`,在调用 `set_block_state` 之后,该修改将反映在 `values` 字典中。 | |
| ```py | |
| 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](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) 是单个 block 从 [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) 中获取执行其计算所需的相关变量的局部视图。 | |
| 像 `block_state.image` 这样,直接将这些变量作为属性访问。 | |
| ```py | |
| BlockState( | |
| image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640> | |
| ) | |
| ``` | |
| 当某个 block 的 `__call__` 方法被执行时,它会通过 `self.get_block_state(state)` 获取 `BlockState`,执行其操作,并通过 `self.set_block_state(state, block_state)` 更新 [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)。 | |
| ```py | |
| 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](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) 与 [BlockState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) 之间的交互由块的 `inputs` 和 `intermediate_outputs` 定义。 | |
| - `inputs`,一个 block 可以修改某个输入(例如 `block_state.image`),并通过调用 `set_block_state` 将该更改全局传播到 [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)。 | |
| - `intermediate_outputs` 是某个 block 创建的新变量。它会被添加到 [PipelineState](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) 的 `values` 字典中,供后续的 block 使用,也可以由用户作为 pipeline 的最终输出进行访问。 | |
Xet Storage Details
- Size:
- 3.83 kB
- Xet hash:
- bdef3e84962c600b3f547150b0323551b4c4d65a2ef8b3156ff21ad3b597eaac
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.