Python Dask线程如何与OpenBLAS/MKL/…;交互;?
据报道,dask的一名工人 要在其中运行任务的线程池 警察说 如果您的计算本质上主要是数值计算(例如NumPy和Pandas计算),并且完全释放GIL,那么建议使用多个线程和一个进程运行dask工作进程。这降低了通信成本,并且通常简化了部署 NumPy的内部使用MKL或OpenBLAS,当代码正常执行时,线程数量等于env变量Python Dask线程如何与OpenBLAS/MKL/…;交互;?,python,numpy,dask,Python,Numpy,Dask,据报道,dask的一名工人 要在其中运行任务的线程池 警察说 如果您的计算本质上主要是数值计算(例如NumPy和Pandas计算),并且完全释放GIL,那么建议使用多个线程和一个进程运行dask工作进程。这降低了通信成本,并且通常简化了部署 NumPy的内部使用MKL或OpenBLAS,当代码正常执行时,线程数量等于env变量OpenBLAS_NUM_线程或MKL_NUM_线程 这些参数和dask的计算线程是如何协同工作的?简短回答 差 更长的答案 默认情况下,大多数现代BLAS/LAPACK实
OpenBLAS_NUM_线程
或MKL_NUM_线程
这些参数和dask的计算线程是如何协同工作的?简短回答
差
更长的答案
默认情况下,大多数现代BLAS/LAPACK实现使用的线程数量与逻辑核的数量相同。Dask也会这样做(假设默认配置)。如果您正在执行L3 BLAS操作,那么这可能会导致比内核更多的活动线程,并导致性能普遍下降
我通常将XXX_NUM_THREADS=1设置为,并在同时使用两者时依赖Dask实现并行性。如果我理解,默认情况下,每个任务使用所有BLAS线程来实现并行性,但您建议设置一个变量以仅使用一个?每个Dask任务在单独的线程中运行。Dask不限制该任务/功能的功能。如果它本身使用了许多线程,那么事情就会变得效率低下。您可以按照问题中的建议,通过设置环境变量来约束大多数BLAS实现。