如何检查 slurm 作业是否是数组中的最后一个 **运行**?
How to check if a slurm job is the last **RUNNING** in an array?
我需要将一组作业发送到 SLURM 集群,我需要它们将部分结果汇总到一个组合文件中。但是,我不能让多个独立的 slurm 阵列无人机写入同一个文件。所以目前我正在努力做到只有最后一架无人机聚合所有数据。
目前,我让每个阵列无人机在完成时检查所有其他结果是否已写入,如果是,则它会写入文件。然而,目前多架无人机几乎同时完成,而且似乎仍在尝试写入同一个文件。
我想做到只有阵列中的最后一架无人机执行此操作。然而,最后一台无人机(即通过检查 JOBID)可能不是最后一台完成的无人机,因为工作需要的时间长度略有不同。
那么有没有办法让每架无人机检查它是否是阵列中的最后一架 运行 之类的?或者有没有更好的方法来做到这一点我忽略了?
此外,我更喜欢 python
中的答案,因为如果可能的话,这就是我正在使用的。
最简单的方法是为聚合创建一个额外的作业并添加对作业数组的依赖。
#SBATCH --dependendy=afterany=<jobid of the job array>
见https://slurm.schedmd.com/job_array.html and https://slurm.schedmd.com/sbatch.html
我需要将一组作业发送到 SLURM 集群,我需要它们将部分结果汇总到一个组合文件中。但是,我不能让多个独立的 slurm 阵列无人机写入同一个文件。所以目前我正在努力做到只有最后一架无人机聚合所有数据。
目前,我让每个阵列无人机在完成时检查所有其他结果是否已写入,如果是,则它会写入文件。然而,目前多架无人机几乎同时完成,而且似乎仍在尝试写入同一个文件。
我想做到只有阵列中的最后一架无人机执行此操作。然而,最后一台无人机(即通过检查 JOBID)可能不是最后一台完成的无人机,因为工作需要的时间长度略有不同。
那么有没有办法让每架无人机检查它是否是阵列中的最后一架 运行 之类的?或者有没有更好的方法来做到这一点我忽略了?
此外,我更喜欢 python
中的答案,因为如果可能的话,这就是我正在使用的。
最简单的方法是为聚合创建一个额外的作业并添加对作业数组的依赖。
#SBATCH --dependendy=afterany=<jobid of the job array>
见https://slurm.schedmd.com/job_array.html and https://slurm.schedmd.com/sbatch.html