# 상태

Blocks는 데이터 통신 및 공유를 위해 [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)와 [BlockState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) 데이터 구조에 의존합니다.

| 상태 | 설명 |
|-------|-------------|
| [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState) | 파이프라인 실행에 필요한 전체 데이터를 유지하며, 블록이 해당 데이터를 읽고 업데이트할 수 있도록 합니다. |
| [BlockState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState) | 각 블록이 `inputs`에서 필요한 데이터로 계산을 수행할 수 있도록 합니다|

이 가이드에서는 상태가 작동하는 방식과 블록을 연결하는 방식을 설명합니다.

## PipelineState

[PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)는 모든 블록을 위한 전역 상태 컨테이너입니다. 파이프라인의 완전한 런타임 상태를 유지하며, 블록이 공유 데이터를 읽고 쓰기 위한 구조화된 방법을 제공합니다.

[PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)는 사용자가 제공한 입력 값과 블록이 생성한 중간 출력 값을 포함하는 **가변** 상태인 `values` 딕셔너리에 모든 데이터를 저장합니다. 블록이 `input`을 수정하면 `set_block_state`를 호출한 후 `values` 딕셔너리에 반영됩니다.

```py
PipelineState(
  values={
    'prompt': 'a cat'
    'guidance_scale': 7.0
    'num_inference_steps': 25
    'prompt_embeds': Tensor(dtype=torch.float32, shape=torch.Size([1, 1, 1, 1]))
    'negative_prompt_embeds': None
  },
)
```

## BlockState

[BlockState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState)는 개별 블록이 [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)에서 자신의 계산을 수행하는 데 필요한 관련 변수에 대한 로컬 뷰입니다.

`block_state.image`와 같은 속성으로 이러한 변수에 직접 액세스할 수 있습니다.

```py
BlockState(
    image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)
```

블록의 `__call__` 메서드가 실행되면 `self.get_block_state(state)`로 `BlockState`를 가져오고, 연산을 수행한 후 `self.set_block_state(state, block_state)`로 [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)를 업데이트합니다.

```py
def __call__(self, components, state):
    # retrieve BlockState
    block_state = self.get_block_state(state)

    # computation logic on inputs

    # update PipelineState
    self.set_block_state(state, block_state)
    return components, state
```

## 상태 상호작용

[PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)와 [BlockState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.BlockState)의 상호작용은 블록의 `inputs`와 `intermediate_outputs`에 의해 정의됩니다.

- `inputs` 블록은 `block_state.image`와 같은 입력을 수정할 수 있으며, `set_block_state`를 호출하면 이 변경 사항이 [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)에 전역적으로 전파됩니다.
- `intermediate_outputs`는 블록이 생성하는 새로운 변수입니다. [PipelineState](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_states#diffusers.modular_pipelines.PipelineState)의 `values` 딕셔너리에 추가되며, 후속 블록에서 사용하거나 사용자가 파이프라인의 최종 출력으로 접근할 수 있습니다.

