HPC集群计算机上的python

时间:2014-11-10 23:31:59

标签: python subprocess mpi cluster-computing hpc

我问了一个非常接近这个的问题,但没有回答,从那以后我希望我学会更好地提出这个问题。

我很好奇如何在Cray XE6机器上连续运行多个作业。您通常使用ccmrun(用于连续作业)或aprun(而不是mpirun或mpiexec)来查找内容。我首先想要使用Pool()函数,但由于它不是基于SMP的硬件,因此它将限制为32个处理器。即使像池一样的mpi4py应用程序也行不通,因为我没有给主程序所有的处理器。如果我说aprun -n 64 mpipool.py,我将运行该脚本64次,而如果我执行类似aprun -n 1 -d 32 pool.py的操作,它会工作。

我已经看过https://wiki.python.org/moin/ParallelProcessing网站了,并且想知道是否有人在集群计算机上运行多个串行作业的任何经验。我确实编写了一个mpi4py代码,基本上排名为0,完成所有工作选择,然后将它们分配给其他处理器。它不想在机器上玩得很好,因为我需要使用子进程来启动大量的C代码。所以,最后一点需要注意的是,它必须与子进程一起运行。

我想看一下所选择的节点数量,然后基本上按照以下方式做一些事情:

ccmrun jobscheduler.py& ccmrun jobrunner.py 63& #鉴于我开始使用64个处理器。我可能不得不在这里做一个bash循环,但这没问题。

一旦开始,我希望他们能够在彼此之间进行通信,但是没有MPI,我不确定这样做的有效方式。如果有人能让我开始走上正确的道路,我将非常感激。也许做一个pickle转储并锁定它们并在jobrunner选择它时删除它们。可能有一种非常简单的方法,但我对此很新。

谢谢!

1 个答案:

答案 0 :(得分:1)

我对Cray机器一无所知,但无论如何我都会对此嗤之以鼻。我注意到你提到qsub让我觉得系统正在使用PBS或Torque。两者似乎都支持Job Arrays,这可能与您正在寻找的方向一致。

Job Arrays会使队列系统负责作业管理。将为每个子工作分配一个您指定范围之外的数组ID,并为您分配您使用-l请求的任何资源。在Torque中,'#PB -l nodes = 1'和'#PBS -t 1-64'将创建64个子作业,索引从1到64,每个子节点被分配一个节点。手册页和谷歌将是一个很好的资源,从我看到的Torque和PBS的语法不同。如果这不起作用,您可以查看在单个较大的作业中使用pbsdsh。

另外,我想提一下,互联网上陌生人的建议只会带你到目前为止。您的本地管理员可能有限制或安排策略,您可能会限制您的选择。您也可以从管理员那里获得有关其他可靠解决问题的方法的建议。