&引用;“内存区域过多”;Dask错误

&引用;“内存区域过多”;Dask错误,dask,openblas,Dask,Openblas,当将Dask与Dask阵列一起使用时,我突然出现以下错误,我的内核死机/重新启动 控制台显示: BLAS : Program is Terminated. Because you tried to allocate too many memory regions 我在mac上用Anaconda和OpenBLAS。有什么想法吗 注意:这个问题是通过其他方式向我提出的,我在这里重复它以供将来参考简短回答 Dask和OpenBLAS都试图同时并行化。这会触发OpenBLAS中的检查,从而导致硬故障。

当将Dask与Dask阵列一起使用时,我突然出现以下错误,我的内核死机/重新启动

控制台显示:

BLAS : Program is Terminated. Because you tried to allocate too many memory regions
我在mac上用Anaconda和OpenBLAS。有什么想法吗

注意:这个问题是通过其他方式向我提出的,我在这里重复它以供将来参考

简短回答 Dask和OpenBLAS都试图同时并行化。这会触发OpenBLAS中的检查,从而导致硬故障。避免这种情况的一种简单方法是设置以下环境变量:

export OMP_NUM_THREADS=1
长话短说 Dask多次并行调用OpenBLAS函数(通过NumPy)。OpenBLAS依次启动多个线程并行运行。所以,如果你有四个内核,那么你可能会有十六个线程都在尝试工作。这可能会导致性能不佳。OpenBLAS智能地识别这种情况并警告您。不幸的是,它警告你的机制是努力失败

设置
OMP\u NUM\u THREADS=1
告诉OpenBLAS一次只使用一个线程。这将有助于避免争用,但如果不与其他库(如Dask或Joblib)并行,可能会导致性能降低