2016-10-11 399 views
1

我想在slurm上运行一些并行代码,其中不同进程不需要进行通信。天真地我使用了python的slurm包。但是,似乎我只在一个节点上使用cpu。在slurm上使用python的多处理

例如,如果我有4个节点,每个节点有5个CPU,我将只同时运行5个进程。我怎样才能告诉多处理在不同的节点上运行?

的Python代码如下所示

import multiprocessing 

def hello(): 
    print("Hello World") 

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)): 
    p = multiprocessing.Process(target = run_rel) 
    jobs.append(p) 
    p.start() 

的问题是类似this one,但它并没有详细解决。

回答

1

您当前的代码将在5个处理器上运行10次,在您启动它的SINGLE节点上运行。它现在与SLURM无关。

您将不得不SBATCH脚本SLURM。

如果你想运行在5个内核与SLURM这个脚本修改脚本是这样的:其中SLURM是

sbatch my_python_script.py 

#!/usr/bin/python3 

#SBATCH --output=wherever_you_want_to_store_the_output.log 
#SBATCH --partition=whatever_the_name_of_your_SLURM_partition_is 
#SBATCH -n 5 # 5 cores 

import sys 
import os 
import multiprocessing 

# Necessary to add cwd to path when script run 
# by SLURM (since it executes a copy) 
sys.path.append(os.getcwd()) 

def hello(): 
    print("Hello World") 

pool = multiprocessing.Pool() 
jobs = [] 
for j in range(len(10)): 
    p = multiprocessing.Process(target = run_rel) 
    jobs.append(p) 
    p.start() 

然后执行脚本的节点之一安装

但是,这会将您的工作分配给SINGLE节点,所以速度将与您在单个节点上运行时的速度相同。

我不知道当你只有5个进程时,你为什么要在不同的节点上运行它。仅在一个节点上运行会更快。如果您在python脚本的开头分配多于5个内核,则SLURM将为您分配更多节点。

+0

感谢您的回答。实际上我想要并行运行大约40个进程,这就是为什么我需要使用不同的节点。我会在今晚晚些时候尝试你的代码 – physicsGuy

+0

我试过你的方法。但是,python只使用上面代码的单个节点,而其他所有节点都未使用。有没有简单的方法呢? – physicsGuy