Buckets:
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 veinputsile eşdeğerdir.loop_intermediate_outputs, blok tarafından oluşturulan ve PipelineState'e eklenen yeni ara değişkenlerdir.intermediate_outputsile 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.