docker - 无法码头化 mlflow
问题描述
在对 mlflow 进行 dockerizing 时,由于在 mlflow ui 中创建了 .trash ,因此出现错误,因为“不存在实验”
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
解决方案
你可以使用这个 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,我们可以通过设置 env 变量 MLFLOW_TRACKING_URI 来记录执行。
MLFLOW_TRACKING_URI=http://localhost:5000 python example.py
此外,最好- ./data:/data
在第一次运行时删除,在不挂载的情况下进行调试,以及建议的 dockerfile,您可能需要根据需要挂载 ENV 中提到的不同路径。
推荐阅读
- python - 无法为 Python 导入 Sklearn 库
- python - 当目标标签只有 0 和 1 时,如何对深度神经网络进行监督训练?
- c# - C# 无法通过换行符分割字符串\n
- python - 在熊猫数据框的标题行之前添加具有 excel countif 条件的行
- javascript - 为什么数组的相应部分在我的代码中不匹配?
- rust - 如何将“无”值传递给 rust 中的异步函数
- python - python参数文档字符串中的小于号未显示在PyCharm中
- syslog - Rsyslog 解析问题 - 发送到 Rsyslog 的 syslog 消息中没有标头
- javascript - React Typescript - 显示当前未显示的隐藏 Div
- google-drive-api - 如何在我的谷歌驱动器中获取 PDF 文档的 URL 以用作 twilio 传真的 MediaUrl