SLURM:如何 运行 相同的 python 脚本用于并行目录中的不同 $arg

SLURM: how to run the same python script for different $arg from a catalogue in parallel

我必须为大约 10'000 个对象 运行 一系列 python 脚本。每个对象的特征都在我的目录的一行中。 在我的电脑上,为了测试脚本,我只是使用了一个 bash 文件,例如:

totrow=`wc -l < catalogue.txt`

for (( i =1; i <=  ${totrow}; i++ )); do

    
    arg1=$(awk 'NR=='${i}' ' catalogue.txt)   
    
    arg2=$(awk 'NR=='${i}'' catalogue.txt)    
    
    arg3=$(awk 'NR=='${i}'' catalogue.txt)
        
    python3 script1.py  ${arg1} ${arg2} ${arg3} 

done    

那 运行 是目录每一行的脚本。 现在我想 运行 超级计算机(带有 slurm 系统)上的所有内容。 我想做的是 运行ning 例如同时在 20 个 cpu 上处理 20 个对象(因此同时处理 20 行)并以这种方式处理整个目录。

有什么建议吗? 谢谢!

您可以将其设置为数组作业。将循环的内部部分放入 something.slurm 文件,并将 i 设置为该文件顶部的数组元素 ID ($SLURM_ARRAY_TASK_ID)(.slurm 文件只是一个正常 shell 脚本,作业信息编码在注释中)。然后使用 sbatch array=1-$totrow something.slurm 启动作业。

这会将每个 Python 调用安排为一个单独的任务,并将它们编号为 1 到 $totrow。 SLURM 将 运行 它们中的每一个在下一个可用的 CPU 上,可能全部同时出现。