├── Dockerfile ├── README.md ├── docker-compose.yml └── requirements.txt /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3-slim 2 | 3 | WORKDIR /usr/src/app 4 | 5 | COPY requirements.txt ./ 6 | RUN pip install --no-cache-dir -r requirements.txt 7 | 8 | CMD mlflow server \ 9 | --backend-store-uri ${BACKEND_URI} \ 10 | --default-artifact-root ${ARTIFACT_ROOT} \ 11 | --host 0.0.0.0 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MLflow tracking server с нормальными хранилищами 2 | 3 | > Вдохновлено [этим](https://github.com/9dogs/mlflow-minio-test) 4 | 5 | **Ссылочки:** 6 | - [MinIO docs](https://docs.min.io/) 7 | - [MLflow docs](https://mlflow.org/docs/latest/index.html) 8 | - [PostgreSQL on DockerHub](https://hub.docker.com/_/postgres) 9 | 10 | **Что делаем:** 11 | 1. `docker-compose up -d` 12 | 2. на MinIO создать bucket с именем `mlflow-artifacts`. Можно в браузере, на [127.0.0.1:9000](http://127.0.0.1:9000) (один раз нужно, дальше сохранится в volume) 13 | 3. при обращении к MLflow из питона нужно определять переменные среды: 14 | * MLFLOW_S3_ENDPOINT_URL=http://127.0.0.1:9000 15 | * ARTIFACT_ROOT=s3://mlflow-artifacts/ 16 | * AWS_ACCESS_KEY_ID=mlflow_access_key 17 | * AWS_SECRET_ACCESS_KEY=mlflow_secret_key 18 | 19 | > _Шаг 3 нужен потому, что клиент напрямую в MinIO долбится. А MLflow-сервер туда смотрит только потом, для отображения всякого_ 20 | 21 | **Получаем:** 22 | * [MinIO](http://127.0.0.1:9000) 23 | * [MLflow](http://127.0.0.1:5000) 24 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | services: 4 | postgres: 5 | image: postgres:latest 6 | environment: 7 | - "POSTGRES_USER=mlflow" 8 | - "POSTGRES_PASSWORD=mlflow_pass" 9 | volumes: 10 | - postgres_data:/var/lib/postgresql/data 11 | 12 | minio: 13 | image: minio/minio:latest 14 | ports: 15 | - "9000:9000" 16 | environment: 17 | - "MINIO_ACCESS_KEY=mlflow_access_key" 18 | - "MINIO_SECRET_KEY=mlflow_secret_key" 19 | volumes: 20 | - minio_data:/data 21 | command: server /data 22 | 23 | mlflow: 24 | build: 25 | context: . 26 | dockerfile: Dockerfile 27 | ports: 28 | - "5000:5000" 29 | environment: 30 | - "BACKEND_URI=postgresql://mlflow:mlflow_pass@postgres:5432" 31 | - "MLFLOW_S3_ENDPOINT_URL=http://minio:9000" 32 | - "ARTIFACT_ROOT=s3://mlflow-artifacts/" 33 | - "AWS_ACCESS_KEY_ID=mlflow_access_key" 34 | - "AWS_SECRET_ACCESS_KEY=mlflow_secret_key" 35 | depends_on: 36 | - postgres 37 | - minio 38 | 39 | volumes: 40 | postgres_data: 41 | minio_data: 42 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mlflow 2 | psycopg2-binary 3 | boto3 4 | --------------------------------------------------------------------------------