0

下面是与我要问的问题相关的代码。我正在使用具有 13 个计算节点和 1 个顶级节点(又名主节点)的集群。顶部节点是连接所有用户的节点,因此它被分配了更多内存,因此它可以运行得更快。但是,我想提高其他节点的速度,因为它们与顶级节点相比运行速度非常慢,并且我想在不进行任何服务器和/或硬件调整的情况下提高它们的速度。考虑到这些限制,我想知道是否有一种方法可以根据我在计算节点上启动模拟的方式来完成更快的计算。目前,要在某些初始条件下启动部分模拟(如下所示),我只需 ssh 到计算节点,然后启动我的模拟。有没有更好的方法可以提高计算速度(我认为可能有比 ssh 更快的方法?)。任何帮助将不胜感激....我知道有一种叫做 MPI 的东西,但是对于我正在从事的项目,如果我可以提高 ssh 节点的计算速度,我不认为实现 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 是一个程序,用于运行具有不同初始条件的模拟,这些初始条件基于正在使用的节点。

4

3 回答 3

0

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

于 2012-12-22T20:11:49.473 回答
0

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

于 2013-01-03T18:14:30.710 回答
0

我想知道是否有一种方法可以根据我在计算节点上启动模拟的方式来完成更快的计算。

好吧,您的 SSH 启动脚本中有一个sleep。您可以尝试删除它。

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

但除非您的工作是短暂的,否则不要费心更换 SSH。(即从 1 分钟的工作中减少 100 毫秒的时间并没有那么有用。)

我想提高其他节点的速度

没有灵丹妙药:最好的办法是戴上侦探帽,试着找出瓶颈在哪里:

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

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

3) 即使你的 CPU 已经用尽了,是不是因为你是用脚本语言写的?首先,优化你的算法,然后尝试用像golang这样更快的语言重写。(并免费获得多线程。)

请记住,过早的优化是万恶之源。您应该始终测量,然后尝试估计每个零件的制造速度。先摘下低垂的果实,把最小的收获留到最后。(你可能永远无法获得小额收益,因为会出现更重要的事情。)

于 2014-04-06T05:57:18.793 回答