ML 시스템 설계 패턴 (ML System Design Patterns)¶
개요¶
ML 시스템 설계는 단순한 모델 학습을 넘어, 예측 서빙, A/B 테스팅, 특성 관리, 모니터링, 피드백 루프 등 프로덕션 환경의 전체적인 아키텍처를 설계하는 것이다. Google의 유명한 논문 "Hidden Technical Debt in Machine Learning Systems"에서 강조했듯이, ML 코드는 전체 시스템의 극히 일부이며, 나머지는 데이터 관리, 서빙, 모니터링 인프라이다.
핵심 개념¶
1. Online vs Batch Prediction¶
| 특성 | Batch (오프라인) | Online (실시간) | Near-Realtime |
|---|---|---|---|
| 처리 방식 | 주기적 대량 예측, 결과 저장 | 요청마다 즉시 예측 | 마이크로배치 (수초~수분) |
| 지연시간 | 수분~수시간 | 수십 밀리초~수초 | 수초~수분 |
| 사용 예 | 추천 시스템, 보고서 | 사기 탐지, 검색 랭킹 | 뉴스 개인화 |
| 장점 | 간단, 복잡한 모델 사용 가능 | 최신 데이터 반영 | 균형 잡힌 접근 |
| 단점 | 데이터 신선도 낮음 | 인프라 복잡, 지연 제약 | 양쪽의 복잡성 |
선택 기준: 지연시간 요구사항, 데이터 신선도(freshness), 인프라 비용
2. A/B Testing¶
기존 모델(A)과 새 모델(B)을 동시에 서빙하여 성능을 비교한다.
설계 요소: - 통계적 유의성: p-value, 신뢰 구간, 최소 표본 크기 계산 - 트래픽 분배: 보통 50:50 또는 90:10 (위험 최소화) - 기간: 충분한 데이터 수집 + seasonality 고려
A/B 테스트의 최소 표본 크기(Minimum Sample Size)는 다음으로 결정된다:
- \(z_{\alpha/2}\): 유의 수준에 대응하는 z-값 (예: \(\alpha=0.05\)이면 \(z_{0.025}=1.96\))
- \(z_{\beta}\): 검정력(power)에 대응하는 z-값 (예: power=0.8이면 \(z_{0.2}=0.84\))
- \(\sigma^2\): 메트릭의 분산
- \(\delta\): 탐지하고자 하는 최소 효과 크기 (Minimum Detectable Effect)
주의사항: - Novelty effect: 새 것에 대한 일시적 선호 - Seasonality: 계절/요일 패턴 고려 - Interference: 실험 그룹 간 상호 영향
Multi-Armed Bandit: Explore-exploit trade-off를 활용한 A/B Testing 대안. 더 좋은 모델에 점진적으로 더 많은 트래픽을 할당한다.
3. Shadow Deployment¶
새 모델의 예측을 실제 서비스에 반영하지 않고, 기록만 하여 기존 모델과 비교한다.
| 장점 | 단점 |
|---|---|
| 위험 없이 실환경 평가 | 사용자 반응 정보 부재 |
| 실제 트래픽으로 테스트 | 추가 인프라 비용 |
| 배포 전 성능 검증 | 시간 지연 |
4. Feature Store¶
ML 특성의 중앙 저장소로, 특성의 생성, 저장, 서빙을 통합 관리한다.
graph TD
subgraph "Feature Store"
OF["Offline Store<br>(배치 특성)"]
ON["Online Store<br>(실시간 특성)"]
REG["Feature Registry<br>(메타데이터)"]
end
RAW["원시 데이터"] --> PIPE["특성 파이프라인"]
PIPE --> OF
PIPE --> ON
OF --> TRAIN["학습"]
ON --> SERVE["서빙"]
REG --> TRAIN
REG --> SERVE 장점: - 특성 재사용: 여러 모델이 동일 특성 공유 - Online/Offline 일관성: Training-Serving Skew 방지 - 특성 발견: 팀 간 특성 공유와 검색
도구: Feast, Tecton, Vertex AI Feature Store
5. 프로덕션 모니터링 (Monitoring)¶
Data Drift (데이터 드리프트)¶
| 드리프트 유형 | 정의 | 탐지 방법 |
|---|---|---|
| Covariate Shift | 입력 분포 변화 | PSI, KS test |
| Prior Probability Shift | 클래스 비율 변화 | 클래스 분포 추적 |
| Concept Drift | 입출력 관계 변화 (가장 위험) | 성능 지표 하락 |
탐지 도구:
- PSI (Population Stability Index): 두 분포 간의 안정성 측정
- KS Test (Kolmogorov-Smirnov): 두 분포의 최대 차이 검정
\(D_{KS}\)가 임계값 \(c(\alpha) \cdot \sqrt{\frac{n_1 + n_2}{n_1 \cdot n_2}}\)을 초과하면 분포 변화가 유의하다고 판단한다.
- 특성별 분포 비교: 히스토그램, 분위수 추적
대응 전략: - 자동 재학습 파이프라인 - 적응적(incremental) 학습 - 모델 fallback / 규칙 기반 전환 - 알림 시스템 구축
6. 피드백 루프 (Feedback Loops)¶
모델 예측이 미래 데이터에 영향을 미치는 현상이다.
예시: 추천 시스템 → 추천된 아이템만 클릭 데이터 생성 → 다음 학습에서 더 추천 → 선순환/악순환
문제: 자기 강화 편향, 다양성 감소, 필터 버블
완화: Exploration 메커니즘, 랜덤 노출 실험, 다양성 제약
상세 내용¶
ML 시스템 아키텍처 전체 그림¶
graph TD
subgraph "데이터 플랫폼"
DL["Data Lake"]
DW["Data Warehouse"]
FS["Feature Store"]
end
subgraph "학습 플랫폼"
EXP["실험 추적<br>(MLflow, W&B)"]
TRAIN["학습 파이프라인"]
MR["Model Registry"]
end
subgraph "서빙 플랫폼"
API["API 서버"]
BATCH["배치 예측"]
AB["A/B Test Router"]
end
subgraph "모니터링"
MON["성능 모니터링"]
DRIFT["드리프트 탐지"]
ALERT["알림"]
end
DL --> FS
FS --> TRAIN
TRAIN --> EXP
TRAIN --> MR
MR --> API
MR --> BATCH
API --> AB
AB --> MON
MON --> DRIFT
DRIFT --> ALERT
ALERT -.-> TRAIN Google MLOps 성숙도 모델¶
| 레벨 | 설명 | 특징 |
|---|---|---|
| Level 0 | 수동 ML | 스크립트 기반, 수동 배포, 모니터링 없음 |
| Level 1 | ML 파이프라인 자동화 | 지속적 학습, 자동 재학습 |
| Level 2 | CI/CD 파이프라인 | 코드+데이터+모델 전체 자동화, 자동 테스트 |
용량 계획 (Capacity Planning)¶
프로덕션 ML 시스템의 리소스 산정에 사용하는 정량적 공식이다.
QPS (Queries Per Second) 추정:
일반적으로 Peak Factor는 2~5배 사이이며, 서비스 특성에 따라 달라진다.
모델 서빙 인스턴스 수:
- \(\text{QPS}_{\text{per\_instance}}\): 단일 인스턴스의 최대 처리량
- Redundancy Factor: 장애 대비 여유분 (보통 0.2~0.5)
모델 메모리 요구량:
- \(N_{\text{params}}\): 모델 파라미터 수
- \(B_{\text{precision}}\): 파라미터당 바이트 (FP32=4, FP16=2, INT8=1)
- \(\text{Memory}_{\text{activation}}\): 추론 시 중간 활성화 메모리
- \(\text{Memory}_{\text{KV-cache}}\): Transformer 모델의 경우 KV-cache 메모리 (배치 크기와 시퀀스 길이에 비례)
언제 사용하는가¶
| 패턴 | 적합한 상황 |
|---|---|
| Batch Prediction | 지연시간 덜 중요, 복잡한 모델, 주기적 업데이트 |
| Online Prediction | 실시간 결정 필요, 최신 데이터 반영 |
| A/B Testing | 새 모델의 비즈니스 영향 측정 |
| Shadow Deployment | 위험 최소화, 대규모 변경 검증 |
| Feature Store | 여러 모델이 특성 공유, 대규모 팀 |
| 자동 재학습 | 빈번한 데이터 변화, concept drift |
흔한 오해와 함정¶
-
모니터링 없이 배포: 모델 성능은 시간이 지남에 따라 반드시 저하된다. 모니터링 없이 배포하면 성능 저하를 인지하지 못한다.
-
A/B Test의 통계적 유의성 무시: 충분한 데이터 없이 결론을 내리면 잘못된 의사결정을 한다. 최소 표본 크기를 사전 계산하라.
-
Feature Store 없이 대규모 ML: Feature Store 없이 여러 모델을 운영하면 특성 정의 불일치, Training-Serving Skew, 중복 작업이 발생한다.
-
피드백 루프를 인식하지 못함: 추천 시스템에서 인기 편향이 자기 강화되는 것처럼, 모델의 예측이 미래 데이터에 미치는 영향을 고려해야 한다.
-
자동 재학습만으로 충분하다: 재학습 시 데이터 품질 검증, 성능 임계값 확인, 편향 검사 등이 함께 자동화되어야 한다.