繁体   English   中英

线程工作者在线程调度程序中使用多少个线程?

[英]How many threads does a dask worker use in a threaded scheduler?

当使用dask运行测试用例时,即使以多种方式指定1个worker,我也会看到400%以上的CPU使用率。 在OSX的“活动监视器”上,我看到2个进程,其中一个带有1个线程,另一个带有ThreadPool带有8个线程。 我看到2个进程,1个线程和4 single-threaded 知道所有这些线程是干什么用的吗?

相关: Dask Workers有哪些线程处于活动状态?

import dask
import dask.array as da
from dask.diagnostics import Profiler, ResourceProfiler, CacheProfiler, visualize
from multiprocessing.pool import ThreadPool

def main():
    a = da.random.random(size=(20000, 1000), chunks=(1000, 1000))
    q, r = da.linalg.qr(a)
    a2 = q.dot(r)
    out = a2.compute()


if __name__ == "__main__":
    with Profiler() as prof, ResourceProfiler(dt=0.25) as rprof:
        #with dask.config.set(pool=ThreadPool(1)):
        #with dask.config.set(num_workers=1):  # 1 worker, 400% usage
        #with dask.config.set(num_workers=1, scheduler='single-threaded'):  # 1 worker, 400% usage
        with dask.config.set(pool=ThreadPool(1)):  # 1 worker, 400% usage
            main()
    visualize([prof, rprof])

编辑:如果我注释掉事件探查器和ThreadPool导入,则在指定num_workers=1, scheduler='single-threaded'后,我得到了1个具有4个线程的进程。

Dask一次只运行一个任务,但是这些任务可以在内部使用多个线程。 就您而言,这可能是因为您的BLAS / LAPACK实现是多线程的。

您可能可以使用OMP_NUM_THREADS=1这样的环境变量来控制它。 根据您的BLAS实施,还有更多特定的环境变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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