00. Introduction
Introduction
2022년 MLOps 에 대한 관심은 폭발적으로 증가했습니다. [그림 0-1] 은 “MLOps” 키워드에 대한 구글 트랜드 그래프입니다. 2022년을 기점으로 검색량이 폭발적으로 증가한 것을 확인할 수 있습니다.
[그림 0-1] MLOps Google Trend
이런 관심의 집중에 따라 MLOps에 관한 많은 포스팅 글들을 찾아볼 수 있습니다. 하지만 대부분은 MLOps 의 개념에 관해서만 다루고 있습니다. 또한, MLOps는 그 자체로 제품 혹은 플랫폼이 될 정도로 방대한 범위를 다루고 있습니다. 대표적인 클라우드 회사에서는 SageMaker (AWS), VertexAI (Google Cloud) 과 같이 MLOps 제품을 출시했습니다.
그런데 정작 이를 사용해야 하는 머신러닝 엔지니어 입장에서는 “그래서 어떻게 MLOps 를 할 수 있는 건데?” 라는 의문이 들 수 밖에 없습니다. 이러한 의문을 조금이라도 풀 수 있도록 “머신러닝 엔지니어를 위한 MLOps”를 집필하였습니다.
다루는 내용
MLOps level: 0
[그림 0-2]는 MLOps 를 설명할 때 많이 쓰이는 구글 클라우드에서 제시한 MLOps 의 0단계 입니다. MLOps 의 목표는 0단계를 자동화시키는 것과 모델 개발 환경과 모델 운영 환경을 일치시키는 것에 있습니다.
[그림 0-2] MLOps Level 0
“머신러닝 엔지니어를 위한 MLOps” 에서는 직접 구현해보며 각 컴포넌트들이 어떤 역할을 하는지 컴포넌트끼리는 어떻게 연결해야 하는지 설명하고자 합니다. 여기서 다루는 내용을 간단히 도식화 하면 [그림 0-3]과 같이 표시할 수 있습니다.
[그림 0-3] Pipeline
Chapter
[그림 0-3] 의 파이프라인을 구현할 기술 스택과 관계도는 [그림 0-4]와 같습니다.
[그림 0-4] Architecture
각 컴포넌트를 구현하는데 사용하는 패키지 및 소프트웨어는 다음의 기준으로 선정하였습니다.
- 오픈소스
- 공식 Documentation 의 관리 여부
대표적으로 사용하는 패키지는 FastAPI, MLflow, Kafka 등이 있습니다. 단순히 따라해보는 것에 그치지 않고 본인의 업무에 필요한 방향으로 적용해 볼 수 있도록 간단한 튜토리얼을 작성하고 MLOps 에 맞게 변형하는 과정으로 진행됩니다.
Docker
“머신러닝 엔지니어를 위한 MLOps” 는 모든 컴포넌트들을 Docker 로 실행됩니다.
머신러닝의 성능 재현은 머신러닝 모델을 다룰 때 가장 중요한 부분 중 하나입니다. 이를 위해서는 OS, 파이썬 버전, 패키지 버전, 코드, 가중치 등이 모델을 학습했을 때의 환경과 동일해야 합니다. 이런 동일한 환경을 제공하기 위해서 Containerization 은 머신러닝에서 중요한 기술 중 하나이며 이를 대표하는 소프트웨어가 바로 Docker 입니다. 이러한 배경으로 머신러닝 엔지니어는 Docker 를 이해하고 다룰 수 있어야 합니다. 머신러닝 엔지니어가 Docker 를 다루고 이해할 수 있도록 본 문서에서는 로컬 환경에서 실행되는 스크립트를 작성한 후 이를 Docker 환경에서 실행하는 순서로 진행됩니다.
이 문서를 학습하는 방법
Architecture
본 문서에 있는 다음과 같은 구조로 작성되어 있습니다.
- 각 챕터에서 학습해야 할 목표
- 목표를 구현하기 위한 스펙 명세서
- 각 챕터의 전체 코드를 확인할 수 있는 경로
- 스펙 명세서를 작성하기 위한 코드와 그에 대한 해설
예를 들어 다음에 학습할 챕터는 아래와 같이 작성되어 있습니다.
Chapter Preview
목표
- Docker 를 이용하여 DB 서버를 생성합니다.
- 생성된 DB 의 role name 과 attributes 를 확인합니다.
스펙 명세서
- Docker 를 설치합니다.
- PostgreSQL DB 서버를 생성합니다.
- Image :
postgres:14.0
- Container name :
postgres-server
- POSTGRES_USER :
myuser
- POSTGRES_PASSWORD :
mypassword
- POSTGRES_DB :
mydatabase
- Port forwarding :
5432:5432
- Image :
- 생성된 DB 서버를 확인합니다.
psql
로 DB 에 접근하여 role name 과 attributes 확인
해당 파트의 전체 코드는 mlops-for-mle/part1/ 에서 확인할 수 있습니다.
part1
├── Dockerfile
├── Makefile
├── data_generator.py
├── data_insertion.py
├── data_insertion_loop.py
├── docker-compose.yaml
└── table_creator.py
좀 더 효율적인 학습을 위해서는 해설을 먼저 보기 보다는 스펙 명세서를 직접 구현한 뒤 설명하는 내용들을 읽는 것을 권장합니다.