我应该如何在mlflow项目中挂载docker卷?

时间:2019-07-17 14:22:29

标签: docker mlflow

我在example中所述的docker环境中使用mlflow,然后从mlflow run .开始运行。

我得到这样的输出

2019/07/17 16:08:16 INFO mlflow.projects: === Building docker image mlflow-myproject-ab8e0e4 ===
2019/07/17 16:08:18 INFO mlflow.projects: === Created directory /var/folders/93/xt2vz36s7jd1fh9bkhkk9sgc0000gn/T/tmp1lxyqqw9 for downloading remote URIs passed to arguments of type 'path' ===
2019/07/17 16:08:18 INFO mlflow.projects: === Running command 'docker run 
--rm -v /Users/foo/bar/mlruns:/mlflow/tmp/mlruns -e 
MLFLOW_RUN_ID=ef21de61d8a6436b97b643e5cee64ae1 -e MLFLOW_TRACKING_URI=file:///mlflow/tmp/mlruns -e MLFLOW_EXPERIMENT_ID=0 mlflow-myproject-ab8e0e4 python train.py' in run with ID 'ef21de61d8a6436b97b643e5cee64ae1' ===

我想将一个名为my_docker_volume的Docker卷安装到该容器  在 路径/data。因此,我想代替上面显示的docker run  使用

docker run --rm --mount source=my_docker_volume,target=/data -v /Users/foo/bar/mlruns:/mlflow/tmp/mlruns -e MLFLOW_RUN_ID=ef21de61d8a6436b97b643e5cee64ae1 -e MLFLOW_TRACKING_URI=file:///mlflow/tmp/mlruns -e MLFLOW_EXPERIMENT_ID=0 mlflow-myproject-ab8e0e4 python train.py

我看到原则上我可以在没有安装卷的情况下运行一次,然后 复制docker run ...并添加--mount source=my_volume,target=/data,但是  我宁愿使用类似的

mlflow run --mount source=my_docker_volume,target=/data .

但这显然不起作用,因为--mount不是用于 mlflow run。 那么挂载docker卷的推荐方式是什么?

更新2019/07/18

为避免上述问题并简化卷安装,我现在使用三个交互的Docker容器运行实验。一种运行机器学习代码,一种运行mlflow服务器,另一种运行postgresql服务器。我密切关注此walk-through article进行设置。它运作良好,并且docker-compose使批量安装变得容易。指标,参数和元数据存储在安装到本地持久卷的数据库中。工件记录在目录/mlflow中。但是,UI仅显示指标和参数。即使将default-artifact-root设置为/mlflow,也无法在UI中显示工件。这是一个单独的问题。

2 个答案:

答案 0 :(得分:1)

mlflow问题跟踪器出现了类似的问题,请参阅“ Access large data from within a Docker environment”。摘录说:

  

但是,MLFlow Docker环境当前只能访问存储在存储库或映像中的数据,或者每次运行都必须下载大型数据集。

     

...

     

一种潜在的解决方案是使用户能够将卷装入卷(例如,包含数据的本地目录)到Docker容器中

看起来这是其他人也会从中受益的功能。最好的做法是为安装提供支持,或者跟踪问题,直到其他人实施为止。

为什么首先需要安装/data文件夹?还有一个问题,PR包含与在主机上的自定义位置存储工件有关的修复程序,这可能是您要找的东西吗?

答案 1 :(得分:0)

最后,为了避免上述问题并简化卷安装,我现在使用三个交互的Docker容器运行实验。一种运行机器学习代码,一种运行mlflow服务器,另一种运行postgresql服务器。我密切关注此walk-through article进行设置。它运作良好,并且docker-compose使批量安装变得容易。指标,参数和元数据存储在安装到本地持久卷的数据库中。工件记录在目录/mlflow中,或者如果您愿意,也记录在Docker卷中。

注意:引用的演练文章中有错字

docker-compose.yml中不应该

volumes:
  - ./postgres-store:/var/lib/postgresql/data

它将绑定名为postgres-store的本地文件夹。 相反,要挂载Docker卷postgres_store,应使用

volumes:
  - postgres-store:/var/lib/postgresql/data