16-(3) 현존하는 AI 웹/앱서비스를 하나 선정하세요. (가상의 서비스로 해보는 것도 좋아요.) 그 서비스가 지금까지 학습한 Docker, 추론 최적화, Streamlit, FastAPI로 구현되었다고 가정하고, 전체 아키텍처를 작성해보세요. 만약 가능하다면, 보안 요소(CORS 등)/멀티유저 요청 처리 방안(비동기 처리, 대기 큐 등)/클라우드 배포 구조(GCP, AWS)/모니터링 및 로깅 전략 까지 포함하여 작성해보세요.
16-(3) 현존하는 AI 웹/앱서비스를 하나 선정하세요. (가상의 서비스로 해보는 것도 좋아요.) 그 서비스가 지금까지 학습한 Docker, 추론 최적화, Streamlit, FastAPI로 구현되었다고 가정하고, 전체 아키텍처를 작성해보세요. 만약 가능하다면, 보안 요소(CORS 등)/멀티유저 요청 처리 방안(비동기 처리, 대기 큐 등)/클라우드 배포 구조(GCP, AWS)/모니터링 및 로깅 전략 까지 포함하여 작성해보세요.
🟢 가상의 서비스 하나를 골라서 Streamlit + FastAPI + Triton 기반으로 전체 아키텍처를 설계해보자.
⚪ 1. 가상 서비스 정의: “QSM-AI”
본 아키텍처 설계는 가상의 AI 서비스 “QSM-AI”를 기준으로 한다.
- 기능: mGRE (multi-echo Gradient Echo) MRI의 Phase(
.nii) 파일을 업로드하면, 딥러닝 모델(e.g., QSM-ViT)이 이를 실시간으로 QSM (Quantitative Susceptibility Map) 영상으로 재구성하는 웹 서비스. - 핵심 요구 기술:
Streamlit(UI),FastAPI(Logic),Triton(Inference),Docker(Packaging)
⚪ 2. 핵심 아키텍처: 3-Tier Decoupled Microservices
가장 효율적이고 확장 가능한 구조는 각 컴포넌트의 역할을 명확히 분리(Decouple)하는 3-Tier 마이크로서비스 아키텍처이다.
- Tier 1:
streamlit-fe(Frontend): 사용자 UI - Tier 2:
fastapi-be(Backend): API Gateway, 비즈니스 로직, 전/후처리 - Tier 3:
triton-is(Inference): 고성능 AI 모델 추론
이 세 서비스는 각각 별도의 Docker 컨테이너로 실행되며, docker-compose나 Kubernetes 환경의 내부 사설 네트워크를 통해 통신한다.
Tier 1: Frontend (Streamlit-FE)
- 역할: 사용자 인터페이스 및 상호작용.
- 기술:
Streamlit - 동작:
st.file_uploader로.nii파일 수신.httpx라이브러리를 사용하여fastapi-be의 API 엔드포인트(http://fastapi-be:8000/api/v1/reconstruct)로 HTTPPOST요청.fastapi-be로부터 결과 파일(e.g., PNG 슬라이스)을 받아st.image로 시각화.
Tier 2: Backend (FastAPI-BE / API Gateway)
- 역할: 시스템의 ‘뇌’ 역할. 단순한 프록시가 아닌, 핵심 비즈니스 로직을 처리.
- 기술:
FastAPI(CPU 기반 컨테이너) - 동작:
- CORS 설정:
Streamlit도메인으로부터의 교차 출처 요청을 허용. - API 수신 및 검증:
/api/v1/reconstruct엔드포인트에서 요청 수신 및 유효성 검사. - 전처리 (Pre-processing):
nibabel,numpy등을 사용하여 원본.nii파일을 Triton이 요구하는 Tensor 포맷으로 변환 (e.g., 정규화, 리사이징). - 추론 요청 (Async):
FastAPI의async def내에서tritonclient의 비동기 API (async_infer)를 호출하여triton-is에 추론 요청. (I/O Blocking 방지) - 후처리 (Post-processing):
triton-is로부터 받은 Raw Tensor를 사용자 친화적인 포맷(e.g., PNG 슬라이스,.nii파일)으로 변환. - (Optional) 로깅 및 저장: 요청/응답 결과 및 메타데이터를 DB나 S3에 저장.
- 응답:
Streamlit-FE에 최종 결과물(JSON 또는 파일) 반환.
- CORS 설정:
Tier 3: Inference Server (Triton-IS)
- 역할: AI 모델의 고성능 연산(추론)을 전담하는 ‘근육’.
- 기술:
NVIDIA Triton Inference Server(GPU 기반 컨테이너) - 동작:
- 모델 최적화:
PyTorch모델을ONNX로 변환하고, 다시TensorRT백엔드를 사용하여 GPU에 최적화된.plan엔진 파일로 빌드. - 모델 리포지토리:
config.pbtxt파일과 최적화된 모델 파일(model.plan)을model_repository에 저장. - 서빙: Triton 서버가 이 리포지토리를 로드하여 GPU 메모리에 상주시킨 후, gRPC(8001) 및 HTTP(8000) 포트를 열고 대기.
- 고성능 추론:
fastapi-be의 요청을 받아 Dynamic Batching 등의 최적화 기법을 적용하여 GPU에서 초고속 추론 수행.
- 모델 최적화:
⚪ 3. 상세 설계: 고급 고려사항
A. 보안 (Security) - CORS
fastapi-be는 Streamlit 컨테이너의 내부 주소(e.g., http://streamlit-fe:8501)와 실제 배포 도메인(e.g., https://qsm-ai.com)을 FastAPI의 CORSMiddleware에 allow_origins로 명시해야 한다.
B. 멀티유저 요청 처리 (Concurrency)
이 아키텍처는 두 가지 레벨에서 동시성을 처리한다.
- FastAPI (I/O Concurrency):
async/await를 통해 수십 명의 사용자가 동시에 파일 업로드/다운로드를 대기하는 I/O 작업을 블로킹 없이 효율적으로 처리한다. - Triton (Compute Concurrency):
FastAPI로부터 동시에 쏟아지는 여러 추론 요청을 요청 큐(Queue)에 쌓는다. Triton의 Dynamic Batching 기능이 이 큐의 요청들을 최적의 배치 크기(e.g., 8, 16)로 묶어 GPU에 한 번에 전달함으로써, GPU의 Throughput(처리량)을 극대화한다.
C. 클라우드 배포 구조 (AWS/GCP)
- 컴포넌트 분리 배포:
- Triton (GPU):
AWS EKS또는GCP GKE(Kubernetes)의 GPU 노드 풀(Node Pool) (e.g.,g4dn인스턴스)에 배포. - FastAPI & Streamlit (CPU):
AWS Fargate또는GCP Cloud Run같은 서버리스 컨테이너 플랫폼에 배포하여 비용 효율성 및 자동 확장(Auto-scaling) 확보.
- Triton (GPU):
- 인프라:
- Gateway:
AWS API Gateway또는Application Load Balancer를 시스템 맨 앞에 배치하여/api/*요청은FastAPI로,/요청은Streamlit으로 라우팅. - Storage: 모든
.nii파일 및 결과물은AWS S3또는GCP Cloud Storage에 저장. 컨테이너 내부(Ephemeral)에 저장하면 안 됨.
- Gateway:
D. 모니터링 및 로깅 (Observability)
- Logging: 모든 컨테이너는
stdout/stderr로 로그를 출력.AWS CloudWatch Logs또는GCP Cloud Logging(Fluentd/Fluentbit)을 통해 로그를 중앙 수집. - Monitoring (Metrics):
- Triton:
/metrics엔드포인트를Prometheus로 스크래핑하여 GPU 사용률, 추론 Latency(P95/P99), 처리량(RPS) 등 핵심 AI 성능 지표 확보. - FastAPI:
starlette-prometheus를 이용해 API 에러율, 요청 Latency 지표 노출.
- Triton:
- Dashboard & Alerting:
Grafana또는AWS CloudWatch Dashboard에서 상기 지표를 시각화. “P99 Latency > 3초” 또는 “GPU 사용률 95% 지속” 시Slack또는Email로 알림(Alerting) 설정.
🟢 예시 답안 (코드잇 제공)
.
This post is licensed under CC BY 4.0 by the author.