3

我目前正在研究一些用 C 编写的模拟代码,这些代码在不同的远程机器上运行。当 C 部分完成后,我想通过使用 python 模拟 api 和某种作业队列系统对其进行扩展来简化我的工作,它应该执行以下操作:

1.指定一组应执行模拟的参数并将它们放入主机上的队列中

2.worker对远程机器进行模拟

3.返回结果给主机

我查看了完成这项任务的不同框架,我的第一选择归结为 IPython.parallel。我查看了文档,从我测试的结果来看,它似乎很容易使用。我的方法是使用负载平衡视图,如在

http://ipython.org/ipython-doc/dev/parallel/parallel_task.html#creating-a-loadbalancedview-instance

但我没有看到的是:

  • 会发生什么,即如果 ipcontroller 崩溃,我的作业队列消失了吗?
  • 如果远程机器崩溃会发生什么?是否有某种错误处理?

由于我运行了相对较长的模拟(1-2 周),我不希望我的模拟在系统的某些部分崩溃时失败。那么有没有办法在 IPython.parallel 中处理这个问题?

我的第二种方法是使用 pyzmq 并从头开始实施作业系统。在这种情况下,这种情况下最好的 zmq 模式是什么?

最后但并非最不重要的一点是,对于这种情况是否有更好的框架?

4

2 回答 2

0

隐藏在幕后的是一个更复杂的观点,即如何在(并行的)数字运算管道旁边安排工作包流。

作为许多CPU 核心周的工作包,

或者

作为几十万 CPU-core-hours以上的工作量,原理类似,都遵循常识。

主要特征

  • 所涉及的所有资源的计算性能的可扩展性(理想情况下是线性的)
  • 轻松提交任务角色
  • 提交任务的故障恢复能力(理想情况下具有自动自我修复
  • 访问/使用充足资源池的可行TCO 成本(前期成本、经常性成本、适应成本 co$ts、$peed 成本)

解决方法

  • 用于基于分布式大规模并行调度程序的自愈计算引擎的自制架构

  • 重用可用的基于网格的计算资源

根据自己的经验,解决在大量参数SetVectorSPACE(不能分解为任何简单的GPU并行化方案)上重复运行数值密集型优化问题的需要,已验证选择第二种方法更有效率,而不是试图在另一次试验中烧掉数十人*年以重新发明轮子。

在学术界环境中,人们可能会更容易地获得对资源池的可接受访问以处理工作包,而商业实体可能会根据其可接受的预算门槛获得相同的资源。


在此处输入图像描述

于 2014-07-28T09:11:45.933 回答
0

我的直觉是建议为此推出您自己的解决方案,因为就像您所说的那样,您依赖 IPython 不会崩溃。

我会在每个节点上运行一个简单的 python 服务来监听运行命令。当它收到一个时,它会启动你的 C 程序。但是,我建议您确保 C 程序是真正的 Unix 守护程序,因此当它运行时,它会完全断开与 python 的连接。这样,如果您的节点 python 实例崩溃,如果 C 程序成功执行,您仍然可以获取数据。让 C 程序将输出数据写入文件或数据库,并在任务完成后将“已完成”写入“状态”或类似内容。python 服务应监视该文件,并在指示完成后检索数据并将其发送回服务器。

这种设计的中心思想是尽可能少的故障点。只要 C 程序不崩溃,您仍然可以通过一种或另一种方式获取数据。至于处理系统崩溃,网络断开等,这取决于你。

于 2014-08-02T06:40:32.423 回答