Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions content/en/docs/introduction/component.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
---
title : "MLOps의 구성 요소"
description: "Describe MLOps Components"
lead: ""
draft: false
weight: 102
contributors: ["Youngcheol Jang"]
menu:
docs:
parent: "introduction"
---

2021년 5월에 발표된 구글의 [white paper : Practitioners guide to MLOps: A framework for continuous delivery and authmation of machine learning](https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf)에서는 MLOps의 핵심 기능들로 다음과 같은 것들을 언급하였습니다.

<p>
<img src="/images/docs/introduction/mlops-component.png" title="mlops-component"/>
</p>

각 기능들이 어떤 역할을 하는지 살펴보겠습니다.

### 1. Experimentation

실험(Experimentation)은 머신러닝 엔지니어들이 데이터를 분석하고, 프로토타입 모델을 만들며 학습 기능을 구현할 수 있도록 하는 다음과 같은 기능을 제공합니다.

- 깃(Git)과 같은 버전 컨트롤 툴과 통합된 노트북(Jupyter Notebook) 환경 제공
- 사용한 데이터, 하이퍼 파라미터, 평가 지표를 포함한 실험 추적 기능 제공
- 데이터와 모델에 대한 분석 및 시각화 기능 제공

### 2. Data Processing

데이터 처리(Data Processing)은 머신러닝 모델 개발 단계, 지속적인 학습(Continuous Training) 단계, 그리고 API 배포(API Deployment) 단계에서 많은 양의 데이터를 사용할 수 있게 해 주는 다음과 같은 기능을 제공합니다.

- 다양한 데이터 소스와 서비스에 호환되는 데이터 커넥터(connector) 기능 제공
- 다양한 형태의 데이터와 호환되는 데이터 인코터(encoder) & 디코더(decoder) 기능 제공
- 다양한 형태의 데이터에 대한 데이터 변환과 피쳐 엔지니어링(feature engineering) 기능 제공
- 학습과 서빙을 위한 확장가능한 배치, 스트림 데이터 처리 기능 제공

### 3. Model training

모델 학습(Model training)은 모델 학습을 위한 알고리즘을 효율적으로 실행시켜주는 다음과 같은 기능을 제공합니다.

- ML 프레임워크의 실행을 위한 환경 제공
- 다수의 GPU / 분산 학습 사용을 위한 분산 학습 환경 제공
- 하이퍼파라미터 튜닝과 최적화 기능 제공

### 4. Model evaluation

모델 평가(Model evaluation)은 실험 환경과 상용 환경에서 동작하는 모델의 성능을 관찰할 수 있는 다음과 같은 기능을 제공합니다.

- 평가 데이터에 대한 모델 성능 평가 기능
- 서로 다른 지속 학습 실행결과에 대한 예측 성능 추적
- 서로 다른 모델의 성능 비교와 시각화
- 해석 가능한 AI 기술을 이용한 모델 출력 해석 기능 제공

### 5. Model serving

모델 서빙(Model serving)은 상용 환경에 모델을 배포하고 서빙하기 위한 다음과 같은 기능들을 제공합니다.

- 저지연 추론과 고가용성 추론 기능 제공
- 다양한 ML 모델 서빙 프레임워크 지원(Tensorflow Serving, TorchServe, Nvidia Triton, Scikit-learn, XGGoost .. etc)
- 복잡한 형태의 추론 루틴 기능 제공, 예를 들어 전처리(preprocess) 또는 후처리(postprocess) 기능과 최종 결과를 위해 다수의 모델이 사용되는 경우를 말한다.
- 순간적으로 치솟는 추론 요청을 처리하기 위한 오토 스케일링(autoscaling) 기능 제공
- 추론 요청과 추론 결과에 대한 로깅 기능 제공

### 6. Online experimentation

