이 강의에서 앤드류 응 교수는 머신러닝 모델을 잘 개발하는 것 뿐 아니라, 머신러닝 시스템을 운용하고 모델 및 데이터의 오류분석을 수행하는 MLOps의 전체 과정에 대해서 설명한다. 강의 내용은 좀 더 포괄적이지만 이 글에서는 핵심의 내용 위주로 정리해보려고 한다.
MLOps란 무엇인가?
MLOps, Machine Learning Operations의 약자로, 머신러닝 프로젝트 라이프사이클의 전체 프로세스를 각각의 단계에서 지원하는 도구들의 집합과 원칙들을 포함하는 전부를 이야기한다. 이는 머신러닝 프로젝트에서의 문제정의, 데이터 생성, 모델링(학습), 배포의 단계를 모두 포함한 것이다. 또한, 각각의 시스템적 단계에서 그것들을 지원하는 SW 도구까지 모두 포함하는 것이 MLOps이다.
머신러닝 시스템에 필요한 주변 환경요소들
Hidden Technical Debt in Machine Learning Systems, D. Sculley et. al.
(https://papers.nips.cc/paper/5656-hidden-technical-debt-in-machine-learning-systems.pdf)
일반적으로 사람들은 머신러닝 시스템에서 머신러닝 코드, 즉 모델이 차지하는 비중이 매우 크다고 생각한다. 하지만, 실제 머신러닝 시스템을 운용하는데 머신러닝 코드가 차지하는 부분은 저 그림의 비중처럼 생각보다 훨씬 작다. 머신러닝 시스템의 각 단계에서 필요한 주변 환경요소들을 구성하고 효과적으로 운영하기 위한 노력과 자원이 훨씬 더 많이 필요하다. 이러한 머신러닝 프로젝트를 성공적으로 이끌기 위해서는 그 구성과 라이프사이클을 제대로 이해하여야 한다.
머신러닝 프로젝트의 라이프사이클
1. Scoping: 범위 설정하기
가장 먼저 할 것은 풀고자 하는 문제에 대해 범위를 설정하는 것이다. 프로젝트를 정의하고, 문제에 대해 정확하게 정의한다. 그 다음 수집해야하는 데이터에 대해 생각하는 것이다.
예를 들어, 음성 검색을 지원하는 음성인식 프로젝트를 생각해보자. 음성 데이터의 세가지 주요 요소는 음성 정확도, 레이턴시, 처리량이 될 것이다. 이러한 문제에 대해 구체적으로 필요한 자원과 시간을 예측해 보는 것이다.
2. Data: 데이터 정의하기
다음 단계는 데이터를 어떻게 일관되게 레이블링할 것인가에 대한 데이터 정의 문제이다. 예를 들어, 동일한 음성 데이터에 대해서 아래와 같은 세가지의 레이블링이 나올 수 있다.
- Um, today’s weather
- Um… today’s weather
- (…) Today’s weather
데이터 레이블링에는 정답이 없다. 각각의 클립에 대해서 정적을 몇 초 유지해야 다른 클립으로 분절할 것인지, 음량에 대한 일반화는 어떻게 수행할 것인지에 대한 데이터 전처리에 대한 정의 방법이 각기 달라질 수 있다. 이는 모두 우리가 1단계에 정의한 문제의 범위에 따라 선택하여야 한다.
3. Modeling: 모델 구현하기
이 단계는 머신러닝 모델을 만들기까지 필요한 과정이다. 이는 아래 세가지 단계를 포함한다.
- 코드로 구현하기: 알고리즘/모델 코드
- 하이퍼 파라미터 설정하기
- 데이터 수집하기
머신러닝 시스템은 코드와 데이터를 포함한 전체이다. 모델을 완성한 뒤에는 오류분석을 통해 만들어진 모델의 데이터에 문제가 있는지를 분석한다.
4. Deployment: 서비스로 배포하기
데이터 수집과 모델의 학습 및 구현이 완료되면, 마지막으로 서비스 배포단계이다. 서비스 배포단계에서 실제 머신러닝 어플리케이션이 적용되는 실제 환경은 설계 단계와 매우 달라질 수 있다.
예를들어, 스마트폰에 들어가는 음성검색 어플리케이션은 로컬 소프트웨어 안에 음성입력 모듈을 사용하여 마이크로 음성을 녹음한다. 음성입력 모듈에서 받은 음성을 추론서버로 보내고 그 추론결과를 다시 어플리케이션에 반환해야 한다. 이렇게 복잡한 배포환경을 아무리 잘 구성해도 실제 서비스에는 여러가지 문제가 생길 수 있다. 어른의 음성으로 학습한 모델에 아이들의 음성이 입력되는 Concept/Data Drift 등.
ML 시스템의 배포
- Shadow mode: 머신러닝 시스템이 사람의 행동을 따라하며 인간과 병렬적으로 동작하게 하는 배포방법이다. 이 단계에서는 머신러닝 알고리즘의 출력이 결정을 내리지 않고, 인간이 내리게 된다.
- Canary deployment: 예전 광부들이 광산에서 카나리아 새를 데리고 산소포화도 여부를 새가 살아있는지로 확인하던 방법과 유사하다. 초기에는 머신러닝 알고리즘이 5% 정도의 적은 처리량을 소화한다. 주로 시스템을 모니터링하는 용도로 수행하고, 추후 처리량을 늘리는 방식으로 배포시킨다.
- Blue green deployment: 기존 버전이 블루, 신규 버전이 그린이다. 각각의 블루/그린 추론 서버를 이용하여 모델을 배포하고 신규 버전에 모델이 생기면 기존 버전으로 빠르게 복구할 수 있는 장점을 가지고 있다.
ML 모델링은 반복적이지만, 배포 또한 마찬가지다
오류분석 잘하기
오류분석시 가장 먼저 할 일은 오류의 유형을 분류하여 카테고리별로 분류하는 것이다. 특정태그의 오류 유형이 얼마나 차지하는지 비율을 확인한다.
일의 우선순위 정하기
전체 데이터의 60% 비율을 차지하는 Clean Speech 데이터의 성능을 1% 높이는 것은 실제 데이터의 성능을 0.6% 높이는 효과를 낸다. 실제 성능향상과 데이터 비율을 고려하여 Clean Speech나 People Noise 유형의 데이터 성능을 높이는 것이 모델 전체 성능에 가장 효과가 좋다는 것을 알 수 있다. 이러한 기준으로 우선순위를 정해서 모델 개선 작업 수행하는 것이다. 일의 우선순위를 정해서 오류분석의 결과로 모델/데이터 개선방법을 선택할 수 있다.
- 데이터를 더 모을 것인지
- 데이터를 증량시킬 것인지
- 레이블링 정확도를 높여 데이터 품질을 개선할 것인지
Precision & Recall
모델 정확도에 대한 분석으로 Precision과 Recall을 측정해볼 수 있다. 먼저 위의 표에서 모델이 추론한 값을 y축으로, 실제 정답을 x축으로 두고 구간을 나누어 정의해보자면,
- TN: 모델이 음성으로 추론, 실제로도 음성인 경우
- TP: 모델이 양성으로 추론, 실제로도 양성인 경우
- FN: 모델이 음성으로 추론, 실제로도 양성인 경우
- FP: 모델이 양성으로 추론, 실제로도 음성인 경우
그리고 여기에서 Precision은 모델이 양성으로 추론한 경우 중, 진짜 양성은 얼마나 되는지를, Recall은 전체 양성 결과 중, 모델이 추론한 경우는 얼마나 되는지를 나타낸다.
데이터 문제의 주요 유형들
데이터가 작으면 모델이 최적해를 찾기 어렵고, 데이터가 많으면 최적해를 찾기는 쉽다. 그러나 데이터가 작더라도, 일관적인 데이터 레이블링을 하면 모델의 최적해를 잘 찾을 수 있다!
당연히, 데이터가 큰 상황에서도 레이블 일관성 문제는 중요하다. 예를 들어, 자율주행 차량 데이터는 수 많은 비전 데이터를 가지고 있지만 주행순간에 판단해야 하는 수 많은 조종 선택에 관련된 데이터에 대한 레이블링의 일관성을 잘 유지하여야 할 것이다.
데이터 파이프라인
모델 개발시 사용했던 데이터의 전처리 스크립트와 프로덕션 과정에서 현실 데이터를 재현하는 스크립트를 어떻게 구현할 것인가?
- PoC는 모델 배포 이전에 가치가 있는 작업인지를 확인하는 것
- 배포 단계에서는 현실 데이터 파이프라인을 재현하고 확인하는 것
초기에 만들어진 모델과 데이터는 한번에 완성본이 나오는 것이 아니라 여러번의 프로토타이핑 후에 만들어진다. 우리는 이러한 모델과 데이터의 버전에 대해서 계속 추적이 필요하다. 모델이나 데이터의 특정 버전에 문제가 생기면 항상 롤백할 준비가 되어있어야 하고, 이는 소프트웨어의 형상관리 철학과도 매우 유사하다.
마치며
- 머신러닝 프로젝트를 운용하면서, 간과하는 주변요소들에 대해서 더 인지하여 효과적인 머신러닝 시스템을 구축하여야 한다.
- 효과적인 머신러닝 프로젝트의 운용의 핵심은 짧은 사이클의 MLOps 생애주기 반복에 있다.
- 한번 만들어진 모델은 절대로 완성본이 아니다! 계속해서 오류분석을 통해 데이터/모델의 개선을 일궈나가자.