가상화란 개발을 진행 한 후 배포하는 단계에 있어, 동일한 실행 환경을 보장하기 위해서 사용하는 개념이다.
주로 호스트 머신위에 OS를 포함한 가상화 소프트웨어를 두는 VM(Virtual Machine) 방식을 사용한다.
VM의 무거움을 덜어주면서, 좀더 경량화된 프로세서의 개념을 적용시킨 Container 기법을 사용하면, 빠르고 가볍게 가상화 구현이 가능하다.
이러한 Container 기술을 쉽게 사용할 수 있도록 개발된 도구가 Docker이다.
Docker Image
Container를 실행할 때 사용할 수 있는 "Template"
Read OnlyDocker Container
Docker Image를 활용해 실행된 Instance
Writable
다른 사람이 만든 Docker Image를 이용하여, 어느 환경에서나 동일하게 실행할 수 있다.
Container Registry 원격 저장소를 이용하여, Image를 공유하고 사용할 수 있음.
- docker pull "Image name : Tag"
: 필요한 Image 다운로드
- docker images
: 다운받은 이미지 List 확인
- docker run "이미지 이름:태그"
: 이미지를 기반으로 컨테이너 생성
- docker ps
: 실행중인 컨테이너 목록 확인
- docker exec -it "컨테이너 이름(ID)" /bin/bash
: 컨테이너에 진입
- docker stop "컨테이너 이름(ID)"
: 실행중인 컨테이너를 중지
- docker rm "컨테이너 이름(ID)"
: 중지된 컨테이너 삭제
- pip freeze > requirements.txt 명령어를 통해 사용 라이브러리 list 저장
- Dockerfile 작성 및 생성
FROM 으로 베이스 Image 지정
COPY 로 로컬 내 디렉토리 및 파일을 컨테이너 내부로 복사
WORKDIR로 RUN, CMD 등을 실행할 컨테이너 내 디렉토리 지정
CMD로 이미지 실행 시 바로 실행할 명령어를 지정
- docker build "Dockerfile 경로" 명령어를 통해 이미지 Build
- docker run "이미지 이름:태그" 명령어를 통해 실행
과거 ML 시, 사용한 Parameter, Metric, Weigth File을 따로 기록하며 저장하고, 이로 인해 생긴 메모리 초과로 OOM 에러가 자주 발생 하였다.
또한, Trackig, 코드 재현, 패키징 및 배포가 어렵고 모델을 Management 하기 위한 저장소가 없었기에 많이 불편했다.
MLflow 는 이런 문제점들을 해결하여, ML 실험 및 배포를 쉽게 관리할 수 있는 오픈소스이다.
- Experiment Management & Tracking
- ML 관련 실험들을 관리하고, 각 내용들을 기록 및 저장할 수 있음
- 여러 사람이 하나의 MLflow 서버 위에서 각자 자신의 실험을 만들고 공유 가능
- 각 실험에 사용한 소스 코드, HyperParameter, Meteric, Artifact 등을 저장
- Model Registry
- MLflow로 실행한 모델을 Model Registry에 등록 가능
- Model Registry에 모델이 저장될 때마다 자동으로 버전 갱신
- Model Serving
- Model Registry에 등록한 모델을 REST API 형태로 Serving 가능
- 직접 Docker Image를 만들지 않아도 생성 가능
- MLflow Tracking
- ML 코드 실행, Logging을 위한 API
- Tracking 을 이용하여, 결과를 Local 및 Server에 저장 후 여러 결과와 비교 가능
- MLflow Project
- 머신러닝 코드를 재사용 가능하고 재현 가능한 형태로 포장
- 패키징을 위한 표준이다
- 소스 코드가 저장된 폴더라고 볼 수 있다.
- MLflow Model
- 모델은 모델 파일과 코드로 저장
- 다양한 플랫폼에서 배포가능토록 여러 도구 제공
- MLflow Registry
- MLflow Model의 전체 Lifecycle에서 사용할 수 있는 중앙 모델 저장소
MLflow 에서는 Experiment가 가장 기본 단위이다.
Experiment에서는 정해진 Metric(RMSE, MSE, MAE, Acc)으로 모델을 평가하고, 하나의 Experiment는 여러 Run(실행)을 가진다.
Run에서 Log 하는 것 들
MLProject는 MLflow를 사용한 코드의 프로젝트 Meta 정보를 저장
→ 프로젝트를 어떤 환경에서 어떻게 실행시킬지 정의
autolog 를 이용하여, 코드 작성 시 매번 Parameter를 명시하지 않아도 된다.
(모든 프레임워크에서 사용가능 한 것은 아님, 대표적으로 pytorch.nn.Module 사용 불가)
Tracking 과 Artifact Store Step 에서 외부 DB 서버와 스토리지 이용이 가능하다
(DB : CloudSQL, Aurora RDS / Storage : GCS, S3)