我在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
目前没有回答
相关问题 更多 >
编程相关推荐