问题标签 [sbatch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - SLURM 中的每个任务都需要一个 bash 文件吗?
我正在尝试在 SLURM 管理的集群中启动多个任务,并希望避免处理数十个文件。现在,我有 50 个任务(下标 i,为简单起见,i 也是我程序的输入参数),每个任务都有一个slurm_run_i.sh
指示计算配置的 bash 文件和 srun 命令:
然后我使用另一个 bash 文件来提交所有这些任务,slurm_run_all.sh
这行得通(集群上正在运行 50 个作业),但我发现输入文件超过 50 个很麻烦。搜索解决方案,我想出了 & 命令,获得如下内容:
这似乎也在运行。但是,我无法独立管理这些作业中的每一个:squeue
显示我有一个作业(pltall)在单个节点上运行。由于我正在工作的分区中的每个节点上只有 12 个核心,我假设我的大部分工作都在我被分配到的单个节点上等待。设置 -N 选项也不会改变任何东西。此外,如果我意识到有错误或其他事情,我不能再单独取消一些工作,这对我来说听起来有问题。
我的解释是否正确,有没有比我尝试在 slurm 中处理多个工作而不在许多文件中丢失更好的方法(我猜)?
linux - Slurm 作业不能为多个节点请求 GPU 资源
全部。
在我的 Slurm 集群中,当 srun 或 sbatch 作业请求多个节点的资源时,将无法正确提交。
这个 Slurm 集群有 4 个节点,每个节点有 4 个 GPU。
我可以同时使用 4 个 GPU 执行多个作业。
但我无法运行 5 个或更多 GPU 的作业请求。
下面的信息会显示cise3状态为down,这是另一个问题。
错误信息:</h1>
sbatch:错误:批处理作业提交失败:请求的节点配置不可用
开始.sh:
slurm.conf:
gres.conf:
信息:
scontrol 显示节点:
python - 使用 Python 提交 Slurm 作业
我有foo.sh
如下
我foo.sh
从另一个名为的 bash 文件中调用submit.sh
这会提交多个作业。
我想更改submit.sh
为 Python 文件,该文件将调用foo.sh
为它提供将进入的参数$1
,foo.sh
Python 不应等待作业完成。
也是我将在 for 循环中提供的molecule_name
变量some_method
模板 Python 脚本submit.py
我收到此错误:
awk - 使用 #SBATCH 向多个文件 (900+) 添加一列
我正在尝试向文件添加一列:
所以它看起来像这样:
我已经设法使用这个命令来做到这一点:
但是,我有 900 多个文件也需要执行此操作,并且每次都输出到一个新文件。我发现 awk 理解起来很复杂,想知道是否有办法使用#SBATCH 脚本或任何其他方法一次处理多个文件?
我对堆栈溢出很陌生,所以任何帮助将不胜感激!谢谢!
linux - 有没有人在 HPC 上通过 SBATCH 设置成功地在 bash 中使用 shopt -s extglob(扩展通配符)?
总结一下:
我正在使用 bash shell,版本:4.2.46(2)-release
我想向 slurm 作业调度程序提交一个批处理作业脚本,在该脚本中,我使用扩展通配符,该扩展通配符在我尝试使用的扩展通配符命令的单独行上使用 shopt -s extglob 打开。
我想运行这些命令:
我曾尝试在这些命令之前使用 shopt -s extglob 并在它们之间添加换行符,例如。:
这不起作用,并且在之后编写 shopt extglob 时,没有显示打开或关闭扩展 globbing 输出到我的日志文件。
我发现 shopt -s extglob 唯一可以工作的地方就在一开始,例如:
然而,这是一个问题,因为我的 SBATCH 设置没有被解释,例如。:
这是手册中对 sbatch 的描述:
sbatch 向 Slurm 提交一个批处理脚本。批处理脚本可以通过命令行上的文件名提供给 sbatch,或者如果没有指定文件名,sbatch 将从标准输入中读取脚本。批处理脚本可能包含在脚本中任何可执行命令之前以“#SBATCH”开头的选项。一旦到达脚本中的第一个非注释非空白行,sbatch 将停止处理进一步的#SBATCH 指令。
我试图删除所有内容的目录,但扩展 glob 中包含的文件是我要删除的目录和文件的混合。
我很好奇是否有人以前遇到过这个问题/知道解决方法?或者可以提供替代解决方案?
parallel-processing - SLURM Array 作业 - 如何运行尽可能多的作业?如何最明智地组合 Slurm 选项?
我对 Slurm 和这个社区很陌生,所以如果我做错了什么,请以任何方式纠正我!:)
我需要在 HPC 集群上多次并行运行我的可执行文件(Python 脚本)。此可执行文件将 Slurm Array 任务 ID 作为输入。此输入在 Python 脚本中映射到多个参数,然后在此基础上再次导入数据。请注意,可执行文件本身不是内部并行的。我认为我的可执行文件的每次调用都应该只能在一个 CPU 上运行。
我的目标:尽可能多地运行我的可执行文件的多次调用!我在想至少要同时进行 50 次调用。
原则上,我的脚本在集群上按预期工作。我使用这个 Slurm 提交脚本:
然而,通过这种方式,不知何故只有 8 个作业(即“executable.py 1”、“executable.py 2”……)并行执行,每个作业都在不同的节点上。(注意:我不太清楚 'export OMP_NUM_THREADS' 的作用;IT 支持人员告诉我要包含它)。如果“executable.py 1”结束,“executable.py 9”开始。但是,我想要的不仅仅是 8 个同时运行的调用。所以我想,我需要指定每个 inovcation 只需要一个 CPU;也许那时我的更多工作可以在我似乎收到的 8 个节点上并行运行。我的新提交脚本如下所示(为了便于阅读,我只显示了“资源规范”部分,其余部分未更改):
但是,这样一来,我的可执行文件似乎为每个 Slurm 数组任务 ID 运行了十次,也就是说,“executable.py 1”运行了十次,“executable.py 2”等等。这不是我的本意。
我认为我的问题的根源在于(i)我被 SBATCH 选项--ntasks-per-node、--ntasks、--cpus-per-task、--nodes 等严重混淆了,并且( ii) 从概念上讲,我不知道“工作”、“工作步骤”或“任务”是什么意思(对于我的情况以及 SBATCH 的手册页)。
如果有人知道哪个 SBATCH 选项组合给了我想要的东西,我将非常感谢您的提示。此外,如果您对如何定义工作步骤和任务等有一般知识(用简单的英语),那就太好了。
请注意,我仔细查看了手册页和一些在线文档。我还询问了我支持的当地人,但遗憾的是他们并没有太大帮助。我真的需要我的脚本大规模并行运行;我也真的很想更好地了解 Slurm 的工作原理。我想补充一点,我不是受过训练的计算机科学家,这不是我通常的比赛场地。
非常感谢大家的时间!
slurm - Snakemake slurm 输出文件重定向到新目录
我正在整理一个snakemake slurm 工作流程,并且在我的工作目录变得混乱的slurm 输出文件时遇到了麻烦。我希望我的工作流程至少将这些文件定向到我工作目录中的“slurm”目录。我目前的工作流程设置如下:
配置.yaml:
集群.yaml:
蛇文件:
然后我打电话给:
这不起作用,因为该slurm
目录尚不存在。我不想在运行我的 snakemake 命令之前手动进行此操作,这对可扩展性不起作用。在阅读了所有相关问题后,我尝试过的事情是:
1)只需尝试通过规则内的日志捕获所有输出,然后设置cluster.output='/dev/null'
. 不起作用,未捕获 slurm 输出中的信息,因为它不完全是规则的输出,它的工作信息
2)通过添加虚拟日志来强制创建目录:
我认为这不起作用,因为 sbatch 在实施规则之前尝试找到 slurm 文件夹
3) 允许在工作目录中制作文件,并在规则末尾添加 bash 代码以将文件移动到 slurm 目录中。我相信这不起作用,因为它会在作业完成写入 slurm 输出之前尝试移动文件。
任何进一步的想法或技巧?
pytorch - 如果我在发送到队列后进行修改,文件是否会在队列中更改?
我有一个问题:一个model.py
带有一些参数集的神经网络文件。我已将其发送到 slurm 队列。这样做时,squeue
我可以看到它仍在等待,因为还有其他作业正在运行。现在,我想发送另一种model.py
但更改参数的变体。你知道如果我现在改变它,它会改变发送到队列的第一个实例的参数吗?
我的意思是:假设第一个实例的 param = 20。我将它发送到队列。还是没跑。现在,我将其更改为 param = 50 并将第二个实例发送到机器。第一个会有 param = 20 还是 param = 50 ?
先感谢您!
bash - 如何同时从多个目录中执行 SLURM 脚本?
我想同时从多个目录中执行一个 SLURM脚本。更具体地说,我有十个编号的数组文件夹array_1
,array_10
我想从中执行脚本。在每个目录中,脚本创建 10 个子目录,标记为${SLURM_ARRAY_TASK_ID}_ztag
。但是,我必须从十个 array_ 目录中的每个目录中手动执行 SLURM 脚本。当我必须一遍又一遍地这样做时,这变得很麻烦。
通常,使用 shell 脚本,这将是一个简单的for
循环,但因为#SBATCH
不是由 bash 解释,所以我没有任何成功。当前脚本(在每个数组文件夹中单独运行)是:
然后我键入sbatch <filename>.slurm
,脚本从执行脚本的任何目录中创建子目录,因此需要该cd
行,因此要同时从所有十个数组中执行它是很棘手的。我尝试了以下各种组合:
我尝试将for
循环参数放在各个行之前/之后,包括wait
and done
,但我收到一条错误消息,说它无法打开 fasta、secstruct 和或 ./dir。我也尝试过先创建 10 个数组(这很容易),然后执行以下操作:
但这不会将输出文件或子目录放入数组文件夹中;它要么将它们留在父级中。
有什么建议么?
partition - 有没有办法将 SLURM 分区中的某些节点设置为优先于其他节点?
我有一个集群,该集群主要由 CPU+GPU 节点和几个仅 CPU 节点组成。目前它们分别位于两个分区中,分别为'gpuNodes'和'cpuNodes'。我们的需求在增长,我们的纯 CPU 作业需要使用 CPU+GPU 节点以及纯 CPU 节点才能及时完成。我正在考虑创建一个包含来自前两个节点的节点的“全部”分区。理想情况下,我想在向 CPU+GPU 节点提交作业之前填写仅 CPU 节点。
这引出了我的问题。有没有办法为分区内的一组节点设置优先级/首选项,以便分配给分区的批处理作业首先填写首选节点?或者,如果您知道实现我的目标的更好方法,我不会设置在上面提到的“全部”分区上。
如果它有助于为我的节点命名架构,请遵循以下语法:
具有 CPU + GPU 的节点:gn001-gn100
仅具有 CPU 的节点:n001-n20
预先感谢您的帮助!