使用SLURM高效批量处理10000个FITS文件的最优方案咨询
SLURM高效批量处理10000个FITS文件的最优方案咨询
我现在有个需求想请教下大家:我有个Python脚本,要逐个处理大概10000个FITS文件,每个文件处理完会在同目录生成输出,还会生成一个CSV记录所有文件的统计信息。之前我用async加多进程池做了并行,但现在有SLURM集群可用,想改成用SLURM来跑。
具体要求是:所有文件都存在同一个目录里,处理顺序没要求;另外运行Python脚本前得先激活conda环境,Python脚本是通过命令行参数接收文件名的。
后来我自己折腾出来能跑的方案了,先跟大家分享下:
首先写了一个提交任务的bash脚本:
#!/bin/bash # Define the directory containing FITS files INPUT_DIR="input_dir" LOG_DIR="${INPUT_DIR}/logs" # Ensure the logs directory exists mkdir -p "$LOG_DIR" # List all FITS files and write their paths to a temporary file find "$INPUT_DIR" -name "*.fits" > file_list.txt # Loop through each FITS file and submit a SLURM job while IFS= read -r filepath; do sbatch run2.sh "$filepath" done < file_list.txt
这个脚本会调用run2.sh,每个文件对应提交一个SLURM任务,run2.sh的内容是:
#!/bin/bash #SBATCH -p long #SBATCH -J test #SBATCH -n 1 #SBATCH -t 00:05:00 #SBATCH --output=file.out #SBATCH --error=file.err source miniconda3/bin/activate my_env # Run Python script python3 -u my_python_code.py "$1" "False" 3
不过现在我有个新的顾虑:这样做会生成10000个SLURM任务,但每个文件的处理其实只需要几秒时间,感觉有点浪费资源,想问问大家有没有更高效聪明的处理方式?
备注:内容来源于stack exchange,提问作者Falco Peregrinus
相关产品推荐
相关产品推荐

