ML OPS/Experiment Management

[ML OPS] mlflow 로컬에서 사용해보기

seokhyun2 2022. 6. 22. 21:00

mlops를 위한 여러가지 플랫폼이 나오고 있는데, 오늘은 mlflow에 대해서 한번 간단하게 사용해보도록 하겠습니다.

오늘은 로컬에서 사용해볼 예정이므로 편하게 사용할 수 있도록 아래 이미지와 같이 pycharm에서 venv를 생성해서 환경을 세팅해보겠습니다.

여기서 mlflow를 설치해볼텐데, 설치는 아주 쉽습니다.

아래 명령어와 같이 pip를 활용하여 설치하시면 됩니다.

pip install mlflow

 

ui를 바로 간단하게 볼 수 있는 아래 명령어를 실행해보도록 하겠습니다.

mlflow ui

 

그러면 http://127.0.0.1:5000 이라는 링크를 보여줄텐데 클릭하면 아래와 같은 web ui를 볼 수 있습니다.

 

pycharm으로 돌아가서 확인해보면, 아래 이미지와 같이 mlruns라는 폴더가 생성되어 있을텐데 눈치 빠른 분들은 아셨겠지만 mlflow를 로컬에서 사용하는 경우에는 모든 정보를 로컬에 파일로 저장하게 되는데 mlruns가 바로 활용되는 폴더입니다.

 

그러면 mlflow를 이제 한번 활용을 해보도록 하겠습니다.

아래의 예제 코드는 mlflow에 실험을 기록해보는 예제인데요.

# example.py
from mlflow import log_metric, log_param, log_artifact

if __name__ == '__main__':

    log_param("param", 1)

    log_metric("metric", 1)
    log_metric("metric", 2)
    log_metric("metric", 3)

    out_file_name = "output_file.txt"
    with open(out_file_name, "w") as f:
        f.write("content")
    log_artifact(out_file_name)

 

이 예제를 실행한 후에, 다시 mlflow ui를 확인해보면 실험이 하나 생긴 것을 볼 수 있고 눌러서 보면 아래와 같은 화면을 볼 수 있습니다.

 

log_param으로 실험에 대한 parameter를 기록해두고, log_metric으로는 accuracy 혹은 loss 같은 metric을 기록하여 차트로도 볼 수 있게 제공해주고, log_artifact는 학습된 모델과 같은 파일을 보관하게 됩니다.

 

mlflow를 로컬에서 실행했기 때문에 모두 파일로 관리되고 mlruns 디렉토리 밑에 보관된다고 위에서 설명했었는데, mlflow를 서버로 실행하는 경우에는 파일이 아니라 DB를 활용할 수 있게 제공되며 artifact는 클라우드 스토리지도 활용할 수 있게 제공되고 있습니다.

좀 더 구체적으로 DB의 경우에는 내부적으로 sqlalchemy를 활용하고 있기 때문에, sqlalchemy로 연동할 수 있는 DB engine은 모두 활용할 수 있고, artifact는 boto library를 활용하여 s3와 연동할 수 있습니다.

 

실험에 대해서 기록을 하기에는 매우 편한 ui를 제공하고 있고 그 외에도 서빙과 같은 기능도 제공한다고 하니 mlflow 한번쯤 써보시면 좋을 것 같습니다.