我们正在尝试使用扭矩来检查MPI作业,但似乎扭矩只能处理在单个节点上运行的作业。我检查了代码并发现当使用qhold检查作业时,qhold向pbs服务器发送PBS_BATCH_HoldJob请求,然后pbs服务器将此请求中继到主控主机,然后主控主机检查点BLCR自身运行的作业进程,但不是将请求发送到其姐妹节点,因此似乎MPI作业无法检查扭矩。
另一个问题,在检查点成功后(由qhold报告),扭矩向主机主机中的进程发送信号15以终止进程,然后扭矩将检查点文件复制到pbs_server并在本地删除所有文件。使用qrls重新启动此作业时,调度程序将为此作业分配新节点,并将检查点文件复制到新节点,然后通过检查点文件重新启动作业,然后出现问题:
假设扭矩可以检查每个节点中MPI作业的进程,通常我们的作业使用大量内存,因此检查点文件非常大,但pbs服务器没有大磁盘足以包含检查点文件。
在我们的环境中,在MPI作业开始之前,我们将一些大型元数据从另一个集群直接拉到为MPI作业分配的节点进行计算,在检查点/重启后,作业流程可能会在某些不同的节点,元数据可能会丢失。
如果有人可以告诉我你如何为MPI工作做检查点,如果我的问题可以回答并且需要修改扭矩代码,我也喜欢这样做。
感谢。