我正在尝试在 slurm 上运行一些并行代码,其中不同的进程不需要进行通信。我天真地使用了 python 的 slurm 包。然而,我似乎只在一个节点上使用CPU。
例如,如果我有 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 https://stackoverflow.com/questions/32594734/slurm-multiprocessing-python-job,但还没有详细解决。
您当前的代码将在您启动它的单个节点上的 5 个处理器上运行 10 次。现在和SLURM没有任何关系了。
你不得不SBATCH
SLURM 的脚本。
如果您想使用 SLURM 在 5 个核心上运行此脚本,请像这样修改脚本:
#!/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()
然后执行脚本
sbatch my_python_script.py
在安装 SLURM 的节点之一上
然而,这也会将您的作业分配给单个节点,因此速度将与您在单个节点上运行它的速度非常相同。
我不知道当你只有 5 个进程时为什么要在不同的节点上运行它。仅在一个节点上运行会更快。如果您在 python 脚本的开头分配超过 5 个核心,那么 SLURM 将为您分配更多节点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)