Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何指定Dask.array中的工作进程数_Python_Dask - Fatal编程技术网

Python 如何指定Dask.array中的工作进程数

Python 如何指定Dask.array中的工作进程数,python,dask,Python,Dask,假设要指定Dask.array中的工作进程数,如图所示,可以设置: dask.set_options(pool=ThreadPool(num_workers)) 这在我运行的一些模拟中非常有效,例如montecarlo,但在一些线性代数操作中,Dask似乎覆盖了用户指定的配置,例如: import dask.array as da import dask from multiprocessing.pool import ThreadPool dask.set_options(pool=Th

假设要指定Dask.array中的工作进程数,如图所示,可以设置:

dask.set_options(pool=ThreadPool(num_workers)) 
这在我运行的一些模拟中非常有效,例如montecarlo,但在一些线性代数操作中,Dask似乎覆盖了用户指定的配置,例如:

import dask.array as da
import dask
from multiprocessing.pool import ThreadPool

dask.set_options(pool=ThreadPool(num_workers))
mat1 = da.random.random((size, size) chunks=chunk_size)
mat2 = da.random.random((size, size) chunks=chunk_size)
mat3 = mat1.dot(mat2)
mat3.compute()
如果我以较小的矩阵大小运行该程序,它显然只使用
num_workers
workers,但是如果我增加矩阵大小,它会突然创建十几个worker,如图所示


那么,我如何才能请求Dask仅使用
num_workers
workers来解决问题呢?

使用线程调度程序时,Dask不会产生任何新进程。相反,它运行主进程中的所有内容

但是,这并不能阻止函数本身生成进程。正如Mike Graham在评论中指出的那样,在混合使用诸如Dask之类的并行解决方案和诸如MKL或OpenBLAS之类的并行BLAS实现时应该小心。这可能会损害性能。通常最好将两个库中的一个设置为每次调用使用一个线程


我仍然不明白为什么会看到多个python进程。就我所知,线程Dask和MKL都没有创建新的计算过程。但是,鉴于您限制MKL线程数量的积极结果,自我上次使用MKL签入以来,MKL可能已经发生了变化。

您是否针对线程BLAS编译numpy?如果是这样,每个dask工作者可能会产生自己的工作者
pstree
可能会帮助您更好地了解生成层次结构。是的!我用的是Intelpython,所以numpy链接到MKL,你是对的!我限制了MKL线程的数量,如中所示,问题就解决了。非常感谢你!