簡體   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