Stable Diffusion 모델 구성요소를 로컬에서 조립한 다음, 이를 Docker 기반 API 서버로 패키징한 과정을 정리했다.
작업 배경
앞선 포스팅에서 from_pretrained() 없이 로컬에 저장된 모델 구성 요소들만으로 Stable Diffusion 파이프라인을 조립했다. 그리고 이후에는 이 모델들을 EFS에 저장하고 API 서버에서 직접 로딩하는 구조로 개선했다.
이제 남은 건 이 환경을 실제 운영에 적합한 형태로 포장하는 일. 즉, Docker 컨테이너로 패키징해서 어디서든 실행 가능하게 만드는 것이었다.
Dockerfile 구성
패키징 대상은 다음과 같다:
- FastAPI 기반 API 서버 코드 (main.py)
- Stable Diffusion 구성 요소를 로드하는 로직
- requirements.txt에 정의된 Python 패키지
Dockerfile은 CUDA 지원 PyTorch 공식 이미지를 베이스로 사용했다:
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
WORKDIR /app
RUN apt-get update && apt-get install -y \
git \
wget \
curl \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY main.py .
EXPOSE 8000
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
💡 PyTorch, CUDA, FastAPI, diffusers, transformers 등이 requirements에 포함되어 있음
requirements.txt 주요 구성
torch==2.2.2
diffusers==0.34.0
transformers==4.54.1
fastapi==0.104.1
uvicorn[standard]==0.24.0
huggingface_hub==0.34.3
accelerate==1.9.0
Pillow==10.1.0
python-multipart==0.0.6
모두 테스트된 안정 버전으로, docker 이미지 빌드 시 직접 캐시 없이 설치된다.
Docker Compose 구성
version: '3.8'
services:
stable-diffusion-api:
build: .
ports:
- "8000:8000"
environment:
- CUDA_VISIBLE_DEVICES=0
runtime: nvidia
volumes:
- /mnt/efs/saved_sd15:/mnt/efs/saved_sd15
restart: unless-stopped
- runtime: nvidia → GPU 사용을 위한 설정
- /mnt/efs/saved_sd15 → 로컬 저장 대신 EFS 경로를 컨테이너 안에 마운트
- CUDA_VISIBLE_DEVICES=0 → 특정 GPU만 사용하도록 설정
실행 결과 & 효과
- 컨테이너는 FastAPI 서버로 잘 실행되며 Swagger UI를 통해 API 테스트 가능
- EFS에 저장된 모델 구성 요소를 정상적으로 불러옴
- 별도 모델 다운로드 없이 API 동작까지 평균 2~3초 이내 응답 확인
전체 구조 요약
[ EFS 저장 모델 구성 요소 ]
▲
│ (volumes 마운트)
▼
[ Docker 컨테이너 실행 ]
└── main.py에서 /mnt/efs/saved_sd15 경로 참조
└── FastAPI + Uvicorn으로 API 실행
이제는 어디서든 docker-compose up --build 한 번이면 Stable Diffusion 서버를 띄울 수 있게 된 셈이다.
컨테이너 실행 & 모델 세팅
컨테이너 실행 방법, 모델 구성요소 다운로드 스크립트, requirements.txt 등은 아래 레포지토리에 정리해두었습니다:
👉 GitHub 레포 바로가기
(실행 가이드와 예제 curl 명령까지 포함되어 있어 바로 테스트 가능합니다.)
정리
- Stable Diffusion 모델 구성요소를 사전에 저장하고
- EFS를 통해 경량화된 컨테이너에 연결한 뒤
- FastAPI 기반으로 패키징해서 컨테이너 하나로 배포 가능하게 구성
실제 운영 환경에서도 깔끔하게 재현 가능하며, CI/CD나 Cloud Run 같은 배포 자동화에 활용하기 좋은 형태가 되었다.
다음에는 EBS 용량 최소화와 gp3 전환 작업이 예정되어있습니다~
Stable Diffusion 모델 파이프라인 구성 관련해서 새로운 아이디어가 있다면 언제든지 댓글로 남겨주세요!
'development > 머신러닝 운영' 카테고리의 다른 글
| AWS 인스턴스 스토어(ephemeral0)로 EBS 용량 한계 극복하기 (6) | 2025.08.10 |
|---|---|
| EBS 최소 볼륨 실험기 & gp3로 전환한 이유 (4) | 2025.08.10 |
| EFS에 모델 구성요소 저장하고, 컨테이너에서 불러오는 구조로 전환하기 (3) | 2025.08.08 |
| PyTorch 모델 저장 시 ModuleNotFoundError 오류 해결기: pickle과 버전 호환의 함정 (2) | 2025.08.08 |
| from_pretrained 없이 로컬 구성요소만으로 Stable Diffusion 파이프라인 조립하기 (4) | 2025.08.07 |