Buckets:

hf-doc-build/doc / diffusers /main /ko /modular_diffusers /sequential_pipeline_blocks.md
mishig's picture
|
download
raw
5.82 kB
# SequentialPipelineBlocks
[SequentialPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks)는 여러 [ModularPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)를 순서대로 조합하는 멀티 블록 유형입니다. 데이터는 `inputs`와 `intermediate_outputs`를 사용하여 한 블록에서 다음 블록으로 선형적으로 흐릅니다. [SequentialPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks)의 각 블록은 일반적으로 파이프라인의 한 단계를 나타내며, 이를 조합함으로써 파이프라인을 점진적으로 구축할 수 있습니다.
이 가이드에서는 두 개의 블록을 [SequentialPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks)에 연결하는 방법을 보여줍니다.
두 개의 [ModularPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)를 생성합니다. 첫 번째 블록인 `InputBlock`은 `batch_size` 값을 출력하고, 두 번째 블록인 `ImageEncoderBlock`은 `batch_size`를 `inputs`로 사용합니다.
```py
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
```
```py
import torch
from diffusers.modular_pipelines import ModularPipelineBlocks, InputParam, OutputParam
class ImageEncoderBlock(ModularPipelineBlocks):
@property
def inputs(self):
return [
InputParam(name="image", type_hint="PIL.Image", description="raw input image to process"),
InputParam(name="batch_size", type_hint=int),
]
@property
def intermediate_outputs(self):
return [
OutputParam(name="image_latents", description="latents representing the image"),
]
@property
def description(self):
return "Encode raw image into its latent presentation"
def __call__(self, components, state):
block_state = self.get_block_state(state)
# Simulate processing the image
# This will change the state of the image from a PIL image to a tensor for all blocks
block_state.image = torch.randn(1, 3, 512, 512)
block_state.batch_size = block_state.batch_size * 2
block_state.image_latents = torch.randn(1, 4, 64, 64)
self.set_block_state(state, block_state)
return components, state
```
[SequentialPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks)를 정의하여 두 블록을 연결합니다. `block_classes`에 블록 인스턴스를, `block_names`에 해당 이름을 나열합니다. 블록은 `block_classes`에 나타나는 순서대로 실행되며, 데이터는 [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)를 통해 한 블록에서 다음 블록으로 흐릅니다.
```py
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."
)
```
[SequentialPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks)를 생성하면 `inputs`, `intermediate_outputs`, `expected_components`와 같은 속성이 하위 블록에서 자동으로 집계되므로 다시 정의할 필요가 없습니다.
설정해야 할 몇 가지 속성이 있습니다:
- `description`: 조립된 블록에 대해 결합된 단계가 수행하는 내용을 설명하는 설명을 추가하는 것을 권장합니다.
- `model_name`: 이는 서브 블록에서 자동으로 파생되지만 항상 정확하지는 않으므로, 필요에 따라 오버라이드해야 할 수 있습니다.
- `outputs`: 기본적으로 `intermediate_outputs`와 동일하지만, 문서에 표시될 값을 제어하기 위해 수동으로 설정할 수 있습니다. 이는 모든 중간 값 대신 최종 출력만 표시하는 데 유용합니다.
이러한 속성과 집계된 `inputs`, `intermediate_outputs`, `expected_components`는 `doc` 속성을 자동으로 생성하는 데 사용됩니다.
`ImageProcessingStep` 블록을 출력하여 하위 블록을 확인하고, 블록의 입력, 출력 및 구성 요소에 대한 전체 요약을 보려면 `doc`을 사용하세요.
```py
blocks = ImageProcessingStep()
print(blocks)
print(blocks.doc)
```

Xet Storage Details

Size:
5.82 kB
·
Xet hash:
d62af25c767c15ce1a6a7b99523f78586a2bb957288fa3be4cdc56ce64aae837

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