Buckets:

hf-doc-build/doc / diffusers /main /tr /modular_diffusers /loop_sequential_pipeline_blocks.md
mishig's picture
|
download
raw
5.17 kB

LoopSequentialPipelineBlocks

LoopSequentialPipelineBlocks, diğer ModularPipelineBlocks öğelerini bir döngü içinde bir araya getiren çoklu blok türüdür. Veri, inputs ve intermediate_outputs kullanılarak dairesel olarak akar ve her blok yinelemeli olarak çalıştırılır. Bu, varsayılan olarak yinelemeli olan bir gürültü azaltma döngüsü oluşturmak için tipik olarak kullanılır.

Bu kılavuz, LoopSequentialPipelineBlocks oluşturmayı gösterir.

Döngü sarmalayıcısı

LoopSequentialPipelineBlocks, döngü yapısını, yineleme değişkenlerini ve yapılandırmayı tanımladığı için döngü sarmalayıcısı olarak da bilinir. Döngü sarmalayıcısı içinde aşağıdaki değişkenlere ihtiyacınız vardır.

  • loop_inputs, kullanıcı tarafından sağlanan değerlerdir ve inputs ile eşdeğerdir.
  • loop_intermediate_outputs, blok tarafından oluşturulan ve PipelineState'e eklenen yeni ara değişkenlerdir. intermediate_outputs ile eşdeğerdir.
  • __call__ metodu, döngü yapısını ve yineleme mantığını tanımlar.
import torch
from diffusers.modular_pipelines import LoopSequentialPipelineBlocks, ModularPipelineBlocks, InputParam, OutputParam

class LoopWrapper(LoopSequentialPipelineBlocks):
    model_name = "test"
    @property
    def description(self):
        return "I'm a loop!!"
    @property
    def loop_inputs(self):
        return [InputParam(name="num_steps")]
    @torch.no_grad()
    def __call__(self, components, state):
        block_state = self.get_block_state(state)
        # Loop structure - can be customized to your needs
        for i in range(block_state.num_steps):
            # loop_step executes all registered blocks in sequence
            components, block_state = self.loop_step(components, block_state, i=i)
        self.set_block_state(state, block_state)
        return components, state

Döngü sarmalayıcısı, döngü bloklarına, mevcut yineleme indeksi gibi ek argümanlar iletebilir.

Döngü blokları

Bir döngü bloğu bir ModularPipelineBlocks'tür ancak __call__ metodu farklı davranır.

  • Döngü sarmalayıcısından yineleme değişkenini alır.
  • It works directly with the BlockState instead of the PipelineState.
  • BlockState almayı veya güncellemeyi gerektirmez.

Loop blokları, döngüdeki her yinelemede değerlerin birikmesine ve değişmesine izin vermek için aynı BlockState'i paylaşır.

class LoopBlock(ModularPipelineBlocks):
    model_name = "test"
    @property
    def inputs(self):
        return [InputParam(name="x")]
    @property
    def intermediate_outputs(self):
        # outputs produced by this block
        return [OutputParam(name="x")]
    @property
    def description(self):
        return "I'm a block used inside the `LoopWrapper` class"
    def __call__(self, components, block_state, i: int):
        block_state.x += 1
        return components, block_state

LoopSequentialPipelineBlocks

Döngü bloğunu döngü sarmalayıcısına ekleyerek LoopSequentialPipelineBlocks oluşturmak için from_blocks_dict() yöntemini kullanın.

loop = LoopWrapper.from_blocks_dict({"block1": LoopBlock})

Her yinelemede çalışacak şekilde daha fazla döngü bloğu eklemek için from_blocks_dict() kullanın. Bu, döngü mantığının kendisini değiştirmeden blokları düzenlemenizi sağlar.

loop = LoopWrapper.from_blocks_dict({"block1": LoopBlock(), "block2": LoopBlock})

Mevcut bir pipeline'ın gürültü azaltma döngüsüne bir döngü bloğu eklemek için, örneğin her adımda callback_on_step_end fonksiyonunu çalıştıran bir blok için, callback kılavuzundaki Modüler pipeline'lar bölümüne bakın.

Xet Storage Details

Size:
5.17 kB
·
Xet hash:
91e081f57912e613feb54849b867375b3e3dc57e098ff6cd29fd74cbb605086c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.