首页 > 解决方案 > 在集群上应用 Scikit-learn 时对数据位置的困惑(Dask)

问题描述

我目前正在通过 dask 实现从单台机器到 Slurm 集群的机器学习(Scikit-Learn)。根据一些教程(例如https://examples.dask.org/machine-learning/scale-scikit-learn.html),使用 job_lib.parallel_backend('dask') 非常简单。但是,读取数据的位置让我感到困惑,并且没有任何教程提到它。我应该使用 dask.dataframe 读入数据以确保它被传递到集群,或者我是否只是使用 pd.dataframe 读入它并不重要(然后数据存储在我运行的机器的 RAM 中木星笔记本)?

非常感谢你。

标签: scikit-learndaskslurmdask-dataframe

解决方案


如果您的数据足够小(在教程中),并且预处理步骤相当简单,那么可以使用 pandas 读取。这会将数据读入您的本地会话,而不是任何 dask 工作人员。一旦你调用with joblib.parallel_backend('dask'),数据将被复制到每个工作进程,scikit 工作将在那里完成。

如果您的数据很大或者您有密集的预处理步骤,最好使用 dask “加载”数据,然后尽可能使用 dask 的内置预处理网格搜索。在这种情况下,由于 dask 的惰性执行范式,数据实际上将直接从工作人员加载。Dask 的网格搜索还将缓存交叉验证的重复步骤,并可以极大地加快计算速度。更多信息可以在这里找到:https ://ml.dask.org/hyper-parameter-search.html


推荐阅读