"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 等其他库并行时可能会导致性能下降。
在将 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 等其他库并行时可能会导致性能下降。