온라인 실험(Online experimentation)은 새로운 모델이 생성되었을 때, 이 모델을 배포하면 어느 정도의 성능을 보일 것인지 검증하는 기능을 제공한다. 이 기능은 새 모델을 배포하는 것 까지 연동하기 위해 모델 저장소(Model Registry)와 연동되어야 한다.

- 카나리(canary) & 섀도우(shadow) 배포 기능 제공
- A/B 테스트 기능 제공
- 멀티 암드 밴딧(Multi-armed bandit) 테스트 기능 제공

### 7. Model Monitoring

모델 모니터링(Model Monitoring)은 상용 환경에 배포되어 있는 모델이 정상적으로 동작하고 있는지를 모니터링 하는 기능을 제공한다. 이 기능은 모델의 성능이 떨어져 업데이트가 필요한지에 대한 정보를 제공해준다.

### 8. ML Pipeline

머신러닝 파이프라인(ML Pipeline)은 상용 환경에서 복잡한 ML 학습과 추론 작업을 구성하고 제어하고 자동화 하기 위한 다음과 같은 기능을 제공한다.

- 다양한 이벤트를 소스를 통한 파이프라인 실행 기능
- 파이프라인 파라미터와 생성되는 산출물 관리를 위한 머신러닝 메타데이터 추적과 연동 기능
- 일반적인 머신러닝 작업을 위한 내장 컴포넌트 지원과 사용자가 직접 구현한 컴포넌트에 대한 지원 기능
- 서로 다른 실행 환경 제공 기능

### 9. Model Registry

모델 저장소(Model Registry)는 머신러닝 모델의 생명주기(Lifecycle)을 중앙 저장소에서 관리할 수 있게 해 주는 기능을 제공합니다.

- 학습된 모델 그리고 배포된 모델에 대한 등록, 추적, 버저닝 기능 제공
- 배포를 위해 필요한 데이터와 런타임 패키지들에 대한 정보 저장 기능

### 10. Dataset and Feature Repository

- 데이터에 대한 공유, 검색, 재사용 그리고 버전관리 기능
- 이벤트 스트리밍 및 온라인 추론 작업에 대한 실시간 처리 및 저지연 서빙 기능
- 사진, 텍스트, 테이블 형태의 데이터와 같은 다양한 형태의 데이터 지원 기능

### 11. ML Metadata and Artifact Tracking

MLOps의 각 단계에서 다양한 형태의 산출물들이 생성된다. ML 메타데이터는 이런 산출물들에 대한 정보를 의미한다.
ML 메타데이터와 산출물 관리는 산출물의 위치, 타입, 속성, 그리고 관련된 실험(experiment)에 대한 정보를 관리하기 위해 다음과 같은 기능들을 제공해준다.

- ML 산출물에 대한 히스토리 관리 기능
- 실험과 파이프라인 파라미터 설정에 대한 추적, 공유 기능
- ML 산출물에 대한 저장, 접근, 시각화, 다운로드 기능 제공
- 기타 다른 MLOps 기능과의 통합 기능 제공
16 changes: 0 additions & 16 deletions content/en/docs/introduction/example.md

This file was deleted.

87 changes: 87 additions & 0 deletions content/en/docs/introduction/intro.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
title : "What is MLOps?"
description: "Introduction to MLOps"
lead: ""
draft: false
weight: 101
contributors: ["Jongseob Jeon"]
menu:
docs:
parent: "introduction"
---

## 서론

최근 MLOps와 관련된 주제의 세미나와 글들이 많아지고 모두 MLOps의 필요성에 대해 말하고 있습니다.
그런데 MLOps란 무엇이며 이를 위해서 우리는 무엇을 공부해야 할까요?
저희 *모두의 MLOps*는 MLOps에 대해서 공부하려고 하지만 어떻게 시작해야 하는지 모르는 분들을 위한 지침서를 작성하고자 이 프로젝트를 시작하였습니다.

