在scikit-learn的许多功能中实现了用户友好的并行化 . 例如,在 sklearn.cross_validation.cross_val_score
中,您只需在 n_jobs
参数中传递所需数量的计算作业 . 对于具有多核处理器的PC,它将非常好用 . 但是,如果我想在高性能集群中使用这样的选项(安装了OpenMPI包并使用SLURM进行资源管理)?据我所知 sklearn
使用 joblib
进行并行化,使用 multiprocessing
. 而且,据我所知(例如,Python multiprocessing within mpi)Python程序与 multiprocessing
并行化,易于扩展整个MPI架构和 mpirun
实用程序 . 我可以使用 mpirun
和 n_jobs
参数在几个计算节点上传播 sklearn
函数的计算吗?
1 回答
SKLearn使用Joblib管理其并行性 . Joblib可以为其他分布式系统(如dask.distributed或IPython Parallel)交换多处理后端 . 有关详细信息,请参阅
sklearn
github页面上的this issue .使用带有Dask.distributed的Joblib的示例
代码取自上面链接的问题页面 .
这要求您在群集上设置
dask.distributed
调度程序和工作程序 . 一般说明可在此处获取:http://distributed.readthedocs.io/en/latest/setup.html使用带有ipyparallel的Joblib的示例
代码取自同一问题页面 .
Note: 在上面两个示例中,
n_jobs
参数似乎都不重要了 .使用SLURM设置dask.distributed
对于SLURM,最简单的方法是在本地运行
dask-scheduler
然后使用SLURM提交许多指向此过程的
dask-worker
作业 .(我实际上并不了解SLURM,所以上面的语法可能不正确,希望意图明确)
直接使用dask.distributed
或者,您可以设置dask.distributed或IPyParallel集群,然后直接使用这些接口来并行化您的SKLearn代码 . 以下是SKLearn和Joblib开发人员Olivier Grisel的示例视频,正是在柏林PyData上做的那样:https://youtu.be/Ll6qWDbRTD0?t=1561
试试dklearn
您还可以尝试实验
dklearn
包,其中包含与scikit-learn API兼容的RandomizedSearchCV
对象,但在Dask之上进行计算实现https://github.com/dask/dask-learn