将并行Python代码迁移到云端
听说我正在为一位研究人员做的科学计算项目(这个项目是随机轨迹追踪方法,具体可以参考这里)在我们50台节点的集群上需要花费4个月的时间,这位研究人员让我考虑其他的选择。现在这个项目使用并行的Python,把一个4维数组的不同部分分发到不同的集群节点上处理,然后再把处理好的部分合并起来。
我现在处理的任务可能粒度太粗了(每个任务需要5秒到10分钟,我不得不在并行Python中增加超时的默认值),我估计如果重新编写代码,更好地利用资源,处理速度可以提高2到4倍(分割和合并数据的过程太慢了,这部分也应该并行处理)。大部分工作都是通过numpy数组来完成的。
假设2到4倍的提升还不够,我决定把代码迁移到我们的本地硬件之外。对于像这样的高吞吐量计算,我有哪些商业选择?我需要如何修改代码呢?
2 个回答
你可能会对PiCloud感兴趣。我自己没用过,但他们的服务似乎包括了Enthought Python Distribution,这个包里有很多常用的科学库。
很难说这个是否适合你的具体情况,不过Parallel Python的接口比较通用。所以希望你不需要做太多的修改。也许你还可以写一个自定义的调度器类(实现和PP一样的接口)。其实这对很多人来说可能都很有用,所以你可以在PP论坛上寻求一些支持。
最常见的商业选择就是亚马逊的EC2和Rackspace云服务。我试过这两者,发现Rackspace的API稍微好用一点。
好消息是,你可以以很少的投入来试验和玩弄他们的计算实例(就是你选择的操作系统的虚拟机,不管是短期的还是长期的),通常大约只需每小时0.10美元。你可以按需创建这些虚拟机,完成后再把它们释放回云端,只需为你使用的时间付费。例如,我看到一个关于Django部署的演示,使用了6个Rackspace实例,大约花了一个小时,费用不到一美元。
对于你的情况(不太清楚你说的“高吞吐量”具体指什么),你需要考虑你的预算和计算需求,还有你的网络总吞吐量(这个也是要收费的)。做几个小规模的测试,再简单算一下,应该能告诉你这样做是否真的可行。
Rackspace云和亚马逊EC2都有Python的API。无论你选择哪个,我推荐使用基于Python的Fabric来自动化部署和配置你的实例。