首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用slurm使用worker/master概念在不同的节点上运行不同的独立并行作业?

如何使用slurm使用worker/master概念在不同的节点上运行不同的独立并行作业?
EN

Stack Overflow用户
提问于 2019-01-22 23:11:54
回答 1查看 1.2K关注 0票数 3

我有一个程序,它使用主/salve概念进行并行化。有一个主目录和多个工作目录。我应该首先在主目录中运行执行文件,然后转到工作目录并在每个目录中运行工作执行程序。主程序等待工人完成他们的工作,并将结果发送给主程序以进行进一步的计算。工作目录的作业是相互独立的,因此它们可以在不同的机器(节点)上运行。使用TCP/IP通信协议与工作人员进行通信。

我正在处理一个由16个节点组成的集群,每个节点都有28个核心与slurm作业管理器。我可以在一个节点上与20名员工一起运行我的工作。目前,我的slurm脚本看起来如下:

代码语言:javascript
运行
复制
#!/bin/bash
#SBATCH -n 1               # total number of tasks requested
#SBATCH --cpus-per-task=18 # cpus to allocate per task
#SBATCH -p shortq            # queue (partition) -- defq, eduq, gpuq.
#SBATCH -t 12:00:00        # run time (hh:mm:ss) - 12.0 hours in this.

cd /To-master-directory
master.exe /h :4004 &
MASTER_PID=$!

cd /To-Parent 
# This is the directory that contains all worker (wrk)directories

parallel -i bash -c "cd {} ; worker.exe /h 127.0.0.1:4004" -- 
wrk1 wrk2 wrk3 wrk4 wrk5 wrk6 wrk7 wrk8 wrk9 wrk10 wrk11 wrk12 wrk13 wrk14 
wrk15 wrk16 wrk17 wrk18 wrk19 wrk20
kill ${MASTER_PID}

我想知道如何修改这个脚本,以便在多个节点之间划分在工作人员上运行的作业。例如,与wrk1到wrk5关联的作业运行在节点1上,与wrk6到wrk10关联的作业运行在节点2上,等等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-24 15:16:18

首先,您需要让Slurm为您的作业分配不同的节点,因此您需要删除--cpus-per-task选项,而是请求18个tasks

其次,您需要获得主机名,因为在多节点设置中,127.0.0.1将不再有效。

第三,只需在调用srun中的bash之前添加parallel。使用--exclusive -n 1 -c 1,它将向分配中的每个CPU分派parallel生成的工作人员的每个实例。它们可能位于同一个节点上,也可能位于其他节点上。

因此,以下内容可以正常工作(未经测试)

代码语言:javascript
运行
复制
#!/bin/bash
#SBATCH -n 18               # total number of tasks requested
#SBATCH -p shortq            # queue (partition) -- defq, eduq, gpuq.
#SBATCH -t 12:00:00        # run time (hh:mm:ss) - 12.0 hours in this.

cd /To-master-directory
master.exe /h :4004 &
MASTER_PID=$!
MASTER_HOSTNAME=$(hostname)

cd /To-Parent 
# This is the directory that contains all worker (wrk)directories

parallel -i srun --exclusive -n 1 -c 1 bash -c "cd {} ; worker.exe /h $MASTER_HOSTNAME:4004" -- 
wrk1 wrk2 wrk3 wrk4 wrk5 wrk6 wrk7 wrk8 wrk9 wrk10 wrk11 wrk12 wrk13 wrk14 
wrk15 wrk16 wrk17 wrk18 wrk19 wrk20
kill ${MASTER_PID}

请注意,在您的示例中,有18个任务和20个目录要处理,作业将首先运行18个工作人员,然后当以前的任务完成时,两个额外的任务将被“微调度”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54317794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档