假设要指定磁盘阵列,如Dask documentation所示,您可以设置:
dask.set_options(pool=ThreadPool(num_workers))
这在我运行过的一些模拟中非常有效,例如montecarlo的,但是对于一些线性代数操作,Dask似乎覆盖了用户指定的配置,例如:
^{pr2}$如果我用一个小的矩阵大小运行这个程序,它显然只使用num_workers
个worker,但是如果我增加矩阵的大小,它会突然创建十几个worker,如图所示。
那么,我怎样才能请求Dask只使用num_workers
工人来解决问题呢?在
使用线程调度程序时,Dask不会产生任何新进程。相反,它运行主进程中的所有内容。在
但是,这并不能阻止函数生成进程本身。正如mikegraham在评论中指出的那样,在混合使用类似Dask的并行解决方案和MKL或OpenBLAS这样的并行BLAS实现时应该小心。这会损害性能。通常最好将两个库中的一个设置为每次调用使用一个线程。在
我仍然不明白为什么会看到多个python进程。据我所知,线程Dask和MKL都没有为计算创建新的进程。然而,考虑到您通过限制MKL线程的数量而得到的积极结果,也许自从我上次使用MKL签入以来,MKL已经改变了。在
相关问题 更多 >
编程相关推荐