목표
- Docker Compose 를 이용하여 실제 서비스 환경과 비슷한 형태로 MLflow 서버를 띄워봅니다.
- 서비스 상황을 가정하여 MLflow 의 구성 요소들을 이해합니다.
스펙 명세서
- Docker Compose 파일에 MLflow 의 운영 정보, 모델 결과 등을 저장할 물리적인 PostgreSQL DB 서버 스펙을 정의합니다.
- POSTGRES_USER :
mlflowuser
- POSTGRES_PASSWORD :
mlflowpassword
- POSTGRES_DB :
mlflowdatabase
- Docker Compose 파일에 학습된 모델을 저장할 물리적인 저장 공간인 MinIO 서버 스펙을 정의합니다.
- MINIO_ROOT_USER :
minio
- MINO_ROOT_PASSWORD :
miniostorage
- Port forwarding :
- api:
9000:9000
- console:
9001:9001
- Docker Compose 파일에 모델과 모델의 결과들을 관리할 MLFlow 서버를 정의합니다.
- 환경 변수를 이용하여 MLflow 서버에서 앞서 띄워둔 PostgreSQL DB 와 MinIO 두 가지 서버에 접근이 가능하도록 연결합니다.
- Dockerfile
- MLflow 에 관련된 패키지가 설치된 이미지를 생성하기 위한 Dockerfile 을 정의합니다.
- MinIO 에 모델 저장을 위한 초기 버켓을 생성 하기 위해 MinIO Client 도 함께 설치되도록 합니다.
- Docker Compose
- MinIO 의 접속 정보를 AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY 환경 변수를 통해 적절하게 설정합니다.
- MinIO Client 를 설치하고, MinIO 의 초기 버켓을 생성하도록 명령어를 작성합니다.
- MLflow 서버를 띄우는 명령어를 작성합니다.
- Port forwarding :
5001:5000
- MLflow 에서는 기본값으로 5000 포트를 사용합니다.
- 하지만 실습에서 MacOS 를 사용하는 경우 AirPlay 기능이 5000번 포트를 사용하기 때문에 중복을 피하기 위해 5001번 포트를 사용합니다.
- 일반적인 경우 5000번 포트를 사용하면 됩니다.
- 정의된 스펙에 따라 서비스들을 띄웁니다.
- localhost:9001 에 접속하여 MinIO 로그인 페이지가 잘 동작하는지 확인합니다.
- localhost:5001 에 접속하여 MLflow 페이지가 잘 동작하는지 확인합니다.

[그림 3-2] MLflow Setup Diagram
1. MLflow Backend Store
1.1 Backend Store
Backend Store 란 수치 데이터와 MLflow 서버의 정보들을 체계적으로 관리하기 위한 DB 입니다. Backend Store 에는 모델의 학습 결과인 accuracy, f1-score, 모델이 학습되면서 생기는 loss, 모델 자체의 정보인 hyperparmameters 등의 수치 데이터와 run_id, run_name, experiment_name 등의 MLflow 의 메타 데이터가 저장됩니다.
이번 파트에서는 Backend Store 로 사용하기 위해 01. Database 파트에서 사용되었던 PostgreSQL DB 를 새롭게 생성하겠습니다.
1.2 PostgreSQL DB Server
PostgreSQL DB 서버의 스펙을 Docker Compose 파일에 서비스 이름, 유저 이름, 비밀번호, DB 이름을 환경변수로 설정합니다.
docker-compose.yaml
version: "3"
services:
mlflow-backend-store:
image: postgres:14.0
container_name: mlflow-backend-store
environment:
POSTGRES_USER: mlflowuser
POSTGRES_PASSWORD: mlflowpassword
POSTGRES_DB: mlflowdatabase
healthcheck:
test: ["CMD", "pg_isready", "-q", "-U", "mlflowuser", "-d", "mlflowdatabase"]
interval: 10s
timeout: 5s
retries: 5
- image :
- DB 서버에서 사용할 이미지는
postgres:14.0 입니다.
- environment :
- POSTGRES_USER : DB 에 접근하기 위한 사용자 이름입니다. 여기서는
mlflowuser 를 사용하겠습니다.
- POSTGRES_PASSWORD : DB 에 접근하기 위한 비밀번호입니다. 여기서는
mlflowpassword 를 사용하겠습니다.
- POSTGRES_DB : DB 이름을 설정합니다. 여기서는
mlflowdatabase 를 사용하겠습니다.