Multimodal Data Processing Engine

텍스트·이미지·오디오·비디오·임베딩을 CPU+GPU 혼합 파이프라인으로 대규모 배치 처리하는 엔진


핵심 개념

Multimodal Data Processing Engine은 멀티모달 데이터(MB~GB 단위의 큰 행)를 읽어 다단계 CPU+GPU 파이프라인(디코딩 → 임베딩 → 추론 → 테이블 쓰기)을 돌리는 배치 처리 엔진이다. 기존 분석 엔진(Spark at Scale)이 작은 행의 집계에 최적화된 반면, 이 영역은 GPU를 굶기지 않으면서(GPU 활용률이 종종 50% 미만) 대용량 페이로드를 효율적으로 흘리는 것이 핵심이다.

대표 엔진: Ray Data, Daft. 둘 다 KubeRay 위에서 동작하며(Daft 분산 러너는 Ray executor) 배치 오프라인 추론에 최적화돼 있다.

두 가지 아키텍처 명제

Ray Data — disaggregated execution

  • GPU 활용률이 낮은 이유는 상류 CPU 전처리가 가속기를 못 따라가기 때문 → 독립 CPU/GPU 플릿을 in-memory object store로 연결, 디스크 materialization 없이 backpressure 스트리밍
  • streaming batch 모델: Spark의 파티션 단위 내결함성 + Flink의 operator-to-operator 스트리밍 파이프라이닝을 융합
  • 명시적 primitive(ActorPoolStrategy, num_gpus=0.5, asyncio.Semaphore) — 용량·동시성을 사용자가 작성(프레임워크가 추론하지 않음)

Daft — expression tree(AST) + native multimodal types

  • 멀티모달 행은 처음부터 크고 파이프라인 진행하며 더 커진다는 전제 → Swordfish 스트리밍 러너(push-based morsel, I/O와 compute 스레드 풀 분리)
  • 파이프라인 전체를 최적화 가능한 expression tree로 파싱 → async I/O와 sync compute 분리, filter pushdown, 자동 dtype/메모리 레이아웃 재작성
  • read_video_frames, audio_file().resample(), embed_image, embed_text, join_asof 등 네이티브 멀티모달 연산자. Image/Tensor/Audio가 Arrow 백업 실타입

트레이드오프 (실전 비교)

Ray DataDaft
안정성높음(대규모 비동기 완주)0.x — 대규모 비동기에서 미완주 사례
동시성 제어enforced(Semaphore)advisory 힌트(검증 필요)
멀티모달 ergonomicshand-rolled(PyAV 등 수십 줄)one-liner native primitive
플랫폼Ray Core(Train/Serve/Tune)멀티모달 타입 1급
거버넌스Apache 2.0, PyTorch Foundation0.x, ByteDance Volcano 파트너십

교훈: 안정성은 배치 인프라의 최고 가중치이자 이진적(한 엔진이 완주하고 다른 엔진이 못하면 ergonomic 차이는 무의미). native primitive는 capability가 아닌 ergonomic 축. concurrency knob은 스케일 전 100행 스모크로 advisory/enforced를 검증.

주변 스택

  • Lance + DuckDB(lance extension): 멀티모달 저장 spine — blob 컬럼을 lazy하게 스트리밍, 미선택 시 0바이트
  • Apache Gravitino: Iceberg + Lance를 한 metalake로 묶는 통합 카탈로그
  • 체크포인트는 user code가 아닌 Read op에서(format-agnostic resume)

연관 개념


Source: Ray Data vs Daft for Multimodal Data Lake