MLflow 사용하기 (1)
포스트
취소

MLflow 사용하기 (1)

MLflow

많은 학습을 반복해서 수행하고, 모델 구조를 변경하고 하다보면 체계화된 학습 관리의 필요성이 느껴집니다.

이전에는 직접 모델 구조를 디렉터리 별로 나눠서 관리하고, 출력 weight를 저장하고, 결과들을 수기로 기록하는 방식을 많이 이용했습니다. 물론 이에따라서 관리 리소스가 너무 많아지기도 했습니다.

이를 쉽게 관리하기 위해서 찾아보던중 MLflow의 Tracking 기능이 눈에 들어와서 실제 적용하고 테스트한 기록을 작성해보려고 합니다.

MLflow는 머신러닝 라이프사이클을 관리하는 오픈소스 플랫폼입니다.

기능적으로 보면 크게 아래 4가지로 분류됩니다.

우선은 간단하게 MLflow docs에서 제공하고 있는 Quickstart를 통해서 간단히 사용법을 알아보겠습니다.

모든 과정은 python기반으로 진행하겠습니다.

QuickStart

설치

설치는 매우 간단합니다.

1
pip install mlflow

mlflow-skinny를 이용하면 좀더 가볍게 실행할 수 있습니다. 다만 기능에 따라서 필요한 패키지를 추가로 설치해주어야 합니다.

mlflow github 리포지토리를 받아보면 여러 예제들을 확인할 수 있습니다.

1
git clone https://github.com/mlflow/mlflow

Tracking API 사용하기

사용법은 정말 심플합니다. 아래의 코드처럼 간단하게 로깅 방식으로 데이터를 기록할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import os
from random import random, randint
from mlflow import log_metric, log_param, log_artifacts

if __name__ == "__main__":

		mlflow.set_tracking_uri('http://{my_ip}:5000')
		mlflow.set_experiment("face_detection")

    # Log a parameter (key-value pair)
    log_param("param1", randint(0, 100))

    # Log a metric; metrics can be updated throughout the run
    log_metric("foo", random())
    log_metric("foo", random() + 1)
    log_metric("foo", random() + 2)

    # Log an artifact (output file)
    if not os.path.exists("outputs"):
        os.makedirs("outputs")
    with open("outputs/test.txt", "w") as f:
        f.write("hello world!")
    log_artifacts("outputs")

공식 퀵스타트와 다른 점은 mlflow.set_tracking_uri('http://{my_ip}:5000')를 지정했다는 점인데 아래와 같은 클라이언트 서버 구조로 테스트 하였습니다. 추후 포스트에서 좀 더 자세하게 세팅한 기록을 해보겠습니다. (관련 링크)

graph LR
	A(client)

	subgraph server
		B(mlflow server)
	end 	
	A -.- B


Tracking UI 확인하기

이제 웹을 통해서 기록한 내용을 확인할 수 있습니다. http://localhost:5000로 접속하면 mlflow ui를 확인할 수 있습니다.

1
mlflow ui


MLflow 프로젝트 실행해보기

mlflow에는 project라고 하는 패키지가 있습니다. 쉽게 모델을 재학습하고 파라미터 등을 바꿔가며 설정할 수 있습니다. 또한 관련된 의존성등이 명시되어있어서 손쉽게 다룰 수 있습니다.

일단 기존에 사용하던 프로젝트가 있으면 다시 패킹하기 복잡할 것 같아서 테스트 정도만 진행해보았습니다.


위에서 받았던 mlflow 리포를 살펴보면 mlflow/examples/sklearn_elasticnet_wine 위치에서 mlflow의 사이킷런 모델 프로젝트를 볼 수 있습니다.

아래처럼 CLI툴을 이용해서 디렉터리의 프로젝트를 바로 실행하거나, 깃허브 리포 주소로 실행시킬 수 있습니다.

1
2
3
4
5
// directory
mlflow run sklearn_elasticnet_wine -P alpha=0.5

// github repo
mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=5.0

아래의 오류에서도 말하지만 mlflow 리포에서 tracking ui가 제대로 실행되지 않는 현상이 발생해서 새로운 디렉터리를 만들고 해당 위치에 sklearn_elasticnet_wine 프로젝트를 옮겨주어서 테스트 진행하였습니다.

mac에서는 env관련 오류가 많이 발생하여 pyenv, virtualenv를 따로 설치하였습니다.


모델 서빙하기

추가적으로 MLflow는 모델을 서빙하는 기능도 가지고 있습니다. 하지마 전 serving은 scale up과 관리에서 좀더 상세하게 할 필요성이 있어서 살펴보지는 않았습니다. 추가적인 내용이 궁금하면 serve를 살펴보면 좋을것 같습니다.

추가적으로 배포와 관련된 기능도 있는데 링크를 살펴보면 좋을듯 합니다. 기회가 되면 추후 포스팅에서 알아보겠습니다.


세팅하면서 마주했던 오류들

서버 세팅후 외부 접속 허용

다른 웹서버처럼 hostport 지정이 가능하다. 0.0.0.0으로 변경하여 외부 접속을 허용할 수 있다.

gunicorn을 기반으로 돌아가고 있는것 같다.

MLflow ui 접속 불가

mlflow ui를 실행시 아래와 같은 문구가 뜨면서 웹 접속이 안되는 현상이 발생.

1
2
3
4
5
6
7
8
9
10
11
Unable to display MLflow UI - landing page (index.html) not found.

You are very likely running the MLflow server using a source installation of the Python MLflow
package.

If you are a developer making MLflow source code changes and intentionally running a source
installation of MLflow, you can view the UI by running the Javascript dev server:
https://github.com/mlflow/mlflow/blob/master/CONTRIBUTING.md#running-the-javascript-dev-server

Otherwise, uninstall MLflow via 'pip uninstall mlflow', reinstall an official MLflow release
from PyPI via 'pip install mlflow', and rerun the MLflow server.

mlflow test용 main directory를 만들고 해당 위치해서 mlflow ui 실행했더니 문제없이 시작되었음.

→ mlflow 공식 repository 상에서 실행할때만 문제가 발생하였는데 관련 설정파일들에 의해서 발생한 충돌이 아닐까 예상하고 있음.

log_artifact 사용시 원격 directory 권한 문제발생

로컬에서 분리된 서버로 artifact를 남기려고하니 아래와 같은 오류 발생.

1
2
3
4
log_artifact('file_name')
~

OSError: [Errno 45] Operation not supported: '/home/my_user'

해당 이슈에서 새로운 Experiments를 만들어서 테스트하면 정상동작한다고 함 → 정상동작 확인.

Experiment 생성시 기본적으로 artifacts storage가 자동으로 mlflow-artifacts:/~~ 지정되게 되는데 mlflow ui 명령어를 실행한 위치의 ./mlruns에 저장되게 된다. 링크에서 자세한 정보를 확인할 수 있다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

data pipeline (workflow scheduler)

MLflow 사용하기 (2)