해당 게시물은 ML 프로덕션 환경 속에 있는 내가 모델 개발에만 열중하고 전반적인 시스템 설계에 대한 배경지식이 없었던 와중에 옆자리 팀원한테 추천 받아서 읽게된 한빛미디어의 "머신러닝 시스템 설계"를 공부하면서 요약한 게시물로, 저작권은 한빛미디어에게 있겠습니다.
장애는 시스템에 대한 기대치가 한가지 이상 어긋날 때 일어남
전통적인 소프트웨어에서는 주로 시스템 운영에 대한 기대치, 즉 시스템 로직이 레이턴시와 스루풋 같은 운영 지표의 기대 범위 안에서 실행되는지가 중요함
ML 시스템에서는 운영 지표와 ML 성능 지표 모두 신경 써야 함
예를 들어 영어-프랑스 기계 번역의 운영 기대치는 영어 문장을 입력하면 시스템이 바로 레이턴시 1초 안에 프랑스어 번역문을 출력해 내는 것이고, ML 성능상 기대치는 출력 중 99%는 주어진 영어 문장을 정확히 번역한 문장이어야 한다는 것임
출력한 번역이 정확하지 않다고 해서 반드시 시스템 장애는 아님, 정확도 기대치는 약간의 오차를 허용함
하지만, 서로 다른 영어 문장을 시스템에 연달아 입력하는데 계속해서 잘못된 번역문이 나온다면 두 번째 기대치를 어기므로 시스템 장애임
운영상 기대치를 어기는 문제는 감지하기가 쉬움
시간 초과, 웹 페이지 404 오류, 메모리 부족, 세그멘테이션 결함 등 운영 중단을 수반하기 때문임. 그러나 ML 성능상 기대치를 어기는 문제는 프로덕션 환경에서 ML 모델 성능을 측정하고 모니터링해야 하므로 감지하기가 보다 어려움
영어 - 프랑스어 기계 번역 시스템 예시에서 올바른 번역문이 무엇인지 모른다면 출력된 번역문 중 99%가 옳은지 그른지 판단하기 어려움
사용자가 구글 번역문이 오역임을 인지하지 못해 오역을 사용하는 사례는 셀 수 없이 많은데 이러한 이유로 ML 시스템은 조용히 실패(fail silently) 한다고 함
소프트웨어 시스템 장애는 ML에 속하지 않는 시스템에서 발생하는 장애임
[1] 의존성 장애 :
시스템이 의존성을 갖는 소프트웨어 패키지 혹은 코드베이스에 중단이 발생해 시스템이 중단되는 경우임
서드 파티가 의존성을 유지 관리 할 때 흔히 발생하며, 의존성을 유지 관리하는 서드 파티가 더 이상 존재하지 않는 경우 특히 자주 발생
[2] 배포 실패 :
배포 오류로 인한 실패.
모델이 현재 버전 대신 실수로 이전 버전 바이너리를 배포하거나 시스템에 특정 파일을 읽거나 쓰기 권한 없는 경우
[3] 하드웨어 오류 :
CPU나 GPU처럼 모델 배포에 사용하는 하드웨어가 제대로 작동하지 않는 경우
예를 들면 사용하던 CPU가 과열돼 고장남
[4] 다운타임 또는 충돌:
시스템 구성 요소가 다른 곳에 있는 서버, AWS나 호스팅 서비스에서 실행되는 경우 해당 서버가 다운되면 시스템도 따라서 다운됨
(1) 프로덕션 환경 데이터가 훈련 데이터와 다른 경우
- ML 모델을 훈련 데이터로 학습함은 모델이 훈련 데이터에 내재된 분포를 학습한 후에 그 학습된 분포를 통해 훈련 중 본 적 없는 데이터에 대해 정확한 예측값을 만들어냄을 의미함
- '데이터 분포 시프트' 는 수학적으로 의미하는 바가, 모델이 본 적 없는 데이터에 대해 정확한 예측값을 만들어낸다면 이 모델이 '본 적 없는 데이터에도 충분히 일반화' 됐다고 얘기함
- 개발 중 모델 평가에 사용하는 테스트 데이터는 본 적 없는 데이터여야 하며 이에 대한 모델 성능은 모델이 얼마나 잘 일반화될지 가늠하게 해줌
ML 교과 과정에서 먼저 배우는 것 중 하나는 훈련 데이터와 본 적 없는 데이터가 유사한 분포에서 나와야 한다는 것임
즉, 본 적 없는 데이터를 훈련 데이터 분포와 동일한 '정상 분포(stationary distribution)' 에서 추출했다고 가정함. 본 적 없는 데이터를 다른 분포에서 추출하면 모델이 제대로 일반화되지 않을 수 있음
=> 이 가정은 대개 올바르지 않을 수 있음.
첫 째로, 실제 데이터에 내재된 분포는 훈련 데이터에 내재된 분포와 같지 않을 수 있어음. 훈련 데이터셋이 모델이 프로덕션 환경에서 접할 데이터를 정확하게 표현하도록 큐레이팅 하기는 어려움
-실제 데이터는 다면적이고 많은 경우에 변형이 무한에 가까운 반면, 훈련 데이터는 유한하고 데이터셋 생성과 처리에 사용할 수 있는 시간/연산/인적 자원에 의해 제한됨
다양한 종류의 선택이나 샘플링 편향이 존재함
현실 데이터가 훈련 데이터와 매우 달라져서, 이러한 데이터 분포의 차이는 다른 유형의 이모티콘 인코딩을 사용하는 현실 데이터처럼 매우 사소한 것에 기인할 수 있음 => 이러한 유형의 차이를 훈련-서빙 편향(trin-serving skew)
이라는 흔한 장애 모드를 야기함
: 모델이 개발 시에는 훌륭하지만 배포 후 성능은 그다지 좋지 않은 현상
둘째로, 현실 세계는 정상성(stationarity)를 갖지 않음
모든 것은 변하며, 데이터 분포는 시프트함
모델이 처음 배포될 때는 훌륭하게 작동하지만 시간에 따라 데이터 분포가 변하면서 성능이 저하됨
데이터 시프트를 유발하는 예시로 코로나19 사례를 들면 사람들은 데이터 시프트 비정상적인 이벤트 때문에 발생한다고 생각하기 쉬워, 자주 발생하지 않는다고 생각함
그러나, 데이터 시프트는 항상, 갑자기, 점진적으로 혹은 계절성을 띠며 발생함
특정 이벤트 때문에 갑자기 발생하는 예시는 기존 경쟁자가 가격 정책을 변경해서 이에 대응하기 위해 가격 예측을 업데이트해야 하는 경우, 새로운 지역에서 제품을 출시하거나 유명인이 제품을 언급해 신규 사용자가 급증하는 경우 등이고
점진적으로 발생하는 예는 사회 규범, 문화, 언어, 트렌드, 산업과 같이 시간에 따라 변화하는 경우와 계절적 변화 때문에 발생하는 예시이다.
(2) 에지 케이스
에지 케이스와 이상치
(3) 퇴행성 피드백 루프
피드백 루프는 예측값을 제시한 다음 예측값에 대한 피드백이 되돌아올 때까지 걸리는 시간을 의미함
피드백은 자연 레이블을 추출해 모델 성능을 평가하고 다음번 훈련을 반복하는데 사용 가능함
퇴행성 피드백 루프(degenerate feedback loop)
는 예측 자체가 피드백에 영향을 미치고, 이 피드백이 모델의 다음번 반복 학습에 영향을 미칠 때 발생함
퇴행성 피드백 루프는 시스템 출력을 시스템의 미래 입력을 생성하는 데 사용할 때 발생하고, 이것은 시스템 미래 출력에 다시 영향을 미침
ML에서 시스템의 예측은 사용자가 시스템과 상호 작용하는 방식에 영향을 미침
시스템과 사용자의 상호 작용은 때때로 같은 시스템에 대한 훈련 데이터로 사용되므로 퇴행성 피드백 루프가 발생하면서 의도하지 않은 결과를 초래할 수 있음
퇴행성 피드백 루프는 추천 시스템과 광고 클릭률 예측 등 사용자에게서 획득한 자연 레이블이 존재하지 않는 작업에서 특히 흔함
예를 들어 사용자가 좋아할 말한 노래를 추천하는 시스템을 개발한다고 가정할 때, 시스템에서 순위가 높은 노래가 사용자에게 먼저 보이게 됨. 가장 먼저 보이면 사용자가 더 많이 클릭하게 되고 시스템은 이 추천 항목이 적절하다고 확신하게 됨.
처음에는 두 곡 A와 B의 순위가 미세하게 달랐고, A가 좀 더 높은 순위에 있어서 추천 목록에 좀 더 상단에 보여지게 되었으나, 사용자가 잘 보이는 곳에 있는 A를 더 많이 클릭하게 되고 시스템에서 A의 순위가 B보다 올라가게 된다.
퇴행성 피드백 루프는 인기 있는 영화, 도서, 음악이 점점 더 인기를 얻는 이유를 설명하는 한 가지 요소이며 프로덕션 환경에서는 이러한 현상이 나타나는 시나리오가 매우 보편적이고 많이 연구되어 왔음
=> 이를 '노출 편향', '인기도 편향', '필터 거품', '에코 체임버' 등으로 불리게 됨
퇴행성 피드백 루프의 위험성은, 이력서 기반 지원자가 특정 직무에 적합한지 예측하기 위한 심사 모델을 개발했을 때와 같이 특정 피처 X에 높은 가중치를 부여하게 되면서 발생할 수 있음.
이는 모델에 대한 각 피처의 중요도를 측정하는 식으로 모델이 예측을 수행하는 방식에 대한 가시성을 확보하여 특정 피처에 대한 편향을 감지한다
사람이 관여하지 않으면 퇴행성 피드백 루프로 인해 모델이 최적 성능에 못 미치는 상태로 계속 동작함
최악의 경우 데이터에 존재하는 편향이 영속화되고 확대됨
시스템이 오프라인일 때는 퇴행성 피드백 루프를 감지하기 어려움
퇴행성 루프는 사용자 피드백으로 인해 발생하는데 시스템이 온라인 상태가 되기 전까지(사용자에게 배포되기 전까지)는 사용자가 존재하지 않기 때문임
추천 시스템에서는 시슽메이 오프라인일 때도 시스템 출력 인기도의 다양성을 측정해 퇴행성 피드백 루프르 감지할 수 있음
항목의 인기도는 과거에 상호 작용(열람/좋아요/구매 등)이 일어난 횟수를 기반으로 측정함
모든 항목의 인기도는 롱테일 분포를 따라서, 소수 항목만 다수 사용자와 상호 작용이 발생하고 대부분 항목은 상호 작용이 거의 발생하지 않음
'롱테일 항목(long-tail item')의 총체적 다양성(aggregate diversity)와 평균 적용 범위(average coverage)의 여러 지표들은 추천 시스템 출력의 다양성을 측정하는데 도움이 될 수 있음
=> 낮은 점수는 시스템 출력이 단조로움을 의미하고, 이는 인기도 편향으로 발생할 수 있음
퇴행성 피드백 루프는 흔한 문제여서 이를 교정하는 방법은 (1) 무작위화 사용 (2) 위치 피처 사용이 있다
(1) 무작위화
퇴행성 피드백 루프로 인해 시간에 따라 시스템 출력이 점차 단조로워질 수 있는데, 예측에 무작위화를 도입하면 단조로움을 줄일 수 있음
추천시스템에서 순위가 높은 항목만 보여주는 대신 무작위 항목을 보여주고
사용자 피드백을 받아서 항목의 실제 경쟁력을 결정함
: 틱톡에서 사용 중
무작위화는 다양성을 개선하지만 사용자 경험을 저하할 수 도 있음
적당한 규모의 무작위화와 인과 추론 기술을 사용해 편향되지 않은, 본래의 가치를 추정하는 방법이 있음
퇴행성 피드백 루프는 예측에 대한 사용자 피드백으로 인해 발생하고, 예측에 대한 피드백은 보이는 위치에 따라 편향된다.
(2) 위치 피처(positional feature)
예측값이 보여지는 위치가 피드백에 어떤 식으로든 영향을 미치는 경우 위치 피처를 사용해 위치 정보를 인코딩 한다.
'위치 임베딩' 과는 다름
예를 들어서, 퇴행성 피드백 루프를 완화하기 위해 훈련 데이터에 위치 피처를 추가할 수 있는데, 노래 추천과 같은 경우 '최상단 추천 여부'를 피처로 추천하여 피처를 통해 모델이 최상단 추천 여부가 클릭 여부에 얼마나 영향을 미치는지 알 수 있다.
추론할 때는 노래가 추천되는 위치에 상관없이 사용자가 노래를 클릭할지 예측하는 것이 목표이므로, 최상단 위치 피처 값을 '아니오'로 설정하고, 사용자가 여러 곡들에 대해 모델 예측값을 보고 각 노래를 보여줄 순서를 결정한다.
보다 정교한 방법은 두 가지 모델으 사용하는 것으로, 첫 번째 모델은 추천이 보이는 위치를 고려해 사용자가 추천을 살펴보고 고려할 확률을 예측하는 것과 두 번째 모델은 사용자가 살펴보고 선택을 고려한 항목을 최종적으로 클릭할 확률을 예측하는 것이다. 두 번째 모델은 위치와는 전혀 관련이 없다
데이터 분포 시프트는 지도 학습에서 모델이 동작하는 데이터가 시간에 따라 변하는 현상으로, 모델 예측도 시간이 지날수록 덜 정확해짐
모델이 훈련된 데이터의 분포를 원본 분포(source distribution)
이라고 하며, 모델이 추론을 실행하는 데이터의 분포를 대상 분포(target distribution)
이라고 함
데이터 분포 시프트는 종종 (1) covarinace shift, (2) label shift, (3) concept drift와 동일한 의미로 사용도지만, 이 세 가지 개념은 데이터 시프트의 하위 유형임
다양한 시프트 유형에 대한 논의는 수학적임. 데이터 시프트를 감지하고 효율적인 알고리즘을 개발하기 위해서는 시프트 원인을 이해해야 함
모델에 대한 입력을 X, 출력을 Y 라고 할 때,
지도 학습에서 훈련 데이터는 결합 분포 P(X,Y)의 샘플 집합으로 볼 수 있으며 ML은 일반적으로 P(Y|X)를 모델링함.
이 결합분포 P(X,Y)는 두 가지 방식으로 분해 될 수 있음
(1) P(X,Y) = P(Y|X)P(X)
(2) P(X,Y) = P(X|Y)P(Y)
P(Y|X)는 입력이 주어졌을 때 출력의 조건부 확률을 나타냄
예를 들어, 이메일 내용이 주어졌을 때 이메일이 스팸일 확률로,
P(X)는 입력의 확률 밀도 함수를 나타내며 P(Y)는 출력의 확률 밀도 함수를 나타냄
(1) Covariate shift
P(X)가 변하지만 P(Y|X) 는 동일하게 유지됨
(2) Label shift
P(Y)가 변하지만 P(X|Y)는 동일하게 유지됨
(3) Concept drift
P(Y|X)가 변하지만 P(X)는 동일하게 유지됨
(1) 공변량 시프트(Covariance shift)
통계학에서 공변량은 주어진 통계적 시행 결과에 영향을 미칠 수 있지만 직접적인 관심 대상은 아닌 독립 변수임
예를 들어 지리적인 위치가 주택 가격에 미치는 영향을 확인하기 위해 실험한다고 가정할 때, 직접적인 관심사는 주택 가격이라는 변수이고 넓이라는 변수는 가격에 영향을 미치므로공변량인 셈임
지도 학습에서는 레이블이 직접적인 관심 변수고 입력 피처는 공변량 변수임
공변량 시프트는 P(X)가 변하지만 P(Y|X)는 동일하게 유지되는 경우로,
입력의 분포는 변하지만 입력이 주어졌을 때 출력의 조건부 확률은 동일하게 유지되는 것임
예시로, 유방암을 감지하는 작업에서 여성이 40세 이상이면 유방암에 걸릴 확률이 더 높으므로 입력 변수는 '나이' 임. 추론 데이터보다 훈련 데이터에서 40세 이상 여성이 더 많다면 훈련 및 추론 데이터의 입력 분포가 상이함
하지만, 연령이 정해진 데이터 포인트 예를 들어 40세 이상인 데이터 포인트가 유방암에 걸릴 확률은 일정함
즉 P(Y|X), 즉 40세 이상이 유방암에 걸릴 확률은 같음
모델 개발 시 데이터 선택 프로세스에서 내재된 편향 때문에 공변량 시프트가 발생할 수 있음
이 편향이 생기는 이유는 특정 클래스의 샘플을 수집하기가 어렵기 때문임
예를 들어 유방암을 연구하기 위해 여성들이 주로 유방암 감서라르 받으러 가는 병원에서 데이터를 얻었다고 가정할 때, 40세 이상이면 검진을 권유받으므로 병원 데이터의 대부분은 40세 이상 여성임
=> 이러한 이유로 공변량 시프트는 샘플 선택 편향 문제와 밀접하게 관련됨
공변량 시프트는 모델이 좀 더 쉽게 학습할 수 있도록 훈련 데이터를 인위적으로 변경할 때 발생함
ML 모델 학습은 불균형 데이터셋에서 더 어려움
드물게 발생하는 클래스에 대해 더 많은 샘플을 수집하거나, 모델이 드문 클래스를 더 잘 학습하도록 해당 클래스에 대한 데이터를 오버샘플링함
공변량 시프트는 모델 학습 프로세스, 특히 능동적 학습 프로세스 때문에 생기기도 함
능동적 학습 : 모델을 훈련할 샘플을 무작위로 선택하는 대신 휴리스틱에 따라 해당 모델에 가장 유용한 샘플을 선택하는 방법
훈련 입력 분포가 실제 입력 분포와 다르게 학습 프로세스에 의해 변경되면서 공변량 시프트가 의도치 않게 동반됨
프로뎍션 환경에서 공변량 시프트는 일반적을 환경, 애플리케이션 사용 방식이 크게 변함에 따라 발생함
예를 들어, 모델이 무료 사용자가 유료 사용자로 전환할 가능성을 예측한다고 가정할 때 사용자의 소득 수준을 피처로 잡는다. 그러나, 최근 회사의 마케팅 부서는 현재보다 더 소득이 높은 사용자를 끌어들이는 캠페인을 시작했으므로, 모델의 입력 분포가 변하지만 ㅅ호득이 동일할 때 사용자의 전환 확률은 여전히 동일함
-실제 입력 분포가 훈련 입력 분포와 어떻게 다를지 미리 알 수 있다면 중요도 가중치 조정(importance weighting)
과 같은 기술로 현실 데이터에 잘 작동하도록 모델을 훈련할 수 있음
=> 중요도 가중치 조정
은
실제 입력 분포와 학습 입력 분포 간의 밀도 함수 비율을 추정하고,
이 비율에 따라 학습 데이터에 가중치를 부여하고 이 가중치 데이터로 ML 모델을 학습함
그러나 현실에서는 분포가 어떻게 변하는지 미리 알 수 없어서, 모델을 새로운 미지의 분포에 강건하도록 선제적으로 학습시키는 일은 어려움.
(2) 레이블 시프트(Label shift)
레이블 시프트는 P(Y)가 변하지만 P(X|Y)가 동일하게 유지되는 경우를 말하며 사전 시프트, 사전 확률 시프트, 목표 시프트라고 함
출력 분포가 변하지만 주어진 출력에 대한 입력 분포는 동일하게 유지되는 경우로 생각함
위에서 공변량 시프트는 입력 분포가 변하는 경우로, 입력 분포가 변하면 출력 분포도 변해 공변량 시프트와 레이블 시프트가 동시에 발생함
공변량 시프트에 대한 유방암 예씨에서 40세 이상 여성이 추론 데이터보다 훈련 데이터에 더 많아 양성 레이블 비율이 훈련 과정에서 더 높은데,
훈련 데이터에서 유방암에 걸린 사람 A를 무작위로 선택하고, 테스트 데이터에서 유방암에 걸린 사람 B를 무작위로 선택한다면 A와 B가 40세 이상일 확률은 동일함
=> 즉, P(Y), 즉 유방암에 걸린 사람이 40세 이상일 확률은 동일하여, 레이블 시프트에 해당함
그러나 공변량 시프트가 반드시 레이블 시프트를 동반하는 것은 아님
예를 들어 여성이 유방암에 걸릴 확률을 줄여주는 예방약이 있는데,
확률 P(X)는 모든 연령대의 여성에 대해 감소하므로 공변량 시프트에 해당하지 않음
하지만, 유방암에 걸린 사람의 경우 연령 분포가 동일하게 유지되므로 이것은 여전히 레이블 시프트임
레이블 시프트는 공변량 시프트와 밀접하게 관련되므로 모델이 감지하고 레이블 시프트에 맞게 조정하는 방법은 공변량 시프트 시의 조정 방식과 비슷함
(3) 개념 드리프트(Concept drift)
사후 시프트(posterior shift)라고 하는 concept drift는 입력 분포가 동일하게 유지되지만 정해진 입력에 대한 출력의 조건부 분포가 변하는 경우임
동일한 입력, 상이한 출력으로
주책 관련 피처를 기반으로 주택 관련 피처를 기반으로 주택 가격을 예측하는 모델을 가정하면, 샌프란시스코에 있는 아파트가 코로나 19 이전 200달러였지만, 초기에는 많은 사람들이 샌프란시스코를 떠나 150만 달러가 됨
많은 경우 개념 드리프트는 주기적거나 계쩔적임
승차 공유 가격은 주중과 주말 사이 변하고, 항공권 가격은 휴가철에 올라감
기업들은 주기적, 계절적 드리프트를 처리하기 위해 여러 모델을 사용ㅎ마
피처 변화(feature change)
이다.레이블 스키마 변화(label schema change)
는 Y 값의 가능한 범위가 변하는 경우이다. 레이블 시프트의 경우 P(Y)는 변하지만 P(X|Y)는 그대로 유지된다.데이터 분포 시프트는 모델 성능이 저하될 때만 문제가 됨
첫 째로, 프로덕션 환경에서 모델의 정확도 관련 지표를 모니터링하면서 변화를 확인하는 것이다.
여기서의 변화는 '감소'를 의미하지만, 특별한 까닭 없이 모델의 정확도가 오르고, 크게 변동하는 것도 포함한다
정확도 관련 지표는 모델의 예측값을 그라운드 트루스 레이블과 비교하는 식으로 계산하는데, 모델 개발 중에는 레이블을 이용할 수 있지만 프로덕션 환경에서는 항상 이용 가능한 것이 아니고 이용 가능하더라도 '자연 레이블'에서 이야기했듯 보통 지연 입수된다.
합리적인 시간 안에 레이블을 이용가능 하면 모델 성능에 대한 가시성을 확보할 수 있다.
그라운드 트루스 레이블이 사용 불가하거나 너무 지연돼 유용하지 않다면 대신 관심 있는 다른 분포를 모니터링할 수 있다. 관심 있는 분포는 입력 분포 P(X), 레이블 분포 P(Y), 조건부 확률 분포 P(X|Y)와 P(Y|X) 임
입력 분포를 모니터링하기 위해 그라운드 트루스 레이블 Y를 알필요는 없지만, 레이블 분포와 두 조건부 분포를 모니터링 하려면 Y를 알아야 한다.
연구자들은 대상 분포로부터 레이블 없이 레이블 시프트를 파악하고 감지하려고 노력해 왔고 한가지 사례는 블랙바트 시프트 추정이다.
업계에서는 대부분 드리프트 감지 방법을 입력 분포, 특히 피처 분포의 변화를 감지하는데 중점을 준다.
통계적 방법
많은 회사에서 두 분포가 동일한지 파악하는데 사용하는 방법은 최소/최대/평균/중앙값/분산/다양한 분위수/왜도/첨도 같은 통계량을 비교하는 것임
추론하는 동안 피처의 중앙값과 분산을 계산하고 훈련하는 동안 계산한 지표와 비교한다.
텐서플로 익스텐디드의 내장 데이터 검증 도구 또한 요약 통계량을 이용해 훈련 데이터와 서빙 데이터 간의 괴리 또는 서로 다른 날짜의 훈련 데이터 간 시프트를 감지한다
그러나 평균, 중앙값, 분산은 요약 값으로 유용한 분포에 한에서만 유용해서 지표가 크게 다르면 추론 시 분포가 훈련 시 분포에서 상당히 시프트했을 수 있고, 지표가 유사하더라도 시프트가 없으리라는 보장은 없음
보다 정교한 방법은 2-표본 가설 검정, 2-표본 검정을 사용해 두 모집단(두 데이터셋) 간의 차이가 통계적으로 유의한지 확인하는 방법이다.
통계적으로 유의한 차이의 경우 이것이 샘플링으로 인한 산포 때문에 발생한 무작위 변동일 가능성은 낮음. 이 차이의 원인은 두 모집단이 서로 다른 분포에서 발생했기 때문임
어제 데이터를 원천 모집단으로, 오늘 데이터를 대상 모집단으로 뒀을 때 통게적으로 다르다면 내재된 데이터 분포가 어제와 오늘 사이 시프트 했을 가능성이 높음
주의할 점은 차이가 통계적으로 우의하더라도 실용적으로 의미가 크지 않을 수 도있음.
상대적으로 적은 샘플에서 차이가 감지됐따면 아마 심각한 차이일 것이라고 새악하는 것도 괜찮은 휴리스틱이고, 반대로 감지하는데 샘플이 엄청나게 많이 필요하다면 그 차이는 크게 걱정할 가치가 없다고 판단할 수 있음
기본 2-표본 검정은 KS 또는 KS검정이라고 하는 콜모고로프-스미르노프 검정이며, 비모수 통계 검정으로 내재 분포에 대한 어떠한 매개변수도 필요하지 않는다
내재 분포에 대한 가정을 두지 않아 모든 분포에 적용 가능하지만,
KS 테스트는 1차원 데이터에만 적용할 수 있어, 모델의 에측과 레이블이 1차원(스칼라 숫자)이면 KS 검정은 레이블 또는 예측 시프트를 감지하는 유용하다.
그러나, 고차원 데이터에는 작동하지 않는다. 주로 피처는 고차원이기 때문에 KS 검정은 연산 비용이 높고 오탐지 경고를 너무 많이 생성할 수 있다.
또 다른 검정은 최소 제곱 밀도 함수 차이 추정 방법 기반의 알고리즘인 최소 제곱 밀도 차이 (least-squares density difference) 검정과, 최대 평균 불일치(MMD, maximum mean discrepancy), 다변량 2-표본 검정을 위한 커널 기반 기법과 그 변종인 학습된 커널(MMD, Learned Kernel MMD)가 있음
MMD는 연구자들 사이에서는 인기가 있지만 업계에서 MMD를 사용하는 회사는 드묾
2표본 검정은 고차원 데이터보다 저차원 데이터에서 더 잘 작동할 때가 많아 2-표번 검정을 수행 전 데이터의 차원을 줄이는 편이 좋음
모든 시프트 유형이 돌일하지 않아서 어떤 것은 찾아내기 어려움
변화는 서로 다른 속도로 발생하고 갑작스러운 변화는 점진적인 변화보다 감지하기 쉬움.
시프트는 공간과 시간이라는 두 차원에서도 발생할 수 있 는데, 공간적 시프트는 접속 지점이 달라짐에 따라 발생하는 시프트로, 애플리케이션에 새로운 사용자 집단이 생기거나 애플리케이션이 다른 유형의 디바이스에 제공되는 경우다.
시간적 시프트는 시간이 지남에 따라 발생하는 시프트임
시간적 시프트를 감지하는 일반적인 접근 법은 ML 애플리케이션에 대한 입력 데이터를 시계열 데이터로 처리하는 것임
시간 척도 윈도는 시간적 시프트를 다룰 때 데이터를 살펴보는 기준으로, 우리가 감지할 수 있는 시프트 수준에 영향을 미침
데이터에 주 단위 주기가 있으면 일주일 미만의 시간 척도는 해당 주기를 감지 하지 못함.
9일부터 14일 까지의 데이터를 원본 분포로 사용하면 15일 자는 마치 시프트 한 것 처럼 보이지만, 1일부터 14일 데이터를 원본 분포로 사용하면 15일차의모든 데이터 포인트는 원본가 동일한 분포에서 생성된 것처럼 보임
=> 계절적인 변화로 인해 시프트가 교란되면 시간적 시프트를 감지하기 어려움
시간에 따른 실행 통계를 계산 할 때 누적 통계(cumulative statistics)
와 슬라이딩 통계(sliding statistics)
을 구별해야 함
'슬라이딩 통계'는 단일 시간 척도 윈도(예: 한 시간) 내에서 계산, '누적 통계'는 더 많은 데이터로 지속 업데이트 함
-각 시간 척도 윈도의 시작 시점마다 슬라이딩 정확도는 재설정되지만 누적 슬라이딩 정확도는 재설정되지 않음
시간 영역의 데이터를 다루는 일은 복잡하고, 시계열 분해 등 시계열 분석 기술에 대한 지식이 필요함
현재 많은 회사에서 훈련 데이터 분포를 기본 분포로 사용해 특정 세분화 수준, 시간 별/일별로 프로덕션 데이터 분포를 모니터링함
시간 척도 윈도가 작을수록 데이터 분포의 변화를 더 빨리 감지할 수 있음
윈도가 너무 작으면 시프트에 대한 오탐지 경보로 이어질 수 있음
일부 플랫폼, 모니터링 같이 실시간 데이터 분석을 처리하는 플랫폼은 병합 연산을 제공해 크기가 작은 시간 척도 윈도에 대한 통계를 병합해 크기가 큰 시간 척도 윈도에 대한 통계를 생성할 수 있음
관심 대상 데이터 통계를 시간 별로 계산한 다음 시간별 통계 값 모음을 일별 보기 기준으로 병합함
보다 발전한 모니터링 플랫폼은 전체 통계를 자동으로 분석하는 근본 원인 분석(root cause analysis ; RCA) 기능을 시도함 => 시간 시프트의 크기를 다양하게 적용해 데이터 변화가 발생한 시간 윈도를 정확히 감지함
기업이 데이터 시프트를 해결하는 방식은 해당 기업의 ML 인프라가 얼마나 잘 구성되어 있는지에 달려 있음
모델을 재훈련하는 최적 빈도는 중요한 결정 사항이지만 많은 기업에서는 실험 데이터 대신 직감을 바탕으로 결정함
모델이 프로덕션 환경의 새로운 분포에서 잘 작동하도록 하는 세 가지 주요 접근법이 있음
(1) 대규모 데이터셋으로 훈련하는 방법
훈련 데이터셋이 충분히 크다면 통합적인 분포, 프로덕션 환경에서 모델이 마주할 모든 데이터 포인트를 가진 분포를 학습할 수 있을 것으로 기대함
(2) 새로운 레이블을 요구하지 않으면서 훈련된 모델을 대상 분포에 적응시키는 방법
대상 분포의 레이블을 사용하지 않고 공변량 시프트와 레이블 시프트 모두에 대한 모델 예측값을 수정하기 위해 조건부와 주변 분포의 커널 임베딩과 함께 인과적 해석을 사용함
또한 도메인 불면의 표현 학습, 즉 변하는 분포에서 변하지 않는 데이터 표현을 학습하는 비지도 도메인 적응 기법도 제안했으나 연구가 많이 이루어지지 않고, 업계에서도 도입되지 않았음
(3) 대상 분포에서 레이블이 지정된 데이터를 가져와 모델을 재훈련하는 방법
업계에서 흔히 수행되는 방법이나 모델을 재훈련하는 일은 간단하지 않음
재훈련은 이전 데이터와 신규 데이터 모두를 합쳐 모델을 처음부터 다시 훈련하거나 신규 데이터로 기존 모델 훈련을 이어나가는 일을 의미한다.
후자는 미세 조정이다.
모델을 재훈련할 때 두가지를 결정해야 하는데,
[1] 모델을 처음부터 훈련할지(무상태 재훈련) 혹은 마지막 체크포인트에서 이어서 훈련할지(상태 유지 훈련)을 결정하고
[2] 사용할 데이터, 지난 24시간/지난 주/지난 6개월 또는 데이터가 드리프트를 시작한 시점의 데이터 중 선택한다.
어떤 재훈련 전략이 가장 적합한지는 실험을 수행해야 할 수 도 있음
데이터 시프트 관련 논문에서는 도메인 적응과 전이 학습이 데이터 시프트와 언급되는 것을 종종 볼 수 있는데, 분포를 도메인으로 간주하면 모델을 새로운 분포에 어떻게 적응 시킬 것인지에 대한 고민은 모델을 상이한 도메인에 어떻게 적응시킬지에 대한 고민과 유사하다
결합 분포 P(X,Y) 학습을 수행해야 할 작업으로 간주하면, 모델이 훈련이 이뤄진 한쪽 결합 분포에서 다른 쪽 결합 분포로 적응시키는 것은 전이 학습의 한 형태로 구조화 할 수 있음
전이 학습은 특정 작업을 위해 개발한 모델을 두 번째 작업의 모델에 대한 시작점으로 재사용 하는 방법을 말한다. 차이점은 전이 학습을 사용 할 때 두 번째 작업을 위해 기본 모델을 처음부터 재훈련 하지는 않는 다는 점이다.
반면에 모델을 새로운 분포에 적응시키려면 모델을 처음부터 다시 훈련해야 할 때도 있다.
데이터 분포 시프트 문제를 꼭 시프트가 발생하고 나서 해결하라는 법은 없고, 시스템 자체를 시프트에 더욱 강건하게 설계할 수 도 있다.
시스템은 다양한 피처를 사용하고 각 피처는 서로 다른 속도로 시프트 한다.
모델 피처를 선택할 때 피처 성능과 안정성 사이의 균형을 고려해야 한다.
시스템이 시프트에 더 쉽게 적응하도록 설계할 수 있는데, 시장마다 별개의 모델을 사용한다면 필요시에만 개별 모델을 업데이트 한다.
프로덕션 환경의 모델에 발생하는 성능 저하 문제에 반드시 ML 솔루션이 필요하지는 않는데, 오늘날 많은 ML 장애는 여전히 사람의 실수로 인해 발생한다. 모델 장애가 사람의 실수로 인해 발생했다면 해당 오류를 찾아 수정해야 한다.
데이터 시프트는 감지하기도 어렵지만 원인을 파악하는 것이 더 어려울 수도 있다.
인스루먼테이션
이라고 하는데,인스루먼테이션
은 함수에 타이머 추가하기, 피처의 NaN 개수 세기, 시스템을 통해 입력이 변환되는 방식 추적하기, 비정상적으로 긴 입력과 같이 비정상적인 이벤트 로깅하기 등이 있다.예를 들어 프로덕션 환경 소프트웨어 시스템의 매우 중요한 특성으로 가용성
이 있는데, 가용성은 사용자에게 합리적인 성능을 제공하는 시스템의 사용 가능한 시간이 얼마인지를 의미한다. 이 특성은 Uptime(업타임)으로, 시스템이 가동된 시간에 대한 백분율로 측정된다.
시스템 가동 여부를 결정하는 것은 서비스 수준 목표(service level objective; SLO) 또는 서비스 수준 계약(service level agreement; SLA)에 정의돼 있다.
예를 들어 SLA에 레이턴시 중앙값이 200밀리초 미만이고 99번째 백분위수가 2초 미만이 될 때 서비스가 가동되는 것으로 간주하게끔 정리할 수 있다.
서비스 제공자는 보장 가동 시간(전체 시간 중 99.99%)을 미리 정한 SLA로 제공할 수 있고, 이것이 충족되지 않으면 고객에게 환불을 제공한다.
한편 ML 시스템에서 시스템 상태란 시스템 가동 시간 이상의 의미로 확장되는데, ML 시스템이 작동하지만 예측값이 엉망이라면 사용자는 만족스럽지 않기 때문에 ML 모델의 상태를 알려주는 ML 관련 지표가 있다.
ML 관련 지표 중 모니터링 해야 하는 네 가지 아티팩트로 모델 정확도 관련 지표, 예측값, 피처, 원시 입력값이 있다.
ML 시스템 파이프라인의 서로 다른 네 단계에서 생성되는데, 아티팩트가 파이프라인의 각 단계를 더 많이 통과했을수록 변환이 더 많이 일어진 것이며, 해당 아티팩트 변화는 그러한 변환 중 하나 이상의 오류로 발생했을 가능성이 높다.
아티팩트가 더 많이 변환될수록 더 구조화되고 실제 관심 대상인 지표에 더 가까우므로 모니터링이 더 쉬워진다.
[1] 정확도 관련 지표 모니터링
[2] 예측값 모니터링
[3] 피처 모니터링
-업계의 ML 모니터링 솔루션은 모델 입력으로 사용하는 피처와 원시 입력값에서 최종 피처로의 중간 변환이라는 두 측면에서 피처 변화를 추적하는데 주안점을 둠
<특정 피처에 대해 확인해볼 수 있는 몇 가지 사항>
- 피처의 최솟값, 최댓값 혹은 중앙값이 허용 가능한 범위 내 인가?
- 피처 값이 정규 표현식 형식을 만족하는지?
- 모든 피처 값이 미리 정의된 집합에 속하는지?
- 두 피처 값 간에 상정한 대소 관계를 만족하는지?
피처는 종종 테이블 형태로 구성되어 (각 열은 피처, 각 행은 데이터 샘플) 피처 검증을 테이블 테스트 혹은 테이블 검증이라고 하며, 데이터에 대한 단위 테스트라 부르는 사람도 있음
기본 피처 검증을 수행하는 데 도움이 되는 다양한 오픈 소스 라이브러리가 있으며 가장 많이 사용하는 두 가지는 그레이트 익스펙테이션즈와 AWS 에서 제공하는 Deequ (디큐)
기본 피처 검증 외에도 2-표본 검정을 사용해 피처 혹은 피처 집합의 내ㅣ재 분포가 시프트 했는지 감지할 수 있음
피처 혹은 피처 집합은 보통 고차원이라 검정을 수행하기 전 차원을 줄여야함. 그렇지 않으면 검정 효율성이 떨어짐
<피처 모니터링을 수행할 때 네 가지 주요 문제>
(1) 회사에서 운영하는 프로덕션 환경 모델이 수백 일 수 있으며 각 모델은 보통 피처를 수백개 사용함
: 요약 통계량을 계산하는 등 간단한 작업이더라도 매시간 모든 피처에 대해 수행한다면 필요 연산양뿐 아니라 메모리 사용 측면에서도 비용이 높음
너무 많은 지표를 추적, 지속적으로 계산하면 시스템 속도가 느려지고 사용자가 경험하는 레이턴시가 증가 및 시스템 이상 감지 시간이 늘어남
(2) 추적 기능은 디버깅에는 유용하지만 모델 성능 저하를 감지하는 데 그다지 유용하지 않음
: 크기가 작은 분포 시프트는 치명적인 장애를 야기할 수 있지만 실제로 개별 피처의 사소한 변화는 모델 성능에 전혀 영향을 미치지 않음
피처 분포는 항상 변하며 변화의 대부분은 대체로 무해함
피처가 드리프트된 것처럼 보일 때마다 경고를 받는면 경고의 양에 압도되고, '경고 피로' 인, 경고가 너무 자주 발생해 주의를 기울이지 않게 되는 현상을 겪을 수 있음
피처 모니터링에서 중요한 문제는 어떤 피처 시프트가 중요하고 중요하지 않는지를 결정하는 것임
(3) 피처 추출은 종종 다양한 서비스(빅쿼리, 스노우플레이크)에서 다양한 라이브러리(판다스, 스파크)를 사용해 다양한 단계(결측값 채우기, 표준화)에서 이뤄짐
: 피처 추출 프로세스에 대한 입력으로 관계형 데이터베이스가 출력으로 넘파이 배열이 있을 수 있음
피처에서 유해한 변화를 감지하더라도 이 변화가 내재하는 입력 분포의 변화로 인한 것인지, 혹은 여러 처리 단계 중 다양한 하나 이상의 오류로 인한 것인지 감지 자체가 불가능 할 수 있음
(4) 피처가 따르는 스키마가 시간에 따라 바뀔 수 있음
: 스키마 버전을 지정하고 각 피처를 기대 스키마에 매핑할 방법이 없다면,
보고된 경고의 원인은 데이터 변화가 아니라 스키마에 불일치해서일 수 있음
로그
, 대시보드
, 경고
가 있음분산 추적(distributed tracing)
이라고 함[1] 경고 정책
[2] 알림 채널
[3] 경고 설명
경고를 받은 사람이 무슨 일이 일어나고 있는지 이해하는 데 도움을 줌
경고를 받을 대상에 따라 경고 처리에 도움이 될 만한 반복 수행 절차와 작업 모임인 완화 지침 또는 런북을 제공할 필요가 있음
경보 피로(alert fatigue)는 실제로 발생하는 현상으로, 중요한 경고만 될 수 있도록 조건을 의미 있게 설정하는 것이 좋음
원격 측정
관찰 가능성은 기존 모니터링보다 더 강력한 가정에 기반함
시스템 내부 상태는 외부 출력에 대한 지식으로 추론할 수 있다고 상정함
내부 상태는 '현재GPU 사용률' 과 같은 현재 상태일 수도 있고 '전일 GPU 평균 사용률' 과 같은 과거 상태일 수도 있음
관찰 가능한 시스템에 문제가 발생하면 시스템 로그와 지표만 보고도 무엇이 잘못됐는지 파악할 수 있음
관찰 가능성이란 시스템 런타임에 대한 충분한 정보를 수집하고 분석하는 방식으로 시스템을 계측함
모니터링의 중심은 지표이며, 지표는 일반적으로 집계(aggregation)을 통해 산출됨
관찰 가능성을 통해 보다 세분화된 지표를 사용할 수 있어, 모델 성능이 언제 저하되는지 뿐 아니라 입력 중 어떤 유형에서 어느 사용자 하위 그룹에서, 어느 시간에 저하되는지도 알 수 있음
예를 들어, 다음 요구 조건을 해결하기 위해 로그에 질의할 수 있어야 하는데
지난 1시간 동안 모델 A가 잘못된 예측값을 반환한 사용자를 모두 우편 번호별로 그룹화해 나타내라 / 지난 10붕 동안 발생한 요청의 이상치를 나타내라 / 주어진 입력에 대한 중간 출력값을 모두 나타내라 등과 같이, 시스템 출력을 태그와 기타 식별 키워드로 사용해 로깅하면 나중에 출력을 데이터의 서로 다른 차원에 따라 슬라이싱 하거나 격자로 추출해낼 수 있음
ML 에서 관찰 가능성은 해석 가능성을 포함함
해석 가능성은 ML이 작동하는 법을 이해하는 데 도움이 되며, 관찰 가능성은 ML 모델을 비롯한 전체 ML 시스템이 작동하는 방식을 이해하는데 도움이 됨
지난 1시간 동안 모델 성능이 저하도니 경우 1시간 동안 이뤄진 모든 잘못된 예측값에 가장 크게 기여한 피처를 해석할 수 있으면, 시스템에서 문제가 발생한 부분과 수정 방법을 파악하는 데 유형함
모니터링은 강력한 개념이지만 본질적으로 수동적인 작업이므로, 감지하기 위해서는 변화가 발생하기를 기다려야 함
모니터링은 문제를 찾아내는 데 도움이 되지만 그것을 수정해주지는 않음
장애를 소프트웨어 시스템 장애(ML과 관련되지 않은 시스템에서 발생하는 장애), ML 관련 장애라는 두 가지 유형으로 구분했는데, 오늘날 ML 장애는 대부분 ML과 관련이 없지만 MLOps 중심으로 한 도구와 인프라가 발전함에 따라 상황은 바뀔 수 있음
ML 관련 장애의 세 가지 주요 원인인 즉 훈련 데이터와 상이한 프로덕션 환경 데이터, 에지 케이스, 퇴행성 피드백 루프가 있음
훈련 데이터와 상이한 프로덕션 환경 데이터와 에지 케이스는 데이터와 관련되있고, 퇴행성 피드백 루프는 시스템 출력 시스템 입력에 영향을 줄 때 발생하므로 시스템 설계와 관련이 있음
데이터 분포 시프트는 공변량 시프트, 레이블 시프트, 개념 드리프트라는 세 가지 시프트 유형이 있음
분포 시프트에 대한 연구는 ML 연구의 하위 분야로 성장하고 있지만 아직 표준화된 내러티브가 정해지지 않았음
변화를 감지하려면 배포된 시스템을 모니터링 해야 하는데, 모니터링은 ML뿐 아니라 프로덕션 환경에 있는 모든 소프트웨어 엔지니어링 시스템에 중요함
모니터링에서 가장 중요한 것은 지표로, 모니터링 지표시 레이턴시/스루풋/CPU 사용률 등 모든 소프트웨어 시스템에서 모니터링해야 하는 운영 지표와 ML 관련 지표 등이 있음
모니터링은 정확도 관련 지표, 예측값, 피처 및 원시 입력값에 적용 가능함
모니터링이 어려운 이유는 지표 연산 비용이 저렴하더라도 지표를 이해하기가 간단하지 않음. 대시보드를 구축해 그래프를 표시하기는 쉽지만 그래프가 드리프트 징후를 나타내는 지, 드리프트가 있다면 그 원인이 내재된 데이터의 분포의 변화인지, 파이프라인의 오류인지 이해하는 일은 훨씬 어려움
숫자와 그래프를 이해하려면 통계를 이해해야 함
프로덕션환경에서는 모델 성능 저하를 감지하는 일이 첫 번째이고, 다음은 시스템을 변하는 환경에 적응시키는 것임