多分区作业的批处理脚本?

2023-12-10

我正在开发一个项目,该项目在大型计算集群的两个不同分区上运行程序。我想使用批处理脚本来运行它,但搜索后,仍然不清楚是否/如何从单个批处理脚本中在两个不同的分区上分配和运行程序。这就是我想做的事情

#!/bin/bash
#SBATCH --partition=<WHAT GOES HERE? I want to perform 100 processes on partition "batch" and 1 process on partition "gpu". I will alternate between the 2 during my jobs execution>
#SBATCH --ntasks=<100 on batch, 1 on gpu>
#SBATCH --mem-per-cpu=2G
#SBATCH --time=4-00:00:00
#SBATCH --exclude=nodeynode[003,016,019,020-023,026-030,004-015,017-018,020,024,031]
#SBATCH --job-name="lorem_ipsum"

filenames=("name1" "name2" "name3")

srun -p gpu python gpu_init.py
wait

for i in {0..100}
do
    for name in "${filenames[@]}"
    do
    srun -p batch pythonexecutable &
    done
srun -p gpu python gpu_iter.py
wait
done

对 bash 错误表示歉意,我通常用 python 编写脚本,但我不能在这里,因为我在 bash 脚本(未显示)中切换 python 模块(不同版本)。我看到您实际上可以将分区列表放入批处理脚本的标头中,但从我读到的内容来看,实际上只是告诉调度程序从列表中分配任何可用分区,而不是多个分区。

Thanks!


Slurm 作业仅限于一个分区,因此对于您的情况,有多种操作方案:

  • 提交两个作业数组--array=1..100并将您的提交脚本分成一个部分batch分区和另一部分gpu分区并将两个数组链接起来--depedendcy=aftercorr:<job_id of the 'batch' job array>

  • use salloc创建分配gpu分区,然后显式使用 SSH 到该节点来运行python gpu_iter.py在提交脚本中(如果集群配置允许)

  • 修改gpu_iter.py这样它就可以收到信号(使用 UNIX 信号)它必须运行,然后休眠直到下一个信号,并使用scancel发出信号gpu工作从内部batch每次迭代的工作。

Update: 根据这张票,现在可以通过以下方式完成异构工作.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多分区作业的批处理脚本? 的相关文章

随机推荐