scikit-learn - 在集群上应用 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 中木星笔记本)?
非常感谢你。
解决方案
如果您的数据足够小(在教程中),并且预处理步骤相当简单,那么可以使用 pandas 读取。这会将数据读入您的本地会话,而不是任何 dask 工作人员。一旦你调用with joblib.parallel_backend('dask')
,数据将被复制到每个工作进程,scikit 工作将在那里完成。
如果您的数据很大或者您有密集的预处理步骤,最好使用 dask “加载”数据,然后尽可能使用 dask 的内置预处理和网格搜索。在这种情况下,由于 dask 的惰性执行范式,数据实际上将直接从工作人员加载。Dask 的网格搜索还将缓存交叉验证的重复步骤,并可以极大地加快计算速度。更多信息可以在这里找到:https ://ml.dask.org/hyper-parameter-search.html
推荐阅读
- pycurl - 了解python中curl支持哪些协议的最佳方法是什么?
- react-native - 调用我的操作时根本没有调用我的 saga 函数?
- pandas - 多索引中的键错误
- akka-http - akka http 完成或基于未来的重定向
- python - Python for-loop不会在stirng中迭代过去的第一个字符
- ios - 为什么我的导航栏在 iOS 13 中是全白的?
- opengl - 延迟管道中的体素锥跟踪?
- ios - 不寻常的 CollectionView moveItem 行为
- python - 我应该从哪里开始使用 webrtc 将 hololens 流式传输到 python 服务器?
- r - 如何在 R 中按值平均秒分组