MLOps for ALL, MLOps for MLE를 통해 공부한 내용을 정리하려고 한다.
MLOps는 무엇인가? MLOps는 이전에 없던 새로운 개념이 아니라 DevOps라는 개발 방법론에서 파생된 것이다. 그러므로 DevOps를 이해한다면 MLOps를 이해하는 것에 도움이 된다.
그렇다면 DevOps에 대해 먼저 알아보자.
DevOps는 Development(개발)와 Operations(운영)의 합성어로 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.
서비스의 규모가 커질수록 개발팀과 운영팀이 분리되어 작업을 진행하고, 서로 간의 소통에 한계가 생기게 된다.
다른 팀과 함께하는 미팅에 모든 팀원이 참여하는 것이 아니라 각각 소수의 인원만 참여하게 되며 점점 소통의 부재로 이어지게 된다.
그러다 보면 개발팀은 새로운 기능들을 계속해서 개발해 운영팀에 넘기지만, 운영팀에서는 개발팀에서 개발한 기능이 배포 시 장애를 일으키는 등 생기는 문제들이 점점 쌓여간다.
이러한 상황을 조직 이기주의라고 불리는 사일로 현상(Silo Effect)이라고 한다.
그래서 CI(Continuous Integration)/CD(Continuous Delivery/Deployment)를 통해 개발팀과 운영팀의 장벽을 해결하는 방법이 나타났다.
CI는 지속적인 통합을 의미하는 데, 새로 작업하거나 수정된 코드가 주기적으로 빌드, 테스트되어 프로젝트에 통합되는 것이다.
CD는 지속적인 제공 또는 배포로, CI를 통해 통합된 코드가 다시 주기적으로 배포되는 과정을 말한다.
DevOps는 Dev(개발)와 Ops(운영)이 합쳐진 것이라면, MLOps는 ML(머신러닝)과 Ops(운영)이 합쳐진 것이다. 즉, MLOps는 머신러닝팀과 운영팀의 문제를 해결하기 위한 방법이다.
하지만 꼭 Silo Effect를 해결하기 위해서 MLOps를 하는 것은 아니다. 예를 들어, 자연어, 이미지를 딥러닝을 이용한 작업을 진행할 때, 검증(POC)이 선행된 후에 서비스를 위한 운영 환경을 개발하는 경우에는 MLOps가 필요하다.
즉, MLOps는 ML+Ops로 두 팀의 생산성 향상을 위하거나, ML->Ops로 머신러닝 팀에서 직접 운영을 할 수 있도록 도와주는 것을 말한다.
구글에서는 MLOps의 발전 단계를 0부터 2까지로 총 3단계로 나누었다.
ML팀과 Ops팀은 모델을 통해 소통한다. ML팀은 데이터로 모델을 학습시키고 학습된 모델을 Ops팀에 전달한다. Ops팀은 전달받은 모델을 배포한다.

그러나 이러한 모델 중심의 소통을 문제점이 발생한다. 다음의 예시를 보자.

학습된 머신러닝 모델이 서비스에서 원하는 동작을 하기 위해서는 파이썬 코드, 학습된 가중치, 환경(패키지, 버전 등)이 일치해야 한다.
관리할 모델이 많지 않을 때는 금방 해결할 수 있겠지만, 관리하는 기능들이 많아지고 소통에 어려움을 생기면 성능이 더 좋은 모델을 빠르게 배포할 수 없게 된다.
그래서 MLOps에서는 파이프라인(Pipeline)을 이용해 이러한 문제를 방지하고자 했다. MLOps의 파이프라인은 도커와 같은 컨테이너를 이용해 모델 개발에 사용한 것과 동일한 환경으로 동작되는 것을 보장한다. 이를 통해서 환경이 달라서 모델이 동작하지 않는 상황을 방지한다.
머신러닝 엔지니어가 작성하는 파이프라인은 학습된 모델을 생산하는 것으로, 학습 파이프라인(Training Pipeline)이라고 하는 것이 정확하다고 볼 수 있다.
실제 환경에서는 데이터의 분포가 계속해서 변해 과거에 학습한 모델의 성능이 시간이 지남에 따라 저하되는 문제가 발생할 수 있다.
이 문제의 해결책은 바로 최근 데이터를 이용해 모델을 재학습하는 것으로, 변화된 데이터 분포에 맞춰 모델을 다시 학습시켜 준수한 성능을 내도록 할 수 있다.
DevOps에서는 소스 코드가 CI/CD 대상이었다면, MLOps는 학습 파이프라인이 CI/CD의 대상이 된다.
그러므로 모델을 학습하는데 영향이 있는 변화에 대해서 실제로 모델이 정상적으로 학습이 되는지 (CI), 학습된 모델이 정상적으로 동작하는지 (CD)를 확인해야 한다.
학습을 하는 코드 외에도 사용하는 패키지의 버전, 파이썬의 버전 변경도 CI/CD의 대상이다.
MLOps의 핵심 기능들에는 다음과 같은 것들이 있다.

머신러닝 엔지니어들이 데이터를 분석하고, 프로토타입 모델을 만들며 학습 기능을 구현하는 기능
머신러닝 모델 개발 단계, 지속적인 학습(Continuous Training) 단계, API 배포(API Deployment) 단계에서 많은 양의 데이터를 사용할 수 있게 해 주는 기능
모델 학습을 위한 알고리즘을 효율적으로 실행시켜주는 기능
실험 환경과 상용 환경에서 동작하는 모델의 성능을 관찰할 수 있는 기능
상용 환경에 모델을 배포하고 서빙하기 위한 기능
새로운 모델이 생성되었을 때, 모델을 배포하면 어느 정도의 성능을 보일 것인지 검증하는 기능
이 기능은 새 모델을 배포하는 것까지 연동하기 위해 모델 저장소(Model Registry)와 연동되어야 한다.
상용 환경에 배포된 모델이 정상적으로 동작하고 있는지 모니터링하는 기능
예를 들어 모델의 성능이 떨어져 업데이트가 필요한지에 대한 정보 등을 제공한다.
상용 환경에서 복잡한 ML 학습과 추론 작업을 구성하고 제어하고 자동화하기 위한 기능
머신러닝 모델의 생명 주기(Lifecycle)을 중앙 저장소에서 관리할 수 있게 해 주는 기능
ML 메타데이터는 각 단계에서 생성된 다양한 형태의 산출물들에 대한 정보를 의미한다.
ML 메타데이터와 산출물 관리는 산출물의 위치, 타입, 속성, 그리고 관련된 실험(experiment)에 대한 정보를 관리하기 위한 기능을 제공한다.
