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 上,可能全部同时出现。
我必须为大约 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 上,可能全部同时出现。