使用超算小结

最近在学习使用超算来跑实验室的程序,将一周的学习心得记录在这。另外,Linux的及超算使用的基础几乎为0,描述有错请及时指正!

前提:使用的超算集群分为登录服务器user@login和其他运算服务器,以下统称为n节点,且整个集群共用同一存储。可以理解为系统为每一位用户开辟一块存储,登录节点只允许登录登出操作,部署任务需要切换到其他可用的节点,但由于这些节点共用存储,所以只需将程序和数据上传一次即可在任一节点下查到。这样,我们很容易就可以实现并行运算,比如,将数据集拆成10份,调用10个可用节点分别去执行程序分析数据,最后将10份结果汇总,就得到了整个数据的结果。

使用中遇到的问题:

1.拆分数据集

这一步我们直接平均分配,由于数据集是一些分散的矩阵,可以很容易的按数量来拆分,但是对于互相之间有关联的数据就需要更精细的划分了。

2.节点的使用

使用Xshell登录服务器之后,键入bhosts指令查看当前的可用节点,利用ssh指令连接要使用的节点,之后便可以执行自己的程序了。例如

ssh 节点名称  #登录该节点,可能需要输入密码
java Test    #执行名为Test的java程序
exit     #退出当前节点,这一步很重要,直接叉掉xshell会导致该进程继续存在,可能有隐患

 

3.如何进行多节点使用

如果对脚本比较熟悉可能就没有这个疑问了QAQ(感受到知识的匮乏),为了同时调用几个节点执行任务,查阅了各种资料,其中一篇https://www.ibm.com/developerworks/cn/aix/library/au-aix-run-commands/index.html给我们带来了启示。为了实现并行还鼓弄了半天dsh和pssh,后来才顿悟我们的集群在物理上就可以实现了并行,由于共享内存,直接循环调用可用节点执行程序去分析不同的数据就完事了,此后开始研究shell脚本命令。

3.shell命令

这里需要用到循环,将节点名称进行循环,然后ssh,再执行命令,最后退出,期间要将输出信息重定向到指定文件,代码如下

#!/bin/bash
j=0   #变量,为了传参使用
for server in node06 node07 node08 node09  #循环6、7、8、9节点
do
j=`expr $j + 1`     #j++
ssh -tt ${server} <>myout.txt 2>&1 &  #将程序设为后台执行,且将输出信息重定向
                                              #到myout.txt中,java -jar xx.jar $j为执行命令
exit
EOF
done
echo "finish"

4.其他

在ssh时可能需要输入密码,使用免密登录即可直接连接,具体做法可用查其他教程,我们只是执行了ssh-keygen就完成了免密登录,可能是各个节点共享存储吧,免去了复制公钥文件到各个服务器下的步骤。

以上就是我们使用超算的一些总结和心得,小白一只进攻参考,有错误的地方还望在评论区指正,我会及时修改,谢谢!

你可能感兴趣的:(使用超算小结)