Diffusers documentation
상태
시작하기
추론
확산 파이프라인 사용
어댑터 및 개인화
최적화 및 확장
모듈형 Diffusers
개요빠른 시작DiffusionPipeline에서 가져오기상태ModularPipelineBlocksSequentialPipelineBlocksLoopSequentialPipelineBlocksAutoPipelineBlocksModularPipeline가이드ComponentsManager자동 docstring 및 매개변수 템플릿커스텀 블록 만들기Mellon에서 사용자 정의 블록 사용
학습 및 파인튜닝
리소스
기여하기
API
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).
상태
Blocks는 데이터 통신 및 공유를 위해 PipelineState와 BlockState 데이터 구조에 의존합니다.
| 상태 | 설명 |
|---|---|
| PipelineState | 파이프라인 실행에 필요한 전체 데이터를 유지하며, 블록이 해당 데이터를 읽고 업데이트할 수 있도록 합니다. |
| BlockState | 각 블록이 inputs에서 필요한 데이터로 계산을 수행할 수 있도록 합니다 |
이 가이드에서는 상태가 작동하는 방식과 블록을 연결하는 방식을 설명합니다.
PipelineState
PipelineState는 모든 블록을 위한 전역 상태 컨테이너입니다. 파이프라인의 완전한 런타임 상태를 유지하며, 블록이 공유 데이터를 읽고 쓰기 위한 구조화된 방법을 제공합니다.
PipelineState는 사용자가 제공한 입력 값과 블록이 생성한 중간 출력 값을 포함하는 가변 상태인 values 딕셔너리에 모든 데이터를 저장합니다. 블록이 input을 수정하면 set_block_state를 호출한 후 values 딕셔너리에 반영됩니다.
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는 개별 블록이 PipelineState에서 자신의 계산을 수행하는 데 필요한 관련 변수에 대한 로컬 뷰입니다.
block_state.image와 같은 속성으로 이러한 변수에 직접 액세스할 수 있습니다.
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를 업데이트합니다.
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와 BlockState의 상호작용은 블록의 inputs와 intermediate_outputs에 의해 정의됩니다.
inputs블록은block_state.image와 같은 입력을 수정할 수 있으며,set_block_state를 호출하면 이 변경 사항이 PipelineState에 전역적으로 전파됩니다.intermediate_outputs는 블록이 생성하는 새로운 변수입니다. PipelineState의values딕셔너리에 추가되며, 후속 블록에서 사용하거나 사용자가 파이프라인의 최종 출력으로 접근할 수 있습니다.