【问题标题】:Suspend, save to disk, restart long jobs on a supercomputer with PBS使用 PBS 在超级计算机上暂停、保存到磁盘、重新启动长时间的作业
【发布时间】:2014-04-01 14:20:40
【问题描述】:

我需要能够暂停“正在运行的脚本”,让操作系统将其状态保存到磁盘,然后通过读取该状态并准确地从它离开的位置继续进行恢复。该系统是一个12核计算节点,共享内存为48GB,运行linux。我没有管理员权限,我使用 ssh 远程登录。脚本和其中的可执行文件不使用 GUI,都是命令行,据我所知不需要明确的网络或套接字。

“运行脚本”(或“管道”)是指 bash 脚本或 perl 脚本或两者的组合,它们会产生一些 C/C++ 可执行文件,可能它们正在使用 openmp 并行化。或者使用 gnu-parallel 生成并行可执行文件。因此,我们讨论的不是单个可执行文件,而是一系列并行或按顺序运行的可执行文件,使用隐式并行化在 12 个内核和公共内存上,由几个 unix 命令(例如 awk)粘合。

我需要暂停并重新启动管道,因为调度程序 (MOAB) 会终止(系统规则)所有运行时间超过 24 小时的作业。这个想法是暂停工作并重新排队。这种技术是完全合法的。

修改可执行文件的源代码以便它们都保存状态并在以后恢复它是不切实际的,因为这意味着修改几个开源可执行文件以接受“保存状态和暂停”信号,比如 ImageMagick 的“ convert' 甚至是 'grep'、'sed'、'awk' 和 perl !另外,还有一个可执行文件是闭源的,没有源代码。

所以,我相信我处于一种(唯一?)实用的选择是在所谓的沙盒环境中运行我的“脚本/管道”的情况,例如QEMU(一个模拟器),希望可以发送一个信号到“休眠”,通过将整个内存和 cpu 状态保存到磁盘(48GB 不是问题)并挂起来保存所有当前正在运行的程序的状态。

我不是上述任何方面的专家,所以请原谅我的术语,或者如果我说了什么无效的话。我只是在素描。

回顾一下:我想请任何有经验的人提供一个解决方案,以在 linux 下暂停和重新启动复杂的脚本作业,而无需将代码修改为“保存状态”。该解决方案还应该具有相对计算效率,即最终不会浪费大量超级计算机的能力来运行模拟器。

如果您认为我上面谈到的 QEMU 解决方案是可以的,那么请,如果可以,请给出一些如何开始的例子,即从公共 ISO 创建一个模拟器 linux 映像,加载映像,运行'脚本”,告诉模拟器在 20 小时后“暂停/休眠”,然后通过从暂停状态读取它的状态来恢复模拟器。所有这些,最好是通过命令行或脚本。

欢迎任何其他解决方案,只要它们是实用的(对于给定的设置)。

请注意:我没有管理员权限,但可以在我的 homedir 中安装东西并且有很多硬盘空间。此外,这些程序不使用 GUI,都是命令行,据我所知不需要明确的网络或套接字。

作为带有模拟器的解决方案的一个积极的副作用是,任何此类“管道”都可以分发到任何实施“沙盒”/模拟器的操作系统(例如 mac 或 win),而无需复杂的过程重新编译所有内容并安装 gnu-utils、bash、boost 等。我发现自己多次遇到这种情况。

感谢您的帮助, bliako。

【问题讨论】:

    标签: state resume suspend pbs wall-time


    【解决方案1】:

    我不确定您使用的是哪个版本的 pb,但 TORQUE 提供与伯克利实验室检查点/重启 (BLCR) 的集成。对 BLCR 来说最重要的是所有节点都具有完全相同的操作系统映像。设置相当详细,并记录在 TORQUE docs.

    本质上,pbs_mom 守护进程配置为使用 BLCR,并且每当您停止作业时,守护进程使用 BLCR 对操作系统内部数据结构进行快照,以了解进程的确切状态,使其能够重新启动相同的从完全相同的点处理。

    【讨论】:

    • 我已按照您提供的文档链接中的示例进行操作。每当我告诉它检查点(qhold jobID)时,我设法让调度程序为检查点数据创建一个目录。但是这个目录是空的,那里没有写入检查点数据。这让我怀疑 BLCR 不在内核中,或者 Torque 没有用 BLCR 编译(例如:docs.adaptivecomputing.com/torque/4-2-6/help.htm#topics/2-jobs/… --version 给出 4.2.4.1 而 lsmod|grep blcr 什么也没显示。
    • 您在构建 pbs_mom 守护进程时是否配置了 blcr?
    • 我不知道,我只是那里的一个低级用户,管理员似乎对此一无所知。有没有办法检查这个?还有一种方法可以检查内核是否是使用 BLCR 构建的,或者是否存在并加载了 BLCR 内核模块?即使所有这些检查都可以,您认为这是否适用于我需要它的情况,即一个 bash 脚本被提交给调度程序,然后该脚本运行一个 perl 脚本,它产生多个并行或顺序进程(尽管大多数使用 openmp)与 shell 命令(awk、sed)粘合在一起以进行结果文件处理。BLCR 是否适用这样的情况还是只针对 1 名高管?
    • 首先,如果您不是管理员并且没有管理员帮助您,那么几乎没有任何更改将起作用。如果他们不知道什么是 BLCR,那么他们就没有构建 TORQUE 来使用 BLCR。从好的方面来说,可以让您的确切方案发挥作用,但对于在多个主机上运行的作业来说有点困难。
    • 感谢您的帮助。我会走 qemu 的路,看看会带我去哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多