用python科学代码收集高度并行计算机的力量[关闭]

问题描述 投票:7回答:4

使用Python编写科学代码时遇到以下问题:

  • 通常,您会迭代地编写代码,作为执行某些计算的脚本。
  • 最后,它有效; 现在您希望使用多个输入和参数运行它,并发现它需要花费太多时间。
  • 回想一下,你为一个优秀的学术机构工作,可以使用大约100台CPU机器,你很困惑如何获得这种能力。 首先准备小shell脚本,使用不同的输入运行原始代码并手动运行它们。

作为一名工程师,我知道所有关于正确的架构(工作项排队,工作线程或进程,工作结果排队并写入持久存储); 但我不想自己实施。 最棘手的问题是由于代码更改或临时系统问题(例如内存不足)而需要重新运行。

我想找到一些框架,我将提供所需的输入(例如,每个运行一行文件)然后我将能够启动一些框架提供的代理的多个实例,它将运行我的代码。 如果运行时出现问题(例如临时系统问题或由于bug导致的抛出异常),我将能够删除结果并运行更多代理。 如果我占用太多资源,我将能够在不担心数据不一致的情况下杀死一些代理,而其他代理会在找到时间时获取工作项。

现有解决方案吗? 有人希望分享他的代码吗? 谢谢!

python concurrency parallel-processing multiprocessing scientific-computing
4个回答
5
投票

我可能错了,但只是使用GNU命令行实用程序,如parallel ,甚至xargs ,对我来说似乎适合这种情况。 用法可能如下所示:

cat inputs | parallel ./job.py --pipe > results 2> exceptions

这将job.py为每行inputs执行job.py ,将成功结果输出到results ,将失败的results输出到exceptions 。 在这个Biostars线程中可以找到很多用法示例(也适用于科学Python脚本)。

并且,为了完整性, 并行文档


2
投票

如果您“ have access to a ~100 CPUs machines ”意味着您可以访问100台机器,每台机器都有多个CPU,并且如果您想要一个通用的系统用于不同类型的应用程序,那么最好的(并且在我的只有意见)解决方案是在资源和工作输入之间建立一个管理层。 这根本不是Python特有的,它适用于更广泛的意义。 这样的层管理计算资源,将任务分配给单个资源单元并监视整个系统。 您可以通过管理系统提供的定义良好的界面来使用资源。 如管理系统通常称为“批处理系统”或“作业排队系统”。 流行的例子是SLURM,Sun Grid Engine,Torque,....设置它们每个都不是微不足道的,但你的要求也不是微不足道的。

基于Python的“并行”解决方案通常通过multiprocessing停在单机级别。 以自动方式在单个机器之外执行并行性需要配置良好的资源集群。 它通常涉及更高级别的机制,例如消息传递接口(MPI),它依赖于正确配置的资源系统。 相应的配置在操作系统甚至硬件级别上在资源池中涉及的每台机器上完成。 最终,涉及许多同质或异构性质的单个机器的并行计算环境需要建立这样的“批处理系统”以便以一般方式使用。

您意识到您无法正确实施此类资源池。 但是你可以做的就是完全隔离你的应用层。 您曾以通用方式实现此类托管资源池,可供任何来自通用接口的应用程序使用。 此接口通常通过提供作业提交,监视,删除,...命令在命令行级别实现。 由您来定义作业是什么以及应该使用哪些资源。 由作业排队系统决定将作业分配给特定的机器,并由(正确配置的)操作系统和MPI库来确保机器之间的通信正常工作。

如果您需要在一台应用程序中使用分布在多台计算机之间的硬件,并假设这些计算机可以通过TCP / IP相互通信,那么有一些基于Python的解决方案可以实现更少的通用作业排队系统。 您可能希望查看http://python-rq.org/http://itybits.com/pyres/intro.html (还有许多其他类似的系统,都基于独立的消息/排队例如Redis或ZeroMQ)。


2
投票

首先,我想强调的是,Uri在他的问题中描述的问题确实面临着许多人进行科学计算。 可能不容易看出您是否使用具有明确定义范围的开发代码库 - 事情不会像科学计算或数据分析那样快速地改变。 这个页面有一个很好的描述,为什么人们希望有一个简单的解决方案来并行化代码片段。

因此, 这个项目是解决问题的一个非常有趣的尝试。 我还没有尝试过使用它,但看起来非常有前途!


2
投票
  • 通常,您会迭代地编写代码,作为执行某些计算的脚本。

这让我觉得你真的很喜欢ipython笔记本

笔记本是一种文件,其结构是文档和交互式python解释器之间的混合。 在编辑文档的python部分时,可以执行它们并将输出嵌入到文档中。 这是一个非常好的编程,你正在探索问题空间,并希望随时做笔记。

它还与matplotlib高度集成,因此您可以内联显示图形。 您可以嵌入Latex数学内联,以及许多媒体对象类型,如图片和视频。

这是一个基本的例子 ,一个更加华丽的 例子

  • 最后,它有效; 现在您希望使用多个输入和参数运行它,并发现它需要花费太多时间。
  • 回想一下,你为一个优秀的学术机构工作,可以使用大约100台CPU机器,你很困惑如何获得这种能力。 首先准备小shell脚本,使用不同的输入运行原始代码并手动运行它们。

这让我觉得你真的很喜欢ipython集群

iPython集群允许您跨多台计算机运行并行程序。 程序可以是SIMD(听起来像你的情况)或MIMD风格。 可以交互式编辑和调试程序。

在最近的SciPy活动中,有几次关于iPython的讨论。 访问PyVideo.org并进行搜索可以提供大量视频,包括:

我没有看过所有这些,但它们可能是一个很好的起点。

© www.soinside.com 2019 - 2024. All rights reserved.