如何提高linux集群上计算节点的并行处理速度?

时间:2012-12-21 16:44:42

标签: linux shell parallel-processing cluster-computing numerical-methods

以下是与我提出的问题相关的代码。我正在使用一个具有13个计算节点和1个顶级节点(a.k.a。主节点)的集群。顶级节点是连接所有用户的节点,因此它可以分配更多内存,因此可以更快地运行。我想提高其他节点的速度,因为它们与顶级节点的运行速度相当慢,我想提高速度而不进行任何服务器和/或硬调整。考虑到这些限制,我想知道是否有办法根据我如何开始计算节点上的模拟来实现更快的计算。目前,为了在某些初始条件下开始模拟的一部分,(这可以在下面看到)我只是ssh到计算节点上,然后启动我的模拟。有没有更好的方法来提高计算速度(我认为可能有比ssh更快的东西?)。任何帮助将不胜感激....我理解有一些叫MPI,但对于我正在研究的项目我不相信如果我可以增加ssh'd节点的计算速度,实现MPI是必要的......谢谢。

./ NodeHopper.sh

#!/bin/sh
#NodeHopper uses shell script to run psuedo-parallel computing over a cluster

#The top node is not named sequentially, so its not in the proceeding loop.
#Instead, it is given the node value 13 for computations later

export PROG=13
nohup ./ParaCage.sh & #Runs ParaCage.sh on the main node for the cluster

#Does other nodes sequentially #0 through 12
for i in {0..12}
do
  export PROG=$i 
  #PROG is passed into ./ParaCage.sh and tells ./ParaKeet.sh which initial conditions  
  #to use for the simulation.
  ssh compute-0-$i PROG=$PROG ./ParaCage.sh &
  sleep 1
done

./ ParaCage.sh

#!/bin/sh
echo "Tunneling to Node:"
echo $PROG
echo "Complete"

cd multichmoII/multichmo$PROG/chmo/
./ParaKeet.sh

ParaKeet.sh

ParaKeet.sh是一个程序,用于运行基于正在使用哪个节点的不同初始条件的模拟。

3 个答案:

答案 0 :(得分:0)

也许你应该从bash转移到python并在那里使用多线程?然后你可以并行ssh到节点,这可以提高速度。

答案 1 :(得分:0)

根据您正在运行的模拟的性质,最好将模拟本身分开 - 并行处理。如果每个节点都不够强大,无法自己有效地运行程序,那就是这种情况。另一方面,如果模拟很容易分解为并行线程 - 每个线程使用更少的内存/处理器功率 - 那么每个节点可能非常适合处理您分配它的每个组件。

答案 2 :(得分:0)

  

我想知道是否有办法根据我在计算节点上启动模拟的方式来实现更快的计算。

嗯,您的SSH启动脚本中有sleep。您可以尝试删除它。

SSH确实有一些开销(为每个“消息”生成一个新进程;只有加密连接,即使您可能不需要它)。因此,您可以使用适当的分布式任务队列替换SSH。有很多替代方案,包括CeleryResque。事实上,您可以使用Redis或0MQ轻松编写自己的。

但除非你的工作是短暂的,否则不要费心替换SSH。 (即从1分钟的工作中剔掉100毫秒并不是那么有用。)

  

我想提高其他节点的速度

没有灵丹妙药:你最好的办法就是戴上你的侦探帽并试图找出你的瓶颈所在:

1)查看其他节点上的“top”。所有的CPU都被最大化了吗? (如果没有,您可能希望为每个CPU生成一个任务而不是每个框一个任务,或者重写您的任务以使用多个线程。)

2)每个节点是否从中央(和过载)NFS服务器中提取文件? (如果是这样,在本地复制/缓存文件可能会更快,或者有多个服务器从中提取数据,或使用bittorrent等。)

3)即使你的CPU被最大化,是不是因为你用脚本语言写的?首先,优化算法,然后尝试用更快的语言重写,如golang。 (并免费获得多线程。)

请记住,过早优化是万恶之源。您应该始终测量,然后尝试估计每个部件的制作速度。首先选择低悬的水果,留下最小的收益。 (你可能永远无法获得微小的收益,因为会出现更重要的东西。)