"Too many memory regions" Dask 错误

"Too many memory regions" error with Dask

在将 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 依次启动许多线程并行运行。因此,如果您有四个内核,那么您最终可能会有 16 个线程都在尝试工作。这可能会导致性能不佳。 OpenBLAS 会智能地识别这种情况并向您发出警告。不幸的是,它警告你的机制是失败。

设置OMP_NUM_THREADS=1告诉OpenBLAS一次只使用一个线程。这将有助于避免争用,但在不与 Dask 或 Joblib 等其他库并行时可能会导致性能下降。