MLOps

[MLOps] 4. MLflow 시작하기 (feat.도커)

mlslly 2024. 4. 17. 18:48

1. 로컬에서 MLflow 시작하기  

 

1) 터미널에 아래 코드로 설치함 

pip3 install mlflow

 

2) 호스트에 자기 자신의 IP를 할당하라고 명령

$ mlflow server --host 0.0.0.0

 

혹시 나처럼 'ModuleNotFoundError: No module named 'pkg_resources'

에러가 나는 경우에는  setuptools를 설치해주고 그 다음 mlflow 설치 해주면 된다.

pip3 install setuptools
pip3 install mlflow

 

실행이 되면 아래 화면과 같이 작동하고,

두번째 줄의 주소 http://0.0.0.0:5000  를 통해 MLflow를 실행할 수 있다.

 

3) 주소로 웹페이지 실행 (http://0.0.0.0:5000)

주소 실행하면 mlflow 페이지 접속된 화면 확인 가능하다.


2. 도커에서 MLflow 시작하기  

 

1) MLflow Dockerfile 작성 

이제 MLflow 서버 띄울 수 있는 도커 이미지를 빌드해볼건데, 우선 도커 파일부터 작성해야 한다. 

이때 다른 도커파일이 있는 폴더 경로 말고 새로운 경로에 작성해야 한다.

나는 mkdir로 'mlflow' 폴더를 만들고 그안에 파일을 작성 및 저장했다.

 

<Dockerfile 내용>

FROM amd64/python:3.12.2-slim

RUN pip install -U pip &&\
    pip install mlflow

CMD ["mlflow","server","--host","0.0.0.0"]

 

2) MLflow 서버의 도커 이미지 빌드 

 

그리고 나서 다시 터미널로 돌아와, 도커 파일이 있는 폴더 안으로 위치 지정 후, 아래 코드 작성한다.

$ docker build -t mlflow-server .

 

실행 완료된 모습을 확인할 수 있다.

 

 

3) 도커 실행하여 MLflow 서버 실행하기?

 

마지막으로 도커를 실행하면, 두번째 줄에 위의 1.-2) 에서 봤던 그대로 mlflow 에 접속 가능한 주소를 확인 가능하다.

$ docker run mlflow-server

 

그러나 이 경우에는, 서버에 연결이 되지 않고 '사이트에 연결할 수 없음'이 뜬다.

왜냐하면 컨테이너의 네트워크가 데스크탑의 네트워크가 서로 분리되어있기 때문이다.

 

 

4) 컨테이너 포트포워딩   (==포트 매핑) ***

 

따라서 컨테이너의 특성상 컨테이너의 포트에 접근하여 mlflow 서버에 접속하기 위해서는, 

컨테이너의 네트워크 - 데스크탑의 네트워크를 서로 연결해주는 작업이 필요하다.

 

아래 코드에서, 5001은 데스크탑이 사용할 포트, 5000은 컨테이너가 사용할 포트임.

$ docker run -p 5001:5000 mlflow-server

 

 

5) 데스크탑 포트 주소로 MLflow 실행

위처럼 실행이 완료되고 나서, 이번에는 데스크탑 포트 주소인 'http://0.0.0.0:5001' 을 실행하면

아래와 같이 MLflow 페이지가 실행되는 것을 볼 수 있다!

 

 

* 프로그래머스의 마키나락스 MLOPS 강의를 참고하여 작성함

 

 

* 추가 자료 

- 컨테이너 포트포워딩 개념 상세 설명 https://tttsss77.tistory.com/155

 

도커(Docker) : 포트 포워딩 설정(포트 맵핑)하기

도커(Docker) : 포트 포워딩 설정(포트 맵핑)하기 본 글에서는 도커 컨테이너 내부에서 동작하는 서버로 컨테이너 외부에서 접속할 수 있도록 포트 포워딩(Port forwarding) 설정 또는 포트 맵핑(Port mapp

tttsss77.tistory.com