multi-partition 作业的批处理脚本?
Batch script for multi-partition job?
我正在从事一个项目,该项目 运行 在大型计算集群的两个不同分区上编写程序。我想 运行 使用批处理脚本来执行此操作,但在搜索之后,仍然不清楚 if/how 我可以从单个批处理脚本中在两个不同的分区上分配和 运行 程序。这是我想做的事情
#!/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 模块(不同版本) ] 脚本(未显示)。我看到您实际上可以在批处理脚本的 header 中放置一个分区列表,但根据我的阅读,实际上只是告诉调度程序从列表中分配任何可用分区,而不是多个分区。
谢谢!
Slurm 作业仅限于一个分区,因此在您的情况下,有几种操作方法:
提交两个作业数组 --array=1..100
并将您的提交脚本分成一部分用于 batch
分区,另一部分用于 gpu
分区并链接两个数组与 --depedendcy=aftercorr:<job_id of the 'batch' job array>
使用 salloc
在 gpu
分区上创建分配,然后使用 SSH 显式连接到该节点 运行 python gpu_iter.py
提交脚本(如果集群配置允许)
修改 gpu_iter.py
以便它可以发出信号(使用 UNIX 信号)它必须 运行 然后休眠直到下一个信号,并使用 scancel
在每次迭代时从 batch
作业中发出 gpu
作业信号。
我正在从事一个项目,该项目 运行 在大型计算集群的两个不同分区上编写程序。我想 运行 使用批处理脚本来执行此操作,但在搜索之后,仍然不清楚 if/how 我可以从单个批处理脚本中在两个不同的分区上分配和 运行 程序。这是我想做的事情
#!/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 模块(不同版本) ] 脚本(未显示)。我看到您实际上可以在批处理脚本的 header 中放置一个分区列表,但根据我的阅读,实际上只是告诉调度程序从列表中分配任何可用分区,而不是多个分区。
谢谢!
Slurm 作业仅限于一个分区,因此在您的情况下,有几种操作方法:
提交两个作业数组
--array=1..100
并将您的提交脚本分成一部分用于batch
分区,另一部分用于gpu
分区并链接两个数组与--depedendcy=aftercorr:<job_id of the 'batch' job array>
使用
salloc
在gpu
分区上创建分配,然后使用 SSH 显式连接到该节点 运行python gpu_iter.py
提交脚本(如果集群配置允许)修改
gpu_iter.py
以便它可以发出信号(使用 UNIX 信号)它必须 运行 然后休眠直到下一个信号,并使用scancel
在每次迭代时从batch
作业中发出gpu
作业信号。