如何限制SLURM中n标记的并行化次数

2024-06-16 12:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在SLURM中运行一个超参数搜索ML模型的作业

超参数搜索是用bash脚本编码的。bash脚本运行一个for循环,该循环执行n(n=15,通常是大数)个实验。现在我在GPU中没有太多内存来并行运行所有的python实验,这就是为什么我只在运行时使用slurm by-n标记进行并行化

剧本如下:

#!/bin/sh
#SBATCH -o trans-%j.out
#SBATCH -p PV1002q
#SBATCH -n 5
#SBATCH --gres=gpu:1
#SBATCH --nodelist=node16

module load cuda90/toolkit
module load cuda90/blas/9.0.176

source /home/sbmaruf/.bashrc
source ~/anaconda3/bin/activate sbmaruf

/cm/shared/apps/cuda90/sdk/9.0.176/7_CUDALibraries/simpleCUBLAS/simpleCUBLAS

for seed in 1234 1000 2000 3000 4000 5000 6000 7000 8000; do
    python -u experiment.py --seed $seed

-n为5时,SLURM将启动实验py的5个作业。现在麻烦来了。在experience.pypython文件中,有一个用于模型评估的perl脚本。因为我已经在bash脚本中分配了最大的并行化。experience.py无法从python文件运行perl脚本。perl脚本在python中运行,命令如下:

 subprcess.check_output("perl eval.pl > output.txt",shell=True)  

基本上,我需要读取输出文件来获取度量值。 那么如何解决这个问题呢

我的观察是,最初限制bash脚本执行最大数量的并行化,以便稍后python文件可以启动新进程。但我不知道怎么做

注意:bash脚本中的循环非常复杂。为了更好地理解,我举了一个简单的例子。这不是for循环,因为我可以多次手动运行sbatch


Tags: 文件py模型脚本bashfor参数bin