【问题标题】:Confusion about the data location when applying Scikit-learn on cluster (Dask)在集群上应用 Scikit-learn 时对数据位置的困惑(Dask)
【发布时间】:2020-07-05 13:34:50
【问题描述】:

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

非常感谢。

【问题讨论】:

  • 我不确定我是否理解正确。但是,如果数据在您的调度程序上,您使用dask.dataframe 读取它并且它分散在集群上。否则,如果您的数据被分区(例如在 S3 上)再次使用 dask 读取每个工作人员都会获得一个分区。
  • 对我来说,通过 dask.dataframe 读取数据更有意义。就像你说的那样,数据将分散在进行计算的集群上。但是,本教程让我感到困惑,因为它使用简单的 pd.dataframe 而不是 dask.dataframe 并通过with joblib.parallel_backend('dask'): grid_search.fit(data.data, data.target) 分发它我不确定这些代码是否会自动将数据从本地分散到集群。

标签: scikit-learn dask slurm dask-dataframe


【解决方案1】:

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

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

【讨论】:

  • 谢谢!这正是我的困惑。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 2018-08-23
  • 1970-01-01
  • 2021-05-23
  • 2016-07-13
  • 2013-07-07
  • 2020-06-27
  • 2019-01-15
相关资源
最近更新 更多