利用python科学代码收集高度并行计算机的强大功能

Uri*_*hen 7 python parallel-processing concurrency scientific-computing multiprocessing

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

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

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

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

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

Bog*_*ych 5

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

cat inputs | parallel ./job.py --pipe > results 2> exceptions
Run Code Online (Sandbox Code Playgroud)

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

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


use*_*871 2

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

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