Diffusers documentation
Trạng thái
Trạng thái
Các Block dựa vào các cấu trúc dữ liệu PipelineState và BlockState để truyền thông và chia sẻ dữ liệu.
| Trạng thái | Mô tả |
|---|---|
| PipelineState | Duy trì toàn bộ dữ liệu cần thiết cho việc thực thi của một pipeline và cho phép các khối đọc và cập nhật dữ liệu của nó. |
| BlockState | Cho phép mỗi khối thực hiện phép tính của nó với dữ liệu cần thiết từ inputs |
Hướng dẫn này giải thích cách các trạng thái hoạt động và cách chúng kết nối các khối.
PipelineState
PipelineState là một bộ chứa trạng thái toàn cục cho tất cả các khối. Nó duy trì trạng thái thời gian chạy đầy đủ của pipeline và cung cấp một cách có cấu trúc để các khối đọc và ghi vào dữ liệu dùng chung.
PipelineState lưu trữ tất cả dữ liệu trong một dict values, đây là một trạng thái mutable chứa các giá trị đầu vào do người dùng cung cấp và các giá trị đầu ra trung gian được tạo ra bởi các block. Nếu một block sửa đổi một input, thay đổi đó sẽ được phản ánh trong dict values sau khi gọi 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 là một góc nhìn cục bộ về các biến liên quan mà một khối riêng lẻ cần từ PipelineState để thực hiện các phép tính của nó.
Truy cập trực tiếp các biến này dưới dạng thuộc tính như block_state.image.
BlockState(
image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)Khi phương thức __call__ của một block được thực thi, nó lấy BlockState bằng self.get_block_state(state), thực hiện các thao tác của nó, và cập nhật PipelineState bằng 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, stateTương tác trạng thái
Tương tác giữa PipelineState và BlockState được xác định bởi inputs và intermediate_outputs của một block.
inputs, một khối có thể sửa đổi một đầu vào - chẳng hạn nhưblock_state.image- và thay đổi này có thể được lan truyền toàn cục đến PipelineState bằng cách gọiset_block_state.intermediate_outputslà một biến mới được tạo bởi một khối. Nó được thêm vào dictvaluescủa PipelineState và có sẵn cho các khối tiếp theo hoặc được người dùng truy cập như một đầu ra cuối cùng từ pipeline.