MLOps는 Machine Learning Operations의 약어입니다. Operations는 도메인에 따라서 또는 상황에 따라서 필요로 하는 것이 달라진다는 뜻을 내포하고 있습니다.
특히 집필을 하는 2022년 기준으로 아직 표준이라고 불릴 수 있는 MLOps 툴이 존재하지 않습니다. 그렇기 때문에 저희가 제시하는 방법을 실제 업무에 바로 적용하기에는 힘들 수도 있습니다.
그럼에도 이 글을 통해서 많은 분들이 MLOps란 무엇이며 각자의 환경에 맞게 어떤 것이 필요한 지를 알 수 있는 첫 디딤돌이 되었으면 합니다.

## Machine Learning Project

2012년 Alexnet 이후 CV, NLP, Tabular Data등 데이터가 존재하는 곳에서는 모두 머신러닝과 딥러닝을 도입하고자 하였습니다.
딥러닝과 머신러닝은 AI라는 단어로 묶이며 불렸고 많은 매체에서 AI의 필요성을 외쳤습니다. 그래서 무수히 만흔 기업에서 머신러닝과 딥러닝을 이용한 수 많은 프로젝트를 진행하였습니다. 그리고 어떻게 되었을까요?
엘리먼트 AI의 음병찬 동북아 지역 총괄책임자는 [*"10개 기업에 AI 프로젝트를 시작한다면 그 중 9개는 컨셉검증(POC)만 하다 끝난다"*](https://zdnet.co.kr/view/?no=20200611062002)고 말했습니다.

이처럼 많은 프로젝트에서 머신러닝과 딥러닝은 이 문제를 풀 수 있을 것 같다는 가능성만을 보여주고 사라졌습니다. 그리고 이 시기 즈음에 [AI에게 다시 겨울](https://www.aifutures.org/2021/ai-winter-is-coming/)이 다가오고 있다는 전망들도 나오기 시작했습니다.

왜 대부분의 프로젝트가 컨셉검증(POC) 단계에서 끝났을까요?
머신러닝과 딥러닝 코드만으로는 실제 서비스를 운영할 수 없기 때문입니다. 실제 서비스 단계에서 머신러닝과 딥러닝의 코드가 차지하는 부분은 생각보다 작으며 단순히 모델만이 아니 다른 많은 부분들을 고려해야 합니다.
구글은 이런 문제를 2015년 [Hidden Technical Debt in Machine Learning Systems](https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf)에서 지적한 바 있습니다.
하지만 이 논문이 나올 때는 아직 많은 머신러닝 엔지니어들이 딥러닝과 머신러닝의 가능성을 입증하기 바쁜 시기였기 때문에, 논문이 지적하는 바에 많은 주의를 기울이지는 않았습니다.

몇 년이 지난 후 머신러닝과 딥러닝은 가능성을 입증을 해냈고 사람들은 이제 실제 서비스에 적용하고자 했습니다.
그리고 많은 사람들이 실제 서비스는 쉽지 않다는 것을 깨달았습니다.
****

## Before MLOps

사람들은 우선 머신러닝과 딥러닝을 일반적인 소프트웨어와 동일한 시선으로 바라보고 기존과 같은 방식으로 운영하고자 했습니다.
일반적인 소프트웨어에서는 어떤 문제가 발생할 경우 해당 부분을 담당한 소프트웨어 엔지니어가 문제의 원인을 진단하고 이를 해결한 후 다시 배포를 하였습니다.

<p align="center">
<img src="/images/docs/introduction/before-mlops.png" title="before-mlops"/>
</p>

이 때 머신러닝 모델을 배포하기 위해서는 머신러닝 엔지니어가 직접 모델을 학습한 후 모델 파일들을 배포를 담당하는 소프트웨어 엔지니어에게 전달하였습니다. 두 직군간의 소통의 매개체는 '학습된 모델'이였습니다.

하지만 이 소통의 매개체로 인해 머신러닝 엔지니어와 소프트웨어 엔지니어들의 갈등이 시작되었습니다.

<p align="center">
<img src="/images/docs/introduction/cartoon.jpg" title="cartoon" width=50%/>
</p>

머신러닝 엔지니어와 소프트웨어 엔지니어들은 **모델(*Network 구조와 Weights 가 담긴 파일*)** 을 매개체로 서로 소통했습니다.
머신러닝 엔지니어들은 DB에서 직접 쿼리를 이용해 데이터를 다운로드 받고 모델을 학습 후, 학습된 모델을 소프트웨어 엔지니어에게 전달하였습니다.
그러면 소프트웨어 엔지니어는 전달받은 모델을 로드한 뒤, 정해진 추론(inference) 함수를 제공하는 API Server 를 만들어 배포하였습니다.

이 과정에서 소프트웨어 엔지니어는 머신러닝 엔지니어에게 정해진 형식에 맞춰서 구현할 것을 요청합니다. 예를 들면 OS, 파이썬 버전, 사용한 패키지, 클래스 구조 등을 포함합니다.

소프트웨어 엔지니어와 머신러닝 엔지니어는 서로 어떤 환경에서 작업을 하는지 알지 못하기 때문에 소통의 과정에서 미리 약속한 형식에서 하나라도 어긋난다면 배포와 성능 재현의 문제가 발생합니다.
예를 들어서 개발 환경에서는 동작했던 코드가 실행 환경에서는 동작하지 않는다던지, 개발 환경에서과 동일한 성능이 재현되지 않는 문제가 발생하게 됩니다.

또한 Data Shift와 같이 학습에 사용된 데이터와 다른 데이터가 들어왔을 때 모델의 성능이 감소하는 문제가 생겼습니다.
일반적인 소프트웨어에서 문제를 해결하는 방법과 비슷하게 모델을 담당한 머신러닝 엔지니어들이 모델 성능 하락의 원인을 찾고 이를 개선한 새로운 모델을 배포했습니다.
일반적인 경우 최신 데이터를 추가적으로 반영하여 모델을 재학습하는 것만으로도 모델의 성능의 하락을 개선할 수 있었기 때문에, 머신러닝 엔지니어들은 주기적으로 모델을 재학습해서 배포하였습니다.

## After MLOps

<p align="center">
<img src="/images/docs/introduction/after-mlops.png" title="after-mlops"/>
</p>

MLOps에서는 파이프라인을 이용해 서로 소통합니다. 여기서 파이프라인이란 단순히 학습된 모델만이 아닌 모델에 종속된 모든 작업을 포함한 개념입니다.

### Continuous Integration & Deployment

머신러닝 엔지니어는 데이터를 다운로드 받고, 전처리를 수행하며, 모델을 생성하기까지의 모든 과정을 파이프라인의 형태로 작성하여 소프트웨어 엔지니어에게 전달하고, 소프트웨어 엔지니어는 전달받은 파이프라인에서 생성된 모델을 배포합니다.
머신러닝 엔지니어와 소프트웨어 엔지니어는 같은 파이프라인을 사용하기 때문에 언제 어디서나 동일한 성능의 모델을 빌드하고 배포하는 것을 보장할 수 있게 됩니다.

### Continuous Training

머신러닝 모델은 녹이 습니다. 이 말인 즉슨 한 번 학습되어 뛰어난 성능을 보였던 모델이라고 하더라도, 시간이 지남에 따라 성능이 저하되는 현상이 있다는 말입니다. 모델의 성능이 저하되는 근본적인 이유는 데이터의 분포가 변화하기 때문입니다.
데이터의 분포는 왜 변할까요? 데이터의 분포가 변화하는 이유로는 데이터의 모분포를 모르기 때문일수도 있고 현실에서 얻어지는 데이터의 특성은 변화할 수 있기 때문입니다.
이 때문에 최신 데이터를 이용해 모델을 재학습하여 모델의 성능을 다시 끌어올리는 작업이 필요하게 되었고, 머신러닝 엔지니어가 항상 이 작업을 반복하기보다는 파이프라인을 통해서 자동화를 할 수 있습니다.
Loading