Diffusers documentation

States

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

States

Blocks bergantung pada struktur data PipelineState dan BlockState untuk berkomunikasi dan berbagi data.

StatusDeskripsi
PipelineStateMenjaga keseluruhan data yang diperlukan untuk eksekusi pipeline dan memungkinkan blok untuk membaca serta memperbarui datanya.
BlockStateMemungkinkan 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, state

Interaksi state

Interaksi antara PipelineState dan BlockState didefinisikan oleh inputs dan intermediate_outputs dari sebuah blok.

  • inputs, sebuah blok dapat memodifikasi input - seperti block_state.image - dan perubahan ini dapat disebarkan secara global ke PipelineState dengan memanggil set_block_state.
  • intermediate_outputs adalah variabel baru yang dibuat oleh sebuah blok. Variabel ini ditambahkan ke dict values dari PipelineState dan tersedia untuk blok berikutnya atau diakses oleh pengguna sebagai output akhir dari pipeline.
Update on GitHub