2014-07-27 70 views
3

我目前正在使用C语言编写的一些模拟代码,它运行在不同的远程机器上。虽然C部分已经完成,但我想通过使用python模拟api和某种作业队列系统来扩展它来简化我的工作,它应该执行以下操作:IPython并行计算与pyzmq集群计算

1.指定一组参数,在该参数上模拟应进行,并经工作人员把它们放在一个队列中的主机上

2.perform模拟在远程机器上

3.返回结果给主机

我看了一下为实现不同的框架这项任务和我的第一选择归结为IPython.parallel。我查看了文档,并从我测试的内容中看出它很容易使用。我的方法是使用一个负载平衡的观点就像在

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

解释但我不明白的是:

  • 会发生什么,即如果ipcontroller崩溃了,是我的工作队列到哪里去了?
  • 如果远程机器崩溃会发生什么?是否有某种错误处理?

由于我运行了相当长的模拟(1-2周),我不希望我的模拟失败,如果系统的某些部分崩溃。那么在IPython.parallel中可能有某种方法可以处理这个问题吗?

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

最后但并非最不重要的是,这种情况下可能有更好的框架吗?

回答

0

幕布背后的问题是关于如何安排工作包流程(并行)的数字处理管道的复杂视图。

身为工作包一个多CPU核周(S)的,

正在作业的包干费成交量高于几个百的,成千上万的CPU核心小时,原则是相似的,并遵循常识。

主要特点

  • 参与的所有资源的计算性能(理想的是线性之一)的可扩展性
  • 的任务提交作用
  • 故障易于提交t的可靠性问(S)(最好用自动自愈
  • 访问/使用资源(前期共$ TS足够池的可行 TCO成本,经常性合作$ TS,适应$共同$ TS的$ $共同TS撒尿)

解决途径

  • 家酿造架构的分布式大规模并行调度基于自愈计算引擎

  • 再利用基于自己的经验提供基于网格的计算资源

的解决需要在广大parameterSetVectorSPACE(数值集约优化问题的重复运行可能不会去组合成任何轻视GPU并行处理方案)中,第二种方法的选择已经被验证为更有成效,而不是试图在重新发明车轮的另一个试验中烧数十个人*年。

在学术界的环境中,人们可以更容易地接受资源 - 处理工作包的资源池,而商业实体可以根据其可接受的预算阈值获取相同的资源。


enter image description here

0

我的直觉是因为喜欢你,否则说你根据IPython的不轰然建议轧制这是你自己的解决方案。

我会在侦听运行命令的每个节点上运行一个简单的python服务。当它收到一个它启动你的C程序。不过,我建议你确保C程序是一个true Unix daemon,所以当它运行时它完全脱离python。这样,如果你的节点python实例崩溃,你仍然可以获取数据,如果C程序成功执行。让C程序将输出数据写入文件或数据库,并在任务完成时将“完成”写入“状态”或类似内容。 python服务应该监视那个文件,并在完成时指示它应该检索数据并将其发送回服务器。

这种设计的核心思想是尽可能少的失败点。只要C程序没有崩溃,你仍然可以以这种或那种方式获取数据。至于处理系统崩溃,网络断开等,这取决于你。