根据What threads do Dask Workers have active?,一个快活的工人拥有
在其中运行任务的线程池。
如果本质上您的计算大部分是数字运算(例如NumPy和Pandas计算)并完全释放GIL,那么建议运行具有多个线程和一个进程的dask-worker进程。这样可以降低通信成本并通常简化部署。
NumPy的内部使用MKL或OpenBLAS,在正常执行代码时,其线程数等于环境变量OPENBLAS_NUM_THREADS
或MKL_NUM_THREADS
。
这些参数和dask的计算线程如何一起工作?
答案 0 :(得分:1)
差
默认情况下,大多数现代BLAS / LAPACK实现使用的线程数与逻辑内核数一样多。 Dask将执行相同的操作(假设使用默认配置)。如果您正在执行L3 BLAS操作,那么这可能导致活动线程多于拥有核心的线程,并且总体性能会下降。
我通常设置XXX_NUM_THREADS=1
并一起使用时依靠Dask进行并行处理。