【发布时间】:2013-06-04 16:48:55
【问题描述】:
我正在运行一个脚本,该脚本通过slurms squeue 命令执行多个后续mpirun 调用。每次调用 mpirun 都会将其输出写入自己的目录,但它们之间存在依赖关系,即给定运行将使用前运行输出目录中的数据。
mpi 程序在内部执行一些迭代优化算法,如果满足某些收敛条件,该算法将终止。每隔一段时间就会发生这种情况,算法会达到一个尚未完全满足这些标准的状态,但是通过绘制输出(连续写入磁盘),我们可以很容易地判断出重要的事情已经收敛,并且进一步的迭代不会再改变最终结果的性质。
因此,我正在寻找一种以受控方式手动终止运行并让外部脚本继续进行下一个 mpirun 调用的方法。 实现这一点的最佳方法是什么?我无法直接访问实际执行计算的节点,但我当然可以访问所有 slurms 命令和工作目录个人跑。我可以访问 mpi 程序的完整源代码。
一种可行的解决方案如下:如果要手动终止运行,可以在工作目录中放置一个具有特殊名称(如killme)的文件,这可以通过touch killme 轻松完成。 mpi 程序会定期检查此文件是否存在,如果存在则以受控方式终止。这里根本不涉及外部脚本或 slurm,脚本将继续下一个 mpirun 调用。 您如何看待这个解决方案?你能想出更好的办法吗?
【问题讨论】:
-
Every once in a while it happens, that the algorithm reaches a state in which those criteria are not quite met yet, but by plotting the output (which is continuosly written to disk) one can quite easily tell that the important things have converged and that further iterations would not change the nature of the final result anymore.你为什么不改进你的收敛标准呢?还是您想要明确的用户终止?接受主进程中的信号并正确终止一切就可以了。 -
如果您不知道,您可以使用scancel 向 slurm 中正在运行的作业发送信号。
-
谢谢,我会看看处理
scancel传递的信号。不过,在这种特殊情况下,改进收敛标准可能非常困难......
标签: mpi cluster-computing hpc