Diffusers documentation

SequentialPipelineBlocks

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SequentialPipelineBlocks

SequentialPipelineBlocks adalah tipe multi-blok yang menyusun beberapa ModularPipelineBlocks lainnya secara berurutan. Data mengalir secara linear dari satu blok ke blok berikutnya menggunakan inputs dan intermediate_outputs. Setiap blok dalam SequentialPipelineBlocks biasanya mewakili satu langkah dalam pipeline, dan dengan menggabungkannya, Anda secara bertahap membangun sebuah pipeline.

Panduan ini menunjukkan cara menghubungkan dua blok menjadi SequentialPipelineBlocks.

Buat dua ModularPipelineBlocks. Blok pertama, InputBlock, menghasilkan nilai batch_size dan blok kedua, ImageEncoderBlock menggunakan batch_size sebagai inputs.

InputBlock
ImageEncoderBlock
from diffusers.modular_pipelines import ModularPipelineBlocks, InputParam, OutputParam

class InputBlock(ModularPipelineBlocks):

    @property
    def inputs(self):
        return [
            InputParam(name="prompt", type_hint=list, description="list of text prompts"),
            InputParam(name="num_images_per_prompt", type_hint=int, description="number of images per prompt"),
        ]

    @property
    def intermediate_outputs(self):
        return [
            OutputParam(name="batch_size", description="calculated batch size"),
        ]

    @property
    def description(self):
        return "A block that determines batch_size based on the number of prompts and num_images_per_prompt argument."

    def __call__(self, components, state):
        block_state = self.get_block_state(state)
        batch_size = len(block_state.prompt)
        block_state.batch_size = batch_size * block_state.num_images_per_prompt
        self.set_block_state(state, block_state)
        return components, state

Hubungkan kedua blok tersebut dengan mendefinisikan SequentialPipelineBlocks. Daftarkan instance blok di block_classes dan nama yang sesuai di block_names. Blok-blok tersebut dieksekusi sesuai urutan kemunculannya di block_classes, dan data mengalir dari satu blok ke blok berikutnya melalui PipelineState.

class ImageProcessingStep(SequentialPipelineBlocks):
    """
    # auto_docstring
    """
    model_name = "my_model"
    block_classes = [InputBlock(), ImageEncoderBlock()]
    block_names = ["input", "image_encoder"]

    @property
    def description(self):
        return (
            "Process text prompts and images for the pipeline. It:\n"
            " - Determines the batch size from the prompts.\n"
            " - Encodes the image into latent space."
        )

Saat Anda membuat SequentialPipelineBlocks, properti seperti inputs, intermediate_outputs, dan expected_components secara otomatis diagregasi dari sub-blok, sehingga tidak perlu mendefinisikannya lagi.

Ada beberapa properti yang perlu Anda atur:

  • description: Kami merekomendasikan untuk menambahkan deskripsi pada blok yang dirakit untuk menjelaskan apa yang dilakukan oleh langkah gabungan tersebut.
  • model_name: Ini diturunkan secara otomatis dari sub-blok, tetapi tidak selalu benar, sehingga Anda mungkin perlu menimpanya.
  • outputs: Secara default, ini sama dengan intermediate_outputs, tetapi Anda dapat menyetelnya secara manual untuk mengontrol nilai mana yang muncul di dokumen. Ini berguna untuk menampilkan hanya output akhir, bukan semua nilai perantara.

Properti-properti ini, bersama dengan inputs, intermediate_outputs, dan expected_components yang telah diagregasi, digunakan untuk secara otomatis menghasilkan properti doc.

Cetak blok ImageProcessingStep untuk memeriksa sub-bloknya, dan gunakan doc untuk ringkasan lengkap mengenai input, output, dan komponen blok tersebut.

blocks = ImageProcessingStep()
print(blocks)
print(blocks.doc)
Update on GitHub