BentoML을 사용한 DeepFloyd IF 배포

TL;DR

Hugging Face는 BentoML을 사용하여 DeepFloyd IF를 배포하는 워크플로를 상세히 설명했는데, 이는 오픈소스 모델 서빙 프레임워크입니다. 이 통합을 통해 개발자는 서로 다른 GPU 리소스에 걸쳐 추론 러너를 독립적으로 확장하여 DeepFloyd IF의 복잡하고 다단계 아키텍처를 관리함으로써 프로덕션 성능을 최적화할 수 있습니다.

DeepFloyd IF 아키텍처 및 기능

DeepFloyd IF는 픽셀 공간에서 직접 작동하는 오픈소스 텍스트-이미지 모델로, Stable Diffusion과 같은 잠재 확산 모델과 구별됩니다. 동결된 텍스트 인코더와 세 개의 캐스케이드 픽셀 확산 모듈로 구성된 모듈러 구조를 사용합니다:

  • Stage 1: 64x64 픽셀 크기의 기본 이미지를 생성합니다.
  • Stage 2와 3: 이미지를 점진적으로 확대하여 최종 해상도 1024x1024 픽셀로 만듭니다.

복잡한 프롬프트에 대한 언어 이해를 향상시키기 위해 DeepFloyd IF는 텍스트 인코더로 T5-XXL-1.1 대형 언어 모델(LLM)을 통합합니다.

BentoML을 사용한 프로덕션 배포

BentoML은 Hugging Face Hub에서 프로덕션 준비가 된 AI 애플리케이션으로 모델을 전환하기 위한 통합 프레임워크를 제공합니다. 배포 프로세스는 다섯 단계의 생명 주기를 따릅니다:

  1. 모델 정의: PyTorch 또는 TensorFlow와 같은 라이브러리에서 훈련된 모델을 활용합니다.
  2. 모델 저장: 관리 및 서빙 접근을 위해 BentoML 로컬 Model Store에 모델을 저장합니다.
  3. BentoML 서비스 생성: service.py 파일을 사용하여 모델을 래핑하고, Runners를 통해 서빙 로직을 정의합니다. Runners는 대규모 모델 추론을 처리하고 입력/출력 처리를 위한 API를 노출합니다.
  4. Bento 빌드: 서비스와 모델을 YAML 구성 파일을 통해 필요한 모든 코드와 의존성을 포함한 배포 가능한 아티팩트인 "Bento"로 패키지합니다.
  5. Bento 배포: 쿠버네티스 배포를 위해 Bento를 Docker 이미지로 컨테이너화하거나, 쿠버네티스에서 자동 확장을 위해 Yatai를 사용할 수 있습니다.

기술 구현 및 리소스 관리

DeepFloyd IF를 배포하려면 상당한 계산 리소스가 필요합니다. 권장 하드웨어는 최소 2x16GB VRAM GPU 또는 1x40GB VRAM GPU입니다. 프로덕션 등급 서빙에서는 단일 Tesla T4를 권장하지 않습니다.

GPU 할당 전략

BentoML은 DeepFloyd IF 파이프라인의 각 단계별로 러너를 독립적으로 확장할 수 있게 하여, 개발자가 각 단계의 특정 요구에 따라 리소스를 할당할 수 있게 합니다.

  • 고 VRAM (40GB 이상): 모든 모델은 단일 GPU에서 실행할 수 있습니다.
  • 듀얼 Tesla T4 (각각 15GB): Stage 1은 첫 번째 GPU에 할당할 수 있으며, Stages 2와 3은 두 번째 GPU에 할당할 수 있습니다.
  • 혼합 GPU 설정: Stage 1은 기본 GPU(예: T4)에 할당할 수 있으며, Stages 2와 3은 더 작은 VRAM을 가진 두 개의 추가 GPU에 분산될 수 있습니다.

배포 워크플로

이 설정을 구현하기 위해 개발자는 import_models.py를 사용하여 필요한 단계를 BentoML Model Store에 다운로드하고, service.py를 사용하여 JSON 프롬프트와 네거티브 프롬프트를 받아들여 생성된 이미지를 반환하는 API를 정의합니다. 최종 아티팩트는 bentoml build를 사용하여 패키징되며, bentoml serve를 통해 로컬에서 제공하거나 bentoml containerize를 사용하여 클라우드에 배포할 수 있습니다.

Sources