Model Monitoring
모델 모니터링은 배포된 모델의 입력, 예측, 정확도, 지연 시간을 추적해 데이터 드리프트와 감지되지 않은 장애를 사용자가 알아차리기 전에 발견합니다.
모델 모니터링은 배포된 머신러닝 모델의 입력, 출력, 성능, 서비스 상태를 지속적으로 측정하고, 이 중 하나라도 예상 범위를 벗어나면 알림을 보내는 작업입니다. 모델 오류는 대개 드러나지 않습니다. 카메라가 이동하거나 렌즈가 더러워지거나 제품이 재설계되어도 탐지기는 그럴듯한 신뢰도의 박스를 계속 반환하고 정확도만 달라질 수 있습니다. 모니터링은 실시간 동작을 일반적으로 모델 승인에 사용한 검증 데이터와 비교하므로, 팀은 사용자 제보가 아니라 대시보드를 통해 데이터 드리프트와 성능 저하를 파악할 수 있습니다. 모니터링은 모델 배포 후 머신러닝 운영(MLOps) 루프를 완성하고 모델의 재학습 시점을 결정합니다.
모니터링 대상#
프로덕션 모니터링은 일반적으로 다음 네 계층을 다룹니다:
- 추론 지연 시간 및 서비스 상태: 요청률, 오류율, p95 및 p99 지연 시간, GPU 메모리와 사용률을 추적하며, 대개 Prometheus로 수집하고 Grafana에서 차트로 표시합니다.
- 입력 데이터: 스키마 위반, 누락된 값, 밝기, 해상도, 객체 크기와 같은 특성 또는 이미지 통계의 변화입니다.
- 예측 신뢰도 및 출력 구성: 클래스 분포, 이미지당 탐지 수, 신뢰도 점수를 모니터링합니다. 예측 드리프트라고 부르는 이러한 변화는 레이블이 생기기 전에 나타나는 조기 경고입니다.
- 모델 성능: 정답 데이터가 들어오면 정확도, 정밀도, 재현율, mAP를 계산합니다. 사기 레이블은 차지백으로 인해 몇 주 뒤에 도착할 수 있으며, 비전 팀은 프로덕션 이미지를 표본 추출해 수작업으로 레이블을 지정합니다.
Ultralytics Platform은 전용 엔드포인트에 예측 계층을 구축합니다. 모니터링 탭에서는 배포된 YOLO 모델의 신뢰도 분포, 시간에 따른 평균 신뢰도, 상위 클래스, 이미지당 예측 수를 차트로 확인할 수 있습니다. 최근 이미지는 예측 결과와 함께 데이터셋에 저장해 검토 및 재학습에 사용할 수 있습니다. 모델 모니터링 및 유지 관리 가이드와 Ultralytics Academy 강의 관측 가능성과 드리프트에서는 YOLO 배포 환경의 드리프트 검사 방법을 설명합니다.
대부분의 성능 저하는 두 가지 유형의 변화로 발생합니다. 공변량 변화라고도 하는 데이터 드리프트는 입력이 바뀌는 현상으로, 제조 라인의 검사 카메라가 움직이거나 조명이 변하는 경우가 이에 해당합니다. 개념 드리프트는 입력과 정답 사이의 관계가 바뀌는 현상으로, 사기범의 수법이 변해 정상적이던 거래가 사기로 바뀌는 경우가 이에 해당합니다. 입력 통계는 데이터 드리프트를 직접 보여주지만, 개념 드리프트는 레이블이 들어온 후 성능 지표를 통해서만 확인할 수 있습니다. 두 현상 모두 컴퓨터 비전 모델이 프로덕션에서 실패하는 가장 흔한 원인입니다.
드리프트 감지#
일반적인 드리프트 검사는 실시간 통계와 기준 통계의 분포를 두 표본 Kolmogorov-Smirnov 검정으로 비교합니다. 이 검정은 두 누적 분포 사이의 최대 간격을 측정합니다. 다음 스크립트는 시뮬레이션한 탐지 신뢰도에 검정을 적용합니다. 검증 데이터의 기준 표본, 기준과 일치하는 프로덕션 주간 표본, 더 낮은 값으로 이동한 주간 표본을 사용합니다:
import numpy as np
from scipy.stats import ks_2samp
rng = np.random.default_rng(0)
# Detection confidences logged at validation time form the reference distribution
reference = rng.beta(8, 2, size=2000)
# Two simulated production windows: one like the reference, one shifted lower
windows = {"week 1": rng.beta(8, 2, size=500), "week 2": rng.beta(5, 3, size=500)}
for name, live in windows.items():
# Two-sample Kolmogorov-Smirnov test: do both samples come from one distribution?
result = ks_2samp(reference, live)
drift = result.pvalue < 0.01
print(f"{name}: mean {live.mean():.2f}, KS {result.statistic:.3f}, p {result.pvalue:.1e}, drift {drift}")1주 차는 KS 통계량 0.037, p = 0.64로 통과합니다. 2주 차에는 평균 신뢰도가 1주 차의 0.80에서 0.63으로 떨어지고, KS 통계량 0.456, p = 1.2e-75로 드리프트가 감지됩니다. 표본이 수천 개를 넘으면 무해한 변화도 통계적으로 유의해질 수 있으므로, 프로덕션 검사에서는 KS 통계량이나 모집단 안정성 지수(PSI)가 고정 임계값을 넘을 때 알림을 보내는 경우가 많습니다. Evidently와 NannyML 같은 오픈 소스 라이브러리는 이러한 검정을 드리프트 보고서로 제공합니다. NannyML은 보정된 신뢰도 점수를 사용해 레이블 없이 분류기의 정확도도 추정합니다. Amazon SageMaker Model Monitor와 Vertex AI Model Monitoring은 같은 검사를 관리형 서비스로 제공합니다. 그런 다음 알림에 따라 조사를 시작합니다:










