모델 평가 방법은 크게 OFFLINE과 ONLINE으로 나뉜다.
(1) OFFLINE
과거 데이터를 기반으로 하며, 주기성 혹은 배치, 그리고 훈련 후 정적인 모델 평가라고 보면 된다.
알고리즘을 개발하는 단계는 대부분 OFFLINE이라고 보면 된다.
(2) ONLINE
배포한 후에 실제 데이터가 들어올 때 성능을 평가하는 것
복잡하고 실시간 데이터에 기반하며 즉각적인 성능 평가를 해야한다.
거기에 모델의 동적인 변화에 빠르게 대응해야 한다.
1. OFFLINE
과거 데이터를 기반으로 하며, 주기성 혹은 배치, 그리고 훈련 후 정적인 모델 평가라고 보면 된다.
알고리즘을 개발하는 단계는 대부분 OFFLINE이라고 보면 된다.
(1) Hold - out Validation
데이터를 훈련과 테스트로 나눠서 평가하는 방식이다.
(2) K - fold cross validation
데이터를 K개의 부분 집합(fold)으로 나누고, 각 fold를 한 번씩 테스트하는 걸로 사용할 수 있다.
나머지를 훈련 세트로 사용하여 모델을 K 번 평가하는 방법이다.
모델의 일반적인 성능을 더 정확하게 평가할 때 유용하다.
(3) Bootstrap resampling
중복 허용해서 샘플 랜덤하게 추출하면서 여러 부분 집합을 생성하고, 그걸 테스트하는 과정이 있다.
데이터셋의 분산을 고려하면서 모델 성능을 더 견고하게 평가하는 방법이다.
2. ONLINE
배포한 후에 실제 데이터가 들어올 때 성능을 평가하는 것
복잡하고 실시간 데이터에 기반하며 즉각적인 성능 평가를 해야한다.
거기에 모델의 동적인 변화에 빠르게 대응해야 한다.
(1) AB Test
같은 양의 트래픽을 2개 이상의 버전에 전송하고 예측한다.
예측 결과를 비교 및 분석을 한다.
예를 들어 현재 모델 A와 새로운 모델 B가 있을 때 각각에 50만큼의 트래픽을 보냈다고 하자.
둘의 결과를 같이 저장해두고 비교하고 평가하는 것이다.
만약 사람들이 A 모델을 더 많이 사용한다면?
그럼 B에게 줬던 트래픽은 0으로 하고 다시 A에게 100을 준다.
일반적인 AB Test는 통계적으로 유의미성을 얻기까지 시간이 매우 오래 걸린다.
때문에 Multi - Armed Bandit과 같은 최적화 기법을 쓰기도 한다.
A, B를 나눌 때 트래픽을 절반씩 나누거나 id 같은 갓ㅂ을 해싱해서 홀짝으로 나누기도 한다.
그것도 아니라면, 새로운 시스템에 10%를 주고, 기존 시스템에 90%를 준 다음, 성능이 좋다면 점진적으로 새로운 시스템에게 더 많은 트래픽을 할당하기도 한다.
(2) Canary Test
카나리아는 석탄 광산에서 유독가스 누출의 위험을 알리는데 사용했던 새다.
카나리아가 사람보다 먼저 가기 때문에 이것을 유독가스 누출의 지표로 사용했던 것에서 유래한다.
이건 새로운 버전의 모델에 트래픽이 들어가도 문제가 없는지 체크하는거다.
앞서 얘기했던 기존 모델 90%와 새로운 모델 10%로 보내면서, 큰 오차나 결함은 없는지 체크한다.
괜찮다면 점진적으로 늘린다.
(3) Shadow Test
Production(운영)환경과 같은 트래픽을 새로운 버전의 모델에 적용하는거다.
기존에 서빙된 모델에 영향을 최소화할 수 있다.
기존 서빙은 그대로 가는거다.
A모델에 트래픽 100이 간다고 할 때, B 모델에도 똑같이 트래픽 100을 준다.
A 모델은 클라이언트한테 전달한다. B 모델은 클라이언트한테 전달하지 않고 결과 기록만 한다.
100% | ─────> | 현재 모델 | ─────> | 클라이언트 |
100% | ─────> | 새 모델 | ─────> | 결과 기록 |
즉, 사용자에게 전달되지 않지만 동일한 입력을 줬을 때, 어떤 결과가 나오는지 비교할 수 있다.
모든 트래픽은 현재 시스템에 전송하는거다.
그림자처럼 같은 트래픽을 복제해서 새로운 버전에 넣는거다.
유저에게 직접 결과물이 전달되지 않으므로 새로운 모델에 이슈가 있어도 안전하다.
하지만 트래픽 복제 전송을 위한 인프라가 구성되어 있어야 한다.
'끄적' 카테고리의 다른 글
Self-Consistency (0) | 2025.01.06 |
---|---|
CoT와 Zero-Shot CoT (0) | 2025.01.06 |
Github Action (0) | 2024.12.17 |
환경 분리와 배포 (2) | 2024.12.17 |
WSL과 Conda (0) | 2024.12.07 |