Buckets:
| # ModularPipelineBlocks | |
| [ModularPipelineBlocks](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) adalah blok dasar untuk membangun [ModularPipeline](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline). Blok ini mendefinisikan komponen, input/output, dan komputasi yang harus dilakukan oleh sebuah blok untuk langkah tertentu dalam pipeline. Sebuah [ModularPipelineBlocks](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) terhubung dengan blok lain, menggunakan [state](./modular_diffusers_states), untuk memungkinkan konstruksi modular dari alur kerja. | |
| [ModularPipelineBlocks](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) secara mandiri tidak dapat dieksekusi. Ini adalah cetak biru tentang apa yang harus dilakukan oleh sebuah langkah dalam pipeline. Untuk benar-benar menjalankan dan mengeksekusi pipeline, [ModularPipelineBlocks](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) perlu dikonversi menjadi [ModularPipeline](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline#diffusers.ModularPipeline). | |
| Panduan ini akan menunjukkan cara membuat [ModularPipelineBlocks](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). | |
| ## Input dan output | |
| > [!TIP] | |
| > Lihat panduan [States](./modular_diffusers_states) jika Anda belum familiar dengan cara kerja state di Modular Diffusers. | |
| [ModularPipelineBlocks](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) membutuhkan `inputs` dan `intermediate_outputs`. | |
| - `inputs` adalah nilai yang dibaca sebuah blok dari [PipelineState](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) untuk melakukan komputasinya. Nilai-nilai ini dapat berupa nilai yang disediakan oleh pengguna (seperti prompt atau gambar) atau nilai yang dihasilkan oleh blok sebelumnya (seperti `image_latents` yang telah dienkod). | |
| Gunakan `InputParam` untuk mendefinisikan `inputs`. | |
| ```py | |
| class ImageEncodeStep(ModularPipelineBlocks): | |
| ... | |
| @property | |
| def inputs(self): | |
| return [ | |
| InputParam(name="image", type_hint="PIL.Image", required=True, description="raw input image to process"), | |
| ] | |
| ... | |
| ``` | |
| - `intermediate_outputs` adalah nilai baru yang dibuat oleh sebuah blok dan ditambahkan ke [PipelineState](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState). `intermediate_outputs` tersedia sebagai `inputs` untuk blok berikutnya atau tersedia sebagai output akhir dari eksekusi pipeline. | |
| Gunakan `OutputParam` untuk mendefinisikan `intermediate_outputs`. | |
| ```py | |
| class ImageEncodeStep(ModularPipelineBlocks): | |
| ... | |
| @property | |
| def intermediate_outputs(self): | |
| return [ | |
| OutputParam(name="image_latents", description="latents representing the image"), | |
| ] | |
| ... | |
| ``` | |
| Input dan output antara berbagi data untuk menghubungkan blok. Keduanya dapat diakses kapan saja, memungkinkan Anda melacak kemajuan alur kerja. | |
| ## Komponen dan konfigurasi | |
| Komponen dan konfigurasi tingkat pipeline yang dibutuhkan sebuah blok ditentukan dalam [ComponentSpec](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_components#diffusers.ComponentSpec) dan [ConfigSpec](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_components#diffusers.ConfigSpec). | |
| - [ComponentSpec](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_components#diffusers.ComponentSpec) berisi komponen-komponen yang diharapkan digunakan oleh sebuah blok. Anda memerlukan `name` dari komponen tersebut dan idealnya sebuah `type_hint` yang menentukan secara persis apa komponen tersebut. | |
| - [ConfigSpec](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_components#diffusers.ConfigSpec) berisi pengaturan tingkat pipeline yang mengontrol perilaku di semua blok. | |
| ```py | |
| class ImageEncodeStep(ModularPipelineBlocks): | |
| ... | |
| @property | |
| def expected_components(self): | |
| return [ | |
| ComponentSpec(name="vae", type_hint=AutoencoderKL), | |
| ] | |
| @property | |
| def expected_configs(self): | |
| return [ | |
| ConfigSpec("force_zeros_for_empty_prompt", True), | |
| ] | |
| ... | |
| ``` | |
| Ketika blok dikonversi menjadi pipeline, komponen menjadi tersedia untuk blok sebagai argumen pertama di `__call__`. | |
| ## Logika komputasi | |
| Komputasi yang dilakukan oleh blok didefinisikan dalam metode `__call__` dan mengikuti struktur tertentu. | |
| 1. Ambil [BlockState](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) untuk mendapatkan tampilan lokal dari `inputs`. | |
| 2. Implementasikan logika komputasi pada `inputs`. | |
| 3. Perbarui [PipelineState](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) untuk mendorong perubahan dari [BlockState](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) lokal kembali ke [PipelineState](/docs/diffusers/v0.43.0/id/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) global. | |
| 4. Kembalikan komponen dan state yang menjadi tersedia untuk blok berikutnya. | |
| ```py | |
| class ImageEncodeStep(ModularPipelineBlocks): | |
| def __call__(self, components, state): | |
| # Get a local view of the state variables this block needs | |
| block_state = self.get_block_state(state) | |
| # Your computation logic here | |
| # block_state contains all your inputs | |
| # Access them like: block_state.image, block_state.processed_image | |
| # Update the pipeline state with your updated block_states | |
| self.set_block_state(state, block_state) | |
| return components, state | |
| ``` | |
| ## Menggabungkan semuanya | |
| Berikut adalah blok lengkap dengan semua bagian yang terhubung. | |
| ```py | |
| from diffusers import ComponentSpec, AutoencoderKL | |
| from diffusers.modular_pipelines import InputParam, ModularPipelineBlocks, OutputParam | |
| class ImageEncodeStep(ModularPipelineBlocks): | |
| @property | |
| def description(self): | |
| return "Encode an image into latent space." | |
| @property | |
| def expected_components(self): | |
| return [ | |
| ComponentSpec(name="vae", type_hint=AutoencoderKL), | |
| ] | |
| @property | |
| def inputs(self): | |
| return [ | |
| InputParam(name="image", type_hint="PIL.Image", required=True, description="raw input image to process"), | |
| ] | |
| @property | |
| def intermediate_outputs(self): | |
| return [ | |
| OutputParam(name="image_latents", type_hint="torch.Tensor", description="latents representing the image"), | |
| ] | |
| def __call__(self, components, state): | |
| block_state = self.get_block_state(state) | |
| block_state.image_latents = components.vae.encode(block_state.image) | |
| self.set_block_state(state, block_state) | |
| return components, state | |
| ``` | |
| Setiap blok memiliki properti `doc` yang dihasilkan secara otomatis dari properti yang Anda definisikan di atas. Properti ini menyediakan ringkasan deskripsi, komponen, input, dan output blok. | |
| ```py | |
| block = ImageEncoderStep() | |
| print(block.doc) | |
| class ImageEncodeStep | |
| Encode an image into latent space. | |
| Components: | |
| vae (`AutoencoderKL`) | |
| Inputs: | |
| image (`PIL.Image`): | |
| raw input image to process | |
| Outputs: | |
| image_latents (`torch.Tensor`): | |
| latents representing the image | |
| ``` | |
Xet Storage Details
- Size:
- 7.63 kB
- Xet hash:
- b9f02fbfe7d69181470d5bc9fb083e5b91a25c2a5667d16001cef391b5f8bffb
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.