当我在PBS调度器上运行python脚本(使用Miniconda)时,我得到了标题中提到的错误。我认为numpy正在进行一些多线程/处理,但我无法阻止它这样做。我在PBS脚本中添加了以下几行:
export MKL_NUM_THREADS=1
export NUMEXPR_NUM_THREADS=1
export OMP_NUM_THREADS=1
export OPENBLAS_NUM_THREADS=1
export VECLIB_MAXIMUM_THREADS=1
为了更好地衡量,我还在main.py
中添加了以下行:
import os
os.environ["OMP_NUM_THREADS"] = "1"
os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"
os.environ["VECLIB_MAXIMUM_THREADS"] = "1"
os.environ["NUMEXPR_NUM_THREADS"] = "1"
import numpy as np # Import numpy AFTER setting these variables
但是没有用---我仍然得到同样的错误。
qsub -q <QUEUE_NAME> -lnodes=1:ppn=36 path/to/script.sh"
来源:
以下两个答案告诉您如何停止所有/大多数不需要的多线程/多处理:
https://stackoverflow.com/a/48665619/3670097,https://stackoverflow.com/a/51954326/3670097
摘要说明如何在指令码中执行此动作:https://stackoverflow.com/a/53224849/3670097
此操作也失败
我找到了每一个计算密集型函数,并将其放在上下文管理器中:
import threadpoolctl
with threadpoolctl.threadpool_limits(limits=1, user_api="blas"):
D, P = np.linalg.eig(M, right=True)
1条答案
按热度按时间h6my8fg21#
https://stackoverflow.com/a/57505958/3528321中的运行时修复: