3

我在 Amazon EC3 平台上进行计算,使用通过 OpenMPI 连接的多台机器。为了降低计算成本,使用了现场实例,当机器的成本超过最大预设价格时会自动关闭:http: //aws.amazon.com/ec2/spot-instances/。发生了一个奇怪的行为:当一台机器关闭时,MPI 通信器中的其他进程仍然继续运行。我认为在进程有时间向其他进程指示它已收到终止信号之前,网络接口已被静音。

我在多篇文章中读到 MPI 没有提供很多关于容错的高级资源。另一方面,我的程序的结构很简单:一个主进程被从进程查询,以获得执行部分代码的权限。主进程只跟踪它已回复的查询数量,并在达到上限时告诉从属进程停止。从站之间没有耦合。

如前所述,我希望能够检测到进程何时静默死亡。在那种情况下,我会将他所做的工作重新归因于一个还活着的奴隶。有没有简单的方法来检查是否死亡?我曾想过使用线程和套接字独立于 MPI 层的其余部分来执行此操作,但这似乎很麻烦。我还考虑在主进程(在非现场实例上启动)维护与每个进程的最后一次通信时间的列表,并指定超时,但这并不能保证我的从进程已经死了。还有一个问题是“barrier”和“finalize”函数不会看到所有的进程,并且可能会挂起。

那么我的问题是你会实施什么样的解决方案来检测进程是否静默死亡?您将如何修改其余代码以与减少的进程数兼容?

4

2 回答 2

2

您使用的是哪个版本的 Open MPI?

我不确定 Open MPI 可能正在做什么(或不做什么)而不会检测到进程已经消失。失败后 Open MPI 的通常行为是运行时会中止整个作业。

不幸的是,Open MPI 中没有发现失败进程的机制(尤其是在听起来 Open MPI 甚至不知道它们失败的情况下)。但是,要将此添加到所有 MPI 库的未来版本中,还有很多工作正在进行中。支持此行为的示例实现之一是 Open MPI 的一个分支,称为 ULFM (www.fault-tolerance.org)。那里有很多文档可以准确了解发生了什么,但本质上,这是 MPI 标准中添加容错的新章节。

MPICH 3.0.3 中提供了一项较旧的工作(不幸的是,它在 3.0.4 中被破坏,但它应该在 3.1 中恢复)(www.mpich.org)。使用该工作的文档在自述文件中。

这两种努力的问题在于它们不符合 MPI 标准。最终,会有一章描述 MPI 中的容错,所有的 MPI 实现都将变得兼容,但与此同时,没有适合所有人的好的解决方案。

于 2013-09-05T20:58:43.133 回答
0

在您的情况下, PVM可能是 MPI 的合理替代方案。虽然在多年前输给 MPI 后不再开发,但 PVM 仍然与大多数 Linux 发行版预打包并提供内置的容错功能。它的 API 在概念上与 MPI 非常相似,但其执行模型略有不同。可以说它允许并行程序中的任务之间的耦合比 MPI 少一个度数。

在带有 Linux 的 Beowulf Cluster Computing中有一个容错主从 PVM 应用程序的示例实现。在此处阅读本书的相关章节。

至于 MPI 中的容错,当 MPI 论坛投票支持在 MPI-3.0 中包含新功能时,该标准的提议添加被拒绝。FT 成为 MPI 的标准功能可能需要比预期更长的时间。

于 2013-09-06T11:20:53.363 回答