MLflow를 한번 튜토리얼 개념으로 한번 다루어보도록 하겠습니다. 환경은 이전부터 쓰던 python 가상 환경 그대로 사용할 예정입니다.
- ubuntu 20.04
- conda
- python 3.8.6
- pip3
1. 설치
설치방법은 상당히 간단합니다. mlflow-tutorial이라는 폴더 생성 후 이용하겠습니다.
mkdir mlflow-tutorial
cd mlflow-tutorial
# conda 가상환경 세팅
# python 버전 확인
python -V
pip install mlflow==1.20.2
mlflow --version
# mlflow, version 1.20.2
2. MLflow tracking server 띄우기
아래 명령어처럼 help를 이용하면 여러 옵션이 있습니다. UI (dashboard)의 default url 은 http://localhost:5000이고, 5000 포트가 열려있는지 확인해라는 내용이 있습니다. 또한 production 용으로는 mlflow ui 대신 mlflow server를 사용하라는 안내가 출력됩니다.
저는 local에서 띄울 예정이고 사용자가 한명이기 때문에 더 가벼운 "mlflow ui"로 tracking server를 띄우겠습니다.
mlflow ui
터미널을 켜둔 상태에서, http://localhost:5000 으로 접속합니다. 터미널이 꺼지면 서버도 종료되기 때문입니다. 그림 오른쪽처럼 화면이 나타나면, 정상적인 MLflow tracking server가 생성됩니다.
다른 터미널을 열어서 동일한 디렉토리로 가서 'mlruns' 디렉토리를 가서 yaml 파일을 열어보면 실험 번호 등과 같은 어떠한 메타 정보가 들어있는 것을 확인할 수 있습니다.
3. 샘플코드 한번 살펴보기
머신러닝 입문할 때 iris 데이터만큼이나 인기 많은 것이 당뇨병 데이터입니다. sklearn에서 예시로 제공해주는 다양한 예시 데이터입니다. 442명 당뇨병 환자를 대상으로 나이, 성별, bmi 등 10개의 X를 가지고 1년 뒤 당뇨병의 진행률(y)를 예측하는 문제입니다.
https://github.com/mlflow/mlflow/tree/master/examples/sklearn_elasticnet_diabetes
각자의 환경에 따라서 wget을 이용하여 src를 받아보겠습니다.
# VM 혹은 linux 사용자
wget https://raw.githubusercontent.com/mlflow/mlflow/master/examples/sklearn_elasticnet_diabetes/linux/train_diabetes.py
# Mac 사용자
wget https://raw.githubusercontent.com/mlflow/mlflow/master/examples/sklearn_elasticnet_diabetes/osx/train_diabetes.py
다운 받아본 train_diabetes.py를 한번 살펴보면 아래와 같습니다.
우리가 알고 있는 학습 코드와 다를 것이 없습니다. 사용하는 모델은 ElasticNet입니다. 우리가 주목해야 할 부분은 mlflow와 연관된 부분입니다. 코드를 내려가다 보면 log 관련된 부분이 있습니다.
4. 샘플코드 실행해보기
한번 . py를 실행해보면 metric이 출력이 됩니다.
# mlflow ui 를 수행한 디렉토리와 같은 디렉토리로 이동
cd mlflow-tutorial
# example 코드를 실행 후 mlflow 에 기록되는 것 확인
python train_diabetes.py
ui를 한번 살펴보겠습니다. 모델 관련 meta 정보, pkl 파일들이 저장된 것을 확인할 수 있습니다.
다양한 parameter를 테스트해서 mlflow에서 확인해보겠습니다. 저는 4개를 추가적으로 실행을 하였습니다.
python train_diabetes.py 0.05 1.0
python train_diabetes.py 0.05 0.01
python train_diabetes.py 0.5 0.8
python train_diabetes.py 0.8 1.0
5. MLflow 실험 데이터 저장 방식
0, 1 이런 부분은 experiments id를 뜻합니다.
cd mlruns/0
ls
# (각각의 알 수 없는 폴더명은 mlflow 의 run-id 를 의미함)
# 아무 디렉토리에나 들어가보겠습니다.
cd <특정 디렉토리>
ls
# artifacs, metrics, params, tag 와 같은 디렉토리가 있고
# 그 안에 실제 mlflow run 의 메타 정보가 저장된 것을 확인할 수 있음
다음 글에서는 Automatic Logging 관련 글로 찾아뵙겠습니다.
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'AI > MLOps' 카테고리의 다른 글
[패스트캠퍼스 챌린지 18일차] Model Serving 개념 (0) | 2022.02.10 |
---|---|
[패스트캠퍼스 챌린지 17일차] MLflow 튜토리얼 (2) (0) | 2022.02.09 |
[패스트캠퍼스 챌린지 15일차] Model Management 개념 (0) | 2022.02.07 |
[패스트캠퍼스 챌린지 14일차] DVC Tutorial (0) | 2022.02.06 |
[패스트캠퍼스 챌린지 13일차] DataManagement 개념 (0) | 2022.02.05 |