首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Slurm/Sbatch提交/运行多个并行作业?

如何使用Slurm/Sbatch提交/运行多个并行作业?
EN

Stack Overflow用户
提问于 2021-04-02 20:44:29
回答 1查看 1.2K关注 0票数 0

我正在尝试向Slurm服务器提交大量作业(数百个),并希望避免为我想要运行的每个作业提交新的shell脚本。提交的代码是一个Python脚本,它接受shell脚本中的两个输入变量,并且这些变量是在不同作业之间唯一变化的变量。以下是适用于单个作业的简短shell脚本的示例:

代码语言:javascript
运行
复制
#!/bin/bash

#SBATCH -n 1
#SBATCH -t 01:00:00

srun python retrieve.py --start=0 --end=10

我想要的是用相同的python脚本提交大量的作业,并且只在作业之间改变'start‘和'end’变量。我读到了一些关于增加所需的核心数量('-n')并在每个srun-命令后写一个&符号的内容,但到目前为止我一直无法让它工作。

如果有人知道做这件事的快捷方法,我将非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-04-07 20:20:37

要在当前解决方案的基础上进行构建,您可以使用两个CPU,而不是一个CPU:

代码语言:javascript
运行
复制
#!/bin/bash

#SBATCH -n 2
#SBATCH -t 01:00:00

srun -n1 --exclusive python retrieve.py --start=0 --end=10 &
srun -n1 --exclusive python retrieve.py --start=10 --end=20 &
wait

(您可能需要根据边界是包含的还是排除的来调整--end )

上面的脚本请求2个CPU,并使用不同的参数创建两个运行Python脚本的任务。对于20.11之前的Slurm版本,--exclusive部分是必需的(从内存中)。它与请求整个节点的sbatch的同名选项无关。

与号(&)允许两个任务并行运行,并且wait命令用于确保脚本不会在任务之前终止,否则Slurm将直接终止它们。

您可以使用Bash for-loop或使用GNU Parallel命令进行泛化。

但是,这不会提交多个作业,它将提交具有多个任务的一个作业。

如果要提交多个作业,则需要一个job array

代码语言:javascript
运行
复制
#!/bin/bash

#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --array=0-10:10

srun python retrieve.py --start=${SLURM_ARRAY_TASK_ID} --end=$((SLURM_ARRAY_TASK_ID+10))

这将提交两个独立的作业,它们将执行与前面描述的作业相同的工作。

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

https://stackoverflow.com/questions/66919530

复制
相关文章

相似问题

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