본문으로 건너뛰기

© 2026 Molayo

HuggingFace중요헤드라인2026. 04. 24. 05:03

Modular Diffusers: 확산 모델 파이프라인의 모듈화 및 컴포지션 가이드

요약

Modular Diffusers는 기존 `DiffusionPipeline`보다 유연하고 조합 가능한(composable) 대안을 제공합니다. 이 기능을 통해 텍스트 인코딩, 이미지 인코딩, 디노이징, 디코딩 등 확산 모델의 각 구성 요소를 독립적인 '블록'으로 분리하여 관리할 수 있습니다. 개발자는 이러한 블록들을 자유롭게 추가, 제거, 교체하며 자신만의 워크플로우를 구축할 수 있으며, 이를 노드 기반 인터페이스(Mellon)와 연동하거나 커스텀 Python 클래스로 구현하여 복잡한 AI 파이프라인을 효율적으로 설계하고 최적화할 수

핵심 포인트

  • ModularDiffusers는 기존 DiffusionPipeline의 사용 편의성을 유지하면서도, 내부 구조를 텍스트 인코더, VAE 인코더, 디노이저 등 독립적인 '블록(Block)'으로 분해하여 높은 유연성을 제공합니다.
  • 각 블록은 자체 입력/출력과 계산 로직을 가지므로, 특정 단계(예: DepthProcessorBlock)만 추출하여 다른 워크플로우의 시작점으로 재사용할 수 있습니다.
  • 커스텀 블록은 `ModularPipelineBlocks`를 상속받는 Python 클래스로 정의되며, 필요한 컴포넌트(`expected_components`), 입력/출력(`inputs`, `intermediate_outputs`), 계산 로직(`__call__`)을 명시하여 구현합니다.
  • 데이터 흐름 관리를 위해 `ComponentsManager`를 사용하여 여러 파이프라인 간 모델 메모리 오프로딩 및 공유를 효율적으로 처리할 수 있습니다.

Modular Diffusers는 기존의 확산 모델(Diffusion Model) 파이프라인(DiffusionPipeline)이 가진 구조적 한계를 극복하고, 훨씬 유연하며 조합 가능한(composable) 워크플로우 구축 환경을 제공합니다. 이 아키텍처의 핵심은 복잡한 파이프라인 전체를 하나의 덩어리로 다루는 대신, 그 내부 구성 요소들(블록)을 독립적으로 분리하여 관리하는 데 있습니다.

1. 기본 사용 및 구조적 변화

기존 방식과 마찬가지로 ModularPipeline은 간단한 API 호출만으로 이미지 생성을 수행할 수 있어 사용자 경험 측면의 연속성이 높습니다. 하지만 내부적으로는 파이프라인이 여러 개의 독립적인 블록(예: 텍스트 인코딩, VAE 인코딩, 디노이징, 디코딩)들의 집합체로 구성되어 있음을 확인할 수 있습니다.

가장 큰 변화는 이 블록들이 독립적이라는 점입니다. 개발자는 pipe.blocks를 통해 모든 서브 블록(Sub-Blocks)을 확인하고, 특정 블록 하나만 추출하여 독립적인 파이프라인(text_pipe)으로 실행할 수 있습니다. 예를 들어, 텍스트 인코더 블록만 분리하여 프롬프트 임베딩(prompt_embeds)을 얻어낸 후, 이 임베딩을 나머지 디노이징 및 디코딩 과정에 직접 입력(Input)함으로써 워크플로우를 커스터마이징 할 수 있습니다.

2. 블록 기반의 재구성 (Recomposition)

Modular Diffusers는 단순히 블록을 분리하는 것을 넘어, 이들을 동적으로 재조합할 수 있게 합니다. 특정 블록을 삽입하거나 제거하면, 나머지 블록들은 자동으로 데이터 흐름(Data Flow)에 맞춰 조정됩니다. 예를 들어, Depth Map 추출과 같은 외부 기능을 추가할 때, 그 출력(control_image)은 후속 ControlNet 블록의 입력으로 자동 연결되며, 이는 파이프라인의 전체적인 유연성을 극대화합니다.

3. 커스텀 블록 구현: 무한한 확장성

Modular Diffusers가 진정으로 빛을 발하는 부분은 **커스텀 블록(Custom Block)**을 직접 정의할 수 있다는 점입니다. 개발자는 ModularPipelineBlocks를 상속받는 Python 클래스를 작성하여, 자신만의 계산 로직과 입출력 구조를 가진 새로운 블록을 만들 수 있습니다.

  • expected_components: 이 속성은 해당 블록이 작동하는 데 필요한 외부 모델 컴포넌트(예: Depth Estimation Model)를 정의합니다. pretrained_model_name_or_path를 통해 Hugging Face Hub에서 자동으로 모델을 로드할 수 있습니다.
  • inputs / intermediate_outputs: 블록의 입력과 출력을 명시하여 데이터 흐름 인터페이스를 확립합니다.
  • __call__(self, components, state): 이 메서드가 실제 계산 로직이 들어가는 핵심 부분입니다. 컴포넌트와 현재 상태(state)를 받아 원하는 연산을 수행하고 결과를 반환합니다.

예시로 Depth Anything V2를 사용하여 이미지에서 깊이 맵(Depth Map)을 추출하는 DepthProcessorBlock을 구현할 수 있으며, 이를 기존의 ControlNet 워크플로우 시작점에 삽입하여 제어 가능한 입력(control_image)을 자동으로 제공하게 됩니다.

4. 메모리 관리 및 최적화

다수의 파이프라인과 블록을 다룰 때 발생하는 메모리 문제를 해결하기 위해 ComponentsManager를 사용할 수 있습니다. 이 매니저는 사용하지 않는 모델 컴포넌트를 자동으로 CPU로 오프로딩(Offloading)하여, 여러 워크플로우가 동시에 작동해도 GPU 메모리를 효율적으로 관리할 수 있게 돕습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0