当使用Dask与Dask数组时,我突然得到以下错误,我的内核死了/重启。
控制台说:
BLAS : Program is Terminated. Because you tried to allocate too many memory regions
我正在使用OpenBLAS在Mac上使用Anaconda。有什么想法吗?
注意:这个问题是通过其他方式提供给我的,我在此重复以供将来参考
答案 0 :(得分:2)
Dask和OpenBLAS都试图同时进行并行化。这会触发OpenBLAS中的检查,从而导致硬故障。避免这种情况的一种简单方法是设置以下环境变量:
export OMP_NUM_THREADS=1
Dask多次并行调用OpenBLAS函数(通过NumPy)。 OpenBLAS反过来启动许多线程并行运行。因此,如果您有四个核心,那么最终可能会有十六个线程尝试完成工作。这可能会导致性能下降。 OpenBLAS智能识别这种情况并向您发出警告。不幸的是,它警告你的机制是努力失败。
设置OMP_NUM_THREADS=1
告诉OpenBLAS一次只使用一个线程。这有助于避免争用,但如果不与其他库(如Dask或Joblib)并行化,可能会导致性能降低。