Dask中“太多内存区域”错误

时间:2017-07-13 16:21:32

标签: dask openblas

当使用Dask与Dask数组时,我突然得到以下错误,我的内核死了/重启。

控制台说:

BLAS : Program is Terminated. Because you tried to allocate too many memory regions

我正在使用OpenBLAS在Mac上使用Anaconda。有什么想法吗?

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

1 个答案:

答案 0 :(得分:2)

简答

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

export OMP_NUM_THREADS=1

长答案

Dask多次并行调用OpenBLAS函数(通过NumPy)。 OpenBLAS反过来启动许多线程并行运行。因此,如果您有四个核心,那么最终可能会有十六个线程尝试完成工作。这可能会导致性能下降。 OpenBLAS智能识别这种情况并向您发出警告。不幸的是,它警告你的机制是努力失败。

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