【问题标题】:Implementing Dask scheduler and workers on Docker containers在 Docker 容器上实现 Dask 调度程序和工作程序
【发布时间】:2021-04-07 09:40:43
【问题描述】:

我需要运行一个具有多个并行进程的 scikit-learn RandomForestClassifier。为此,我正在考虑使用 N 个工作人员实现 Dask 调度程序,其中调度程序和每个工作人员在单独的 Docker 容器中运行。

同样在单独的 Docker 容器中运行的客户端应用程序将首先连接到调度程序并使用 with joblib.parallel_backend('dask'): 启动 scikit-learn 进程。

用于训练机器学习模型的数据存储在客户端应用程序 Docker 容器中的 parquet 中。让工作人员访问数据的最佳做法是什么?数据是否应该位于其他地方,在共享目录中?

【问题讨论】:

    标签: python docker dask parquet dask-distributed


    【解决方案1】:

    由于 Apache Parquet 是基于文件系统的,这完全取决于您正在构建的架构,这意味着您的项目是在单个服务器上运行还是分布在多个服务器上。

    如果您在单个服务器上运行,那么在容器之间简单共享 docker volume,甚至在本地文件存储上进行公共挂载都可以完成这项工作。

    另一方面,如果您尝试在多个服务器上设置分布式训练,那么您将需要某种类型的文件服务器来处理文件。

    共享文件的一种简单方法是通过NFS 服务器,其中一个常用的图像是erichough/nfs-server。您需要使用此容器来export 存储文件的本地文件夹,您需要在其余服务器上使用mount fs

    【讨论】:

    • 假设有一个服务器拥有所有这些容器,每个工作人员将从文件系统加载数据?每个工作人员如何知道要加载/处理的数据部分?
    • 您可以像this example 那样使用Apache Parquet 对它们进行分区,然后像this example 那样将每个分区加载到容器中的数据帧中
    • 我如何告诉工人他们需要做什么?我的代码在客户端应用程序中,如何告诉worker执行哪个代码?
    • 这也取决于,如果你有静态模型,模型将在工作容器中,如果你有动态模型(每次训练都会改变),你将与文件一起共享你的代码并运行它来自容器。还有像 DataikuKubeflow 这样的工具可以自动化所有这些“基础设施”工作
    • 我有一个静态模型,唯一改变的是数据,所以我需要了解如何在工作容器中设置代码,任何指向那个的链接?我找不到任何东西。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多