【问题标题】:not able to dockerize mlflow无法码头化 mlflow
【发布时间】:2020-01-09 00:19:15
【问题描述】:

在对 mlflow 进行 dockerizing 时,只会创建 .trash 因为在 mlflow ui 中,由于“不存在实验”而出现错误

dockerfile

FROM python:3.7.0

RUN pip install mlflow==1.0.0

WORKDIR /data

EXPOSE 5000

CMD mlflow server \
    --backend-store-uri /data/ \
    --default-artifact-root /data/ \
    --host 0.0.0.0

码头工人撰写:

  mlflow:
    # builds track_ml Dockerfile
    build:
      context: ./mlflow_dockerfile
    expose: 
      - "5000"
    ports:
      - "5000:5000"
    volumes: 
      - ./data:/data

【问题讨论】:

    标签: docker mlflow


    【解决方案1】:

    您可以使用这个 Dockerfile,取自 mlflow-workshop,它更通用,支持不同的 ENV 来调试和使用不同的版本。

    默认情况下,它会将工件和文件存储在 /opt/mlflow 中。可以定义以下变量:

    MLFLOW_HOME (/opt/mlflow)
    MLFLOW_VERSION (0.7.0)
    SERVER_PORT (5000)
    SERVER_HOST (0.0.0.0)
    FILE_STORE (${MLFLOW_HOME}/fileStore)
    ARTIFACT_STORE (${MLFLOW_HOME}/artifactStore)
    

    Dockerfile

    FROM python:3.7.0
    LABEL maintainer="Albert Franzi"
    
    ENV MLFLOW_HOME /opt/mlflow
    ENV MLFLOW_VERSION 0.7.0
    ENV SERVER_PORT 5000
    ENV SERVER_HOST 0.0.0.0
    ENV FILE_STORE ${MLFLOW_HOME}/fileStore
    ENV ARTIFACT_STORE ${MLFLOW_HOME}/artifactStore
    
    RUN pip install mlflow==${MLFLOW_VERSION} && \
        mkdir -p ${MLFLOW_HOME}/scripts && \
        mkdir -p ${FILE_STORE} && \
        mkdir -p ${ARTIFACT_STORE}
    
    COPY scripts/run.sh ${MLFLOW_HOME}/scripts/run.sh
    RUN chmod +x ${MLFLOW_HOME}/scripts/run.sh
    
    EXPOSE ${SERVER_PORT}/tcp
    
    VOLUME ["${MLFLOW_HOME}/scripts/", "${FILE_STORE}", "${ARTIFACT_STORE}"]
    
    WORKDIR ${MLFLOW_HOME}
    
    ENTRYPOINT ["./scripts/run.sh"]
    
    

    脚本/run.sh

    #!/bin/sh
    
    mlflow server \
        --file-store $FILE_STORE \
        --default-artifact-root $ARTIFACT_STORE \
        --host $SERVER_HOST \
        --port $SERVER_PORT
    

    启动 MLFlow 跟踪 Docker

    docker build -t my_mflow_image .
    docker run -d -p 5000:5000 --name mlflow-tracking my_mflow_image
    

    进行培训

    由于我们的 MLflow Tracking docker 暴露在 5000,我们可以登录 通过设置环境变量 MLFLOW_TRACKING_URI 来执行。

    MLFLOW_TRACKING_URI=http://localhost:5000 python example.py
    

    另外,最好在第一次运行时删除- ./data:/data,在不挂载的情况下进行调试,以及建议的dockerfile,您可能需要根据需要挂载ENV中提到的不同路径。

    【讨论】:

    • 我尝试使用相同的方法,但我无法看到机器学习模型登录localhost:5000/#
    • 在前台运行docker run -it -p 5000:5000 --name mlflow-tracking my_mflow_image 然后打开浏览器
    • 我正在使用 docker-compose yml 文件对其进行 docker 化,因为它还有其他 docker-compose yml: python_ml: # builds Python_ML Dockerfile build: ./python_ml ports: - "8181:8181"卷:- ./data:/data mlflow:# 构建 track_ml Dockerfile 构建:./mlflow_dock 端口:-“5000:5000”
    • 可以使用 docker-compose,但我建议使用上面的脚本运行以简化调试,验证它然后使用 docker-compose 运行
    • 重要的是要了解工件不是通过服务器代理而是直接从客户端写入存储。这意味着客户端需要访问工件存储。但是为了让您从服务器 UI 中查看工件,服务器 UI 还需要直接访问您存储它们的任何位置。
    【解决方案2】:

    Here 是一个指向 Github 的链接,我在其中将 MLflow 放在一个使用 azurite 在后台使用的 docker 中,以便稍后从中提取模型。

    作为一个简短的通知,您需要为您的脚本提供如何执行它应该保存工件的地址。您可以使用 .env 文件执行此操作或手动设置这些内容。

    set MLFLOW_TRACKING_URI=http://localhost:5000
    

    重要的是不仅要为您的 docker 提供这些信息,还要提供模型训练的脚本;)

    Here 你可以找到一个完整的教程,如何在不同的理论场景中一起使用 MLflow 和 SKlearn,因为后面也有点棘手。

    希望你能获得足够的灵感来使用它。

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      相关资源
      最近更新 更多