Diffusers documentation
States
States
Blocks bergantung pada struktur data PipelineState dan BlockState untuk berkomunikasi dan berbagi data.
| Status | Deskripsi |
|---|---|
| PipelineState | Menjaga keseluruhan data yang diperlukan untuk eksekusi pipeline dan memungkinkan blok untuk membaca serta memperbarui datanya. |
| BlockState | Memungkinkan setiap blok untuk melakukan komputasinya dengan data yang diperlukan dari inputs |
Panduan ini menjelaskan cara kerja state dan bagaimana state menghubungkan blok.
PipelineState
PipelineState adalah wadah status global untuk semua blok. Status ini mempertahankan status runtime lengkap dari pipeline dan menyediakan cara terstruktur bagi blok untuk membaca dan menulis ke data bersama.
PipelineState menyimpan semua data dalam dict values, yaitu keadaan mutable yang berisi nilai input yang diberikan pengguna dan nilai output antara yang dihasilkan oleh blok. Jika sebuah blok memodifikasi input, perubahan tersebut akan tercermin dalam dict values setelah memanggil 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 adalah tampilan lokal dari variabel-variabel relevan yang dibutuhkan oleh sebuah blok individu dari PipelineState untuk melakukan komputasinya.
Akses variabel-variabel ini secara langsung sebagai atribut seperti block_state.image.
BlockState(
image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)Ketika metode __call__ dari sebuah blok dieksekusi, blok tersebut mengambil BlockState dengan self.get_block_state(state), melakukan operasinya, dan memperbarui PipelineState dengan 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, stateInteraksi state
Interaksi antara PipelineState dan BlockState didefinisikan oleh inputs dan intermediate_outputs dari sebuah blok.
inputs, sebuah blok dapat memodifikasi input - sepertiblock_state.image- dan perubahan ini dapat disebarkan secara global ke PipelineState dengan memanggilset_block_state.intermediate_outputsadalah variabel baru yang dibuat oleh sebuah blok. Variabel ini ditambahkan ke dictvaluesdari PipelineState dan tersedia untuk blok berikutnya atau diakses oleh pengguna sebagai output akhir dari pipeline.