繁体   English   中英

如何在Dask.array中指定工人数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM