[英]How to specify number of workers in Dask.array
假设您要指定Dask.array中的worker数量,如Dask文档所示,您可以设置:
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
worker,但是如果我增加矩阵大小,则突然会创建数十个worker,如图所示。
因此,我怎样才能要求Dask仅使用num_workers
工人来解决问题?
使用线程调度程序时,Dask不会产生任何新进程。 相反,它将在您的主要流程中运行所有内容。
但是,这并不能阻止您的函数自己生成进程。 正如Mike Graham在评论中指出的那样,您应谨慎混合使用诸如Dask之类的并行解决方案和诸如MKL或OpenBLAS之类的并行BLAS实现。 这会损害性能。 通常最好将两个库之一设置为每个调用使用一个线程。
我仍然很困惑,为什么您会看到多个python进程。 就我所知,线程式Dask和MKL都不会创建新的计算过程。 但是,鉴于您从限制MKL线程数方面取得了积极的成果,自从我上次进行检查以来,MKL可能已经发生了变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.