numpy PBS上的Python脚本失败,错误为=>>PBS:已删除作业:ncpus 37.94超出限值36(总和)

s3fp2yjn  于 2022-12-04  发布在  Python
关注(0)|答案(1)|浏览(140)

当我在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/3670097https://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)
h6my8fg2

h6my8fg21#

https://stackoverflow.com/a/57505958/3528321中的运行时修复:

try:
    import mkl
    mkl.set_num_threads(1)
except:
    pass

相关问题