Stable Diffusion 이미지 생성 FastAPI 서버 (new-onf-server-sd) — 역분석

대상 이미지(삭제됨): frosting/new-onf-server-sd:3.0.0 digest sha256:a40ac8a02b7943d5db3348a7ee87425b438fe0e18baf483a935c5e1e1e8cfa9a, 12.7GB(압축 다이제스트 기준 / 보고서의 42.1GB는 비압축 추정), 2026-03-02 빌드 공개 DockerHub 이미지 → 재pull 가능(삭제 가역). 근거: 이미지 빌드 히스토리(rtx3-docker-leftover-detail.txt 1160~1270행)만으로 역분석. 소스 본문(run.py 등)은 확보 못 함(이미지 삭제). 따라서 "구조·파일·모델·실행방식"은 확실, 알고리즘 세부는 추정으로 구분 표기.


한 줄 요약

프롬프트를 받아 Stable Diffusion(SD 1.5/2.x + SDXL 추정)으로 이미지를 생성 → Real-ESRGAN 업스케일 → 검증/후처리까지 수행하는 FastAPI(uvicorn) 단일 HTTP 서버. 상시 떠 있는 REST 엔드포인트(run:app, 포트 3000)로 동작하며, onediff/oneflow 컴파일 가속이 적용된 게 가장 큰 특징. 이름의 onf = oneflow(추정).

기동 명령(CMD):

/bin/bash --login -c "ulimit -n 65536 && uvicorn run:app --host 0.0.0.0 --port 3000"

1. 무엇을 하는 서버인가 (기능)

/server 아래에 ADD 된 소스 파일 구성이 곧 기능 명세다(히스토리 1213~1221행):

파일 크기 역할(추정)
run.py 16.4kB FastAPI 진입점(app) — 라우트/요청 스키마/오케스트레이션
mega.py 12.3kB 메인 생성 파이프라인(SD 1.5/2.x 계열 추정)
mega_xl.py 8.19kB SDXL 전용 파이프라인(_xl → SDXL 추정)
text_encoder.py 8.19kB 텍스트 인코더/프롬프트 처리(CLIP, compel 연동 추정)
helpers.py 8.19kB 공통 유틸
image.py 4.1kB 이미지 입출력/인코딩(AVIF/PNG 추정)
upscale.py 4.1kB Real-ESRGAN 업스케일 단계
validation.py 4.1kB 요청/출력 검증(파라미터·세이프티·크기 검사 추정)
vae.py 4.1kB VAE 디코딩/로딩

→ 전형적 용도(추정): txt2img 상용 추론 API. 프롬프트 + 파라미터를 JSON으로 받아 이미지를 생성·업스케일해 반환하는 마이크로서비스. mega/mega_xl 두 파이프라인 병존 → SD1.5/SDXL 모델을 요청에 따라 선택하는 멀티모델 서버.


2. 모델·라이브러리 구성 (생성 + 업스케일 + 임베딩)

빌드 히스토리에서 확인되는 핵심 의존성(1213~1248행):

구성요소 정체 역할
diffusers==0.27.2 HuggingFace Diffusers SD/SDXL 파이프라인 본체
compel==2.0.3 프롬프트 가중치 파서 (word:1.3) 식 프롬프트 weighting/blending
transformers==4.27.1 (초기 레이어) CLIP 텍스트 인코더 등
Real-ESRGAN sberbank-ai/Real-ESRGAN fork (git@362a031) 업스케일
RealESRGAN_x4.pth (67MB), RealESRGAN_x2.pth (67.1MB) 업스케일 가중치(내장) 4×/2× 업스케일
opencv-python-headless==4.8.0.74 헤드리스 OpenCV 이미지 처리
ffmpeg (apt) 미디어 영상/프레임 처리 정황
numpy==1.26.4 핀 고정 호환성
huggingface_hub[hf_transfer] 고속 모델 다운로드 런타임 가중치 페치 정황

Textual Inversion 임베딩(ADD, 1233~1236행) — 도메인을 강하게 시사:

e621·fluffyrock은 anime/furry(퍼리) 도메인의 대표 데이터셋/모델 계열. → 이 서버는 애니/퍼리 스타일 이미지 생성에 특화됐을 가능성(추정). 베이스 SD 체크포인트 자체는 히스토리에 안 굽혀 있고(런타임 다운로드 추정) 임베딩만 내장.


3. 핵심 성능 포인트 — onediff / oneflow 컴파일 가속

이 이미지의 가장 큰 학습 가치(1244~1250행):

→ onediff는 diffusers 파이프라인을 oneflow 백엔드로 컴파일/그래프 최적화해 SD 추론을 가속하는 라이브러리. 즉 표준 PyTorch diffusers 대비 추론 지연/처리량을 끌어올리려는 의도가 명확. 이미지 이름 new-onf-server의 onf는 oneflow의 약어로 추정.


4. 베이스 이미지 / 기술 스택

베이스는 NVIDIA PyTorch NGC 컨테이너 23.08 계열(LABEL/ENV로 확정, 1168·1209행):

베이스가 onediff/oneflow(cu118)와 NGC(cuda12.2)로 CUDA 버전이 혼재한다는 점은 빌드의 거친 면(임차인이 끌어모아 조립한 정황).


5. 추정 파이프라인 흐름 (재구성)

HTTP POST (프롬프트 + 파라미터)  →  uvicorn run:app (:3000)
  └─ validation.py        : 요청/파라미터 검증
  └─ text_encoder.py      : compel 로 프롬프트 가중치 파싱 + CLIP 인코딩
  └─ mega.py / mega_xl.py : diffusers 파이프라인(SD1.5 / SDXL) — onediff(oneflow) 컴파일 가속
       └─ Textual Inversion 임베딩(bad_hands/EasyNegative/boring_e621*) 적용
  └─ vae.py               : latent → 이미지 디코딩
  └─ upscale.py           : Real-ESRGAN x2/x4 업스케일
  └─ image.py             : AVIF/PNG 인코딩 후 응답

6. 확실 vs 추정

복구/재현 단서