小编ran*_*ndo的帖子

numpy 矩阵 mult 在 HPC 上并行化时不起作用

我有两个大小为 (2500, 208) 和 (208, 2500) 的密集矩阵。我想计算他们的产品。当它是单个进程时,它运行良好且快速,但当它处于多处理块中时,进程会在那里停留数小时。我做更大尺寸的稀疏矩阵乘法,但我没有问题。我的代码如下所示:

with Pool(processes=agents) as pool:
    result = pool.starmap(run_func, args)
def run_func(args):
    #Do stuff. Including large sparse matrices multiplication. 
    C = np.matmul(A,B) # or A.dot(B) or even using BLASS library directly dgemm(1, A, B)
    #Never go after the line above!

Run Code Online (Sandbox Code Playgroud)

请注意,当该函数run_func在单个进程中执行时,它可以正常工作。当我在本地机器上进行多处理时,它工作正常。当我在 HPC 上进行多处理时,它卡住了。我这样分配我的资源:

srun -v --nodes=1 --time 7-0:0 --cpus-per-task=2 --nodes=1 --mem-per-cpu=20G python3 -u run.py 2

其中最后一个参数是agents上面代码中的数字。这是 HPC 上支持的 LAPACK 库详细信息(从 numpy 获得):

    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['**/lib']
    define_macros = …
Run Code Online (Sandbox Code Playgroud)

python numpy lapack intel-mkl slurm

5
推荐指数
1
解决办法
173
查看次数

在 numpy 中广播逐元素运算

我有两个向量xyx大小为 900,y大小为 12。我想取出每个元素x并从所有元素中减去它y,然后取出argmin. 结果向量的大小为 900,每个元素的值在 0 到 11 之间。这是一个我试图避免的 for 循环:

result = []
for x_e in x:
   result.append(np.argmin(np.abs(y - x_e)))
Run Code Online (Sandbox Code Playgroud)

python numpy

-1
推荐指数
1
解决办法
103
查看次数

标签 统计

numpy ×2

python ×2

intel-mkl ×1

lapack ×1

slurm ×1