지난주 모델이 더 좋았는데 아무도 못 찾는다 · 자동으로 가되 아무 때나 가지는 않게 · 실습
더 나쁜 모델이 운영으로 올라갔다
목표
모델 버전과 별칭(champion·challenger)을 갖춘 작은 레지스트리를 세우고, 지표가 떨어지면
승격을 막는 관문을 만들고, 관문을 무시한 승격을 되돌리고, 마지막으로 입력 분포가
움직였는지를 숫자로 만듭니다.
왜 중요한가
모델을 배포한다는 것은 파일을 복사하는 일이 아니라 어느 버전을 가리킬지 정하는 일
입니다. 운영이 버전 번호를 직접 들고 있으면 되돌리기가 배포 설정 변경이 되지만, 별칭을
한 겹 두면 되돌리기는 이름이 가리키는 곳을 바꾸는 일이 됩니다. 그래서 레지스트리는
버전·별칭·이력 셋을 함께 둡니다. 승격 관문은 여기에 '자동으로 가되 아무 때나 가지는
않는다' 를 더하는 장치입니다 — 재학습이 끝났다고 바로 운영으로 가면, 어느 주에는 더
나쁜 모델이 조용히 올라갑니다. 관문이 막았는데도 사람이 밀어붙이는 일은 실제로
일어나므로, 막는 것만큼이나 막았다는 사실과 밀어붙였다는 사실을 함께 남기는 것이
중요합니다.
단계
1. 지금 운영에 나가 있는 모델을 버전 1로 등록합니다.
2. champion 별칭이 버전 1을 가리키게 합니다.
3. 재학습 결과를 버전 2로 등록하고 challenger 로 세웁니다.
4. 승격 관문을 코드로 만들어 판정을 남깁니다.
5. 별칭이 움직인 이력을 감사 기록으로 남깁니다.
6. 관문을 무시한 승격을 재현하고 그 사실을 기록에 남깁니다.
7. 되돌리고 얼마나 잃었는지 적습니다.
8. 입력 분포가 얼마나 이동했는지를 재서 재학습 판단에 붙입니다.
참고
- 작업은 전부
/root/registry아래에서 합니다. 먼저mkdir -p /root/registry를 하세요. - 재료는
/opt/fixtures/mlops에 있습니다. 학습기의--out이 모델 파일을 써 줍니다. - 감사 기록은 덧붙이기입니다. 이미 쓴 줄을 고치면 이력이 아니라 현재 상태가 됩니다.
- 흔한 실수 — 되돌릴 때 버전 2를 registry.json 에서 지우는 것입니다. 별칭만 옮기세요.
- 실습 파드에는 볼륨이 없어 세션이 끝나면
/root가 사라집니다. 60분을 넘을 것 같으면
미리 +시간 으로 연장하세요.
단계 8개
- 지금 나가 있는 모델을 버전 1로 등록한다
- 배포 대상을 번호가 아니라 이름으로 가리킨다
- 재학습 결과를 도전자로 등록한다
- 승격을 사람이 아니라 규칙이 판단하게 한다
- 별칭이 움직인 이력을 남긴다
- 관문을 무시한 승격이 무엇을 남기는지 본다
- 되돌리고 얼마나 잃었는지 적는다
- 입력 분포가 움직였는지를 숫자로 만든다