集群hosts文件内容

hosts文件内容  时间:2021-01-14  阅读:()

计算化学集群构建教程张鋆编前言本教程的目的是为读者提供计算机集群组建及其在计算化学中的应用的入门知识.
我们将先讲一些基本概念,然后以最快的速度进入实践阶段,使大家能够在最短的时间内迅速建立起一个可以从事高性能计算的集群.
本教程的主要内容是以普通的高端PC,服务器,千兆网等多数实验室所能负担的起的硬件为基础,介绍如何构建一个具有完整文件共享,并行计算和作业排队与调度功能的高性能计算机集群.
这个教程,可以为从来没有组装过集群的读者提供一些入门的知识,从而可以在组内构建自己的集群而免去在别的地方"交钱""排队"的苦恼.
有人会问:自己组建的集群和付费购买机时的集群会不会性能有很大差异从单机计算的能力来看,高端PC已经和最好的单机相差不大,而并行方面,由于专业机构有高水平的优化工程师和性能卓越的网络硬件(当然这一切是以高成本为代价的),普通的研究组一般难以到达它们的水平.
但是,对于计算化学科研领域,大多数组需要计算的体系,即使是很大蛋白质的长时间动力学(如100000原子的100ns动力学这种任务),借助本教程里面的技术,即MPI并行+GPU加速+自行编译,也可以不困难地完成.
毕竟,科研的灵魂是idea,而不是比谁的体系大,谁的速度快.
如果需要特别的技术,例如分布式IO等,本教程里的技术就略显不足了,不过依然可以作为一个入门来介绍.
本教程选取的软件技术如Debian,Torque,NFS等都是比较简单而实用的软件,都经过作者测试.
这些东西足以满足大多数要求,而且网上的文章也很多,遇到错误便于随时查阅.
专业大型集群的技术则更加高级,如我们使用NFS来共享同步文件,而超大型集群则会用Lustre等来实现.
这些技术读者如有兴趣可以参考这方面的资料.
在本教程的第三章还介绍了一些软件安装,编译和编程环境的设置的知识.

一些计算化学的初学者常常面对软件的编译无从下手(如某人曾经半年也没编译出SAPT2008来).
本来作者想将编译过的全部软件介绍一下,但是这样会使本教程变为一个无聊的软件集锦.
所以这一章以Gaussian,NAMD,Autodock和MKL为例,分别介绍了四个类型的计算化学软件的配置技术.
通过这四个软件的配置的练习,再面对新的软件,读者就应该有足够的经验来应对了.
如果还有困难,可以参考网上的文章.
本书并没有专门介绍Linux,NIS,NFS系统或者Torque,Maui软件的知识,读者可以参考相应的教材或者网上的资料,最重要的则是软件本身的文档,这个非常重要!
这个文档最早写成于2009年5月,曾在小范围内传播过.
后来在2010年左右因集群升级,添加了一些新技术.
在2011年5月时再次重新整理并定稿.
希望这个教程能够为读者提供一些帮助!
如果读者在教程中发现了错误并对作者进行指正,作者将不胜荣幸!
作者:张鋆,南开大学(zhangjunqcc@gmail.
com)2011年5月29日前言(2016)本教程上次定稿是在2011年.
后来有反映下载链接失效的,这次我把它挂在我的个人网站上(www.
zhjun-sci.
com),希望这样就可以永久保存了.
这次把教程中一些过时的内容和说法删除,但是限于作者精力已经不可能更新,敬请谅解.
作者:张鋆,南开大学(zhangjunqcc@gmail.
com)2016年12月2日目录第一章绪论.
1§1.
1计算机集群的基本概念.
1§1.
2计算机集群的软件结构.
4第二章集群的系统配置.
7§2.
1操作系统的安装.
7§2.
2网络通信系统的建立.
9§2.
2.
1SSH:主机间无密码的远程登录.
10§2.
2.
2NFS:主机间的文件共享11§2.
2.
3NIS:主机间的用户同步13§2.
3编译器的安装.
15§2.
3.
1GNU编译器.
15§2.
3.
2intel编译器.
16§2.
4并行计算环境的配置.
17§2.
5作业系统的建立.
19§2.
5.
1Torque的安装.
20§2.
5.
2Maui的安装20§2.
5.
3Torque和Maui的配置.
21§2.
5.
4mpiexec的安装23§2.
6第一次运行集群.
23第三章集群的计算化学软件配置.
26§3.
1Gaussian03安装与配置.
26§3.
1.
1Gaussian03的安装.
26§3.
1.
2Gaussian03的单机配置.
27§3.
2NAMD安装与配置28§3.
2.
1组件安装.
29§3.
2.
2charm++安装29§3.
2.
3NAMD编译31§3.
2.
4NAMD运行32§3.
3Autodock的安装与配置33§3.
4MKL编程环境的构建.
34第四章集群的管理技巧.
38§4.
1用户管理.
38§4.
1.
1用户权限.
38§4.
1.
2高效的管理.
38§4.
2作业管理.
39§4.
2.
1管理员管理.
40§4.
2.
2普通用户管理.
43第五章GPU在集群上的应用.
45§5.
1GPU/CUDA的安装配置45§5.
1.
1驱动程序的安装.
45§5.
1.
2程序开发环境.
45§5.
1.
3CUDA编程测试46§5.
2NAMDCUDA版本的安装46继续前进!
错误!
未定义书签.
第一章绪论第1页第一章绪论§1.
1计算机集群的基本概念正如题目所示,本教程的目的是为读者提供计算机集群组建及其在计算化学中的应用的入门知识.
可能对大多数读者而言,"集群"什么的是一个全新的概念——没关系,万丈高楼平地起,我们先讲一些基本概念,然后将以最快的速度进入实践阶段,使大家能够在最短的时间内迅速建立起一个可以从事高性能计算的集群,为大家的科研提供帮助.
本教程主要面向从事计算化学的读者(当然也包括其它有计算机集群需要的读者),相信大家知道,计算化学研究中常常需要巨大的计算量,无论对CPU速度、存储容量和总线带宽都要很高的要求.
例如,conventionalSCF计算中,一个有1000个基函数的体系,所需要计算的双电子积分量约为1012个,按双精度存储需要1.
8TB,对于计算速度和存取速度都是极大的负担;在对神经系统的分子动力学模拟中,钾通道动态工作的时间尺度为毫秒级,而即使利用500核的Alpha机器,也只能达到每天4纳秒的速度.
这样的速度是人们无法接受的.
解决这些计算问题的方法,从理论上应当发展新的更高效的算法,诸如量子化学中的线性标度方法等等;从硬件角度说,需要发展更新的硬件,但由于物理定律的限制,单个计算机的硬件能力已经接近极限,例如CPU主频的提高是以发热量的增加为代价的,而现代CPU的主频已达到4.
00GHz左右(实验室产品),更高的主频由于发热量巨大而难以实现.
从计算机的角度上来说,可以通过使用超级计算机来解决.
但是,这类超级计算机,硬件研发费用昂贵,软件投资更加高居不下,开发出来的软件无法移植,并且学习代价非常高,非一般研究组所能负担的起.
那么对于一般的研究组,如何才能突破计算瓶颈呢答案就是本教程的核心概念:计算机集群(computercluster)!
相信很多实验室内部都有局域网,即一大堆计算机通过路由器等连成一个整体,大家可以通过路由器上外网,而内网中,大家可以通过网络共享文件,如Windows下的"共享".
好了,既然局域网可以共享文件,为什么不可以共享计第一章绪论第2页算能力呢好了,我们学院派的定义一下计算机集群:一组计算机软件和硬件连接起来高度紧密地协作完成计算工作的计算机系统,可以被看作是一台计算机,这种系统就称为计算机集群.
也就是说,只要大家有几台计算机(PC或服务器),一个路由器,几根网线,我们就可以把它们连接起来,通过一些软件,使它们的计算能力得以共享,实现并行计算(parallelcomputing),不仅可以实现高速的计算,而且可以使计算工作规范化,从而大大的提升科研效率!
如图1-1-1所示,这是作者所在实验室的组建的一个集群的实景(摄于2009年).
这个集群现在已扩充升级.
图1-1-1集群系统实景图(摄于2009年)下面我们讲几个计算机集群中常用的术语和概念.
这些概念可以为读者组建集群打下坚实的基础.
节点(node).
集群中单独的每一台计算机称为节点.
这些计算机,既可以是普通PC也可以是服务器.
按照现在的发展(2011年前后),高端PC和服务器的计算能力已经相差无几,而PC的成本较低,不失为是个很好的选择.
服务器的优点在于可靠性高,即平均无故障时间长.
比如,一个500台计算机构成的集群连续运转一年,若全部为服务器,一个月平均可能只有几台机器出故障,若全部为PC,则可能平均每一天都会有机器崩溃.
当然,对于普通研究组而言,第一章绪论第3页情况没有那么夸张.
读者根据自己的需要决定是选择PC还是服务器.
控制节点.
集群中需要多台计算机相互协作的完成任务,因此必须有一台计算机作为"核心"领导者,控制其它的计算机,为其它的计算机分配计算任务,调整负载等等.
这个节点习惯称为控制节点.
一般而言,控制节点可以选一台CPU、内存一般(几个GB内存足矣!
)的机器以节约成本,但是必须有大容量的硬盘来存储用户的文件,即使是很小的组也一般最好是1TB以上(貌似更小容量的硬盘已经没有卖的了),根据本组的人员数量和科研任务决定,作者知道某个分子动力学研究组每个月都会有几个TB的轨迹文件产生.
计算节点.
计算节点就是集群中直接进行计算任务的计算机,这是决定计算机集群性能的最关键因素之一.
自然,CPU主频越高,内存越大,总线带宽越高,对计算就越有利.
当然,具体的任务对这些硬件的要求不同.
对于分子动力学模拟计算,内存的要求很低,一般1~4GB的内存就可以,但是要求CPU具有强大的计算能力,最好在32核(或双16核).
对于量子化学计算,除了要求有强劲的CPU外,还要求有高容量和高读写速度的内存、硬盘,因为量子化学计算常常需要大容量的缓存文件,如果存储容量不够,会对计算速度带来很大的影响.
通常,内存最好在256GB以上;硬盘最好在1TB以上,特别是需要大量相关方法计算(如MP2或CCSD(T)计算)时,硬盘的读写速度也十分重要.
有些计算,诸如分子对接这种计算,对计算机性能要求很低,普通的高端配置即可.
现代计算机有32位,64位等多种架构.
64位架构的机器当然是最好,但是大多数研究组可能无法承担它的购买成本.
现在的计算主流是选用虚拟64位的机器,如em64t和AMD64等.
本教程就是以虚拟64位机器为例介绍的,即所谓x86_64或者amd64机器.
通信网络.
顾名思义,就是集群中连接各个节点的网络.
这是决定计算机集群性能的另一个最关键因素.
在进行并行计算时,网络速度是整个计算速度的瓶颈.
这个网络,当然可以选择使用普通实验室中的局域网连接即"宽带网加路由器"结构.
集群中,这个网的带宽最低不能低于百兆,即至少在千兆以上,再低的网在计算时可能会出显各种由于网络延时过长而导致的错误.
如果读者能使用高性能的集群专用网络,如Myrinet或者InfinitBand,那当然更好,这可以大大地提升集群的并行效率!
不过,这是要很高的成本的.
第一章绪论第4页维护部件.
这是维持集群能够正常工作的部件,包括散热系统如空调和电源、机柜等.
因为集群常常要长时间高功耗的工作,如果不能保持适当的温度和稳定的电源,计算机内部出错的概率就会大大的提高,轻则死机导致作业失败,重则烧毁硬件造成损失.
特别是热天,集群高速运转时会有很高的温度,一定要做好降温的工作;如果有断电通知,记得事先将总插头拔下,以免恢复供电时瞬时电流的冲击将机器烧毁.
好了,下面我们来讨论一下构建集群所需要的软件基础.
离开之前,我们必须声明,本教程介绍的是面向科学计算用户的"高性能集群(HighPerformanceCluster,HPC)",而不是面向企业的"高可用集群(HighAvailabilityCluster,HAC)".
后者常常用于建立企业网站,服务器,大型数据库(如Oracle数据库).
这两者对性能要求的层重点完全不同!
§1.
2计算机集群的软件结构有了硬件后,要真正实现集群,还必须有优秀的软件进行支持.
集群的软件结构包括以下几部分:操作系统.
虽然世界top100的集群中确实有Windows集群,但是我们强烈推荐读者使用Linux操作系统.
Linux免费,方便,最重要的是效率高,很多计算化学软件都是专门为Linux编写的,而且Linux非常适合于程序开发和批量处理.
Linux操作系统也有很多不同的分支.
比较常见的就是RedHat系列,但是本教程不使用它.
我们选择Debian操作系统,与RedHat相比它有很多优点,最大的优点是体积小,安装完系统后只有不到100MB,并且随时可以扩充新的功能,没有冗余的文件,因此非常适合于科学计算.
关于Debian可以在网上找到很多信息.
本教程不会直接讲解Linux或者Debian的使用方法,对Linux不熟悉的读者可以参考:王旭.
Debian标准教程.
北京:人民邮电出版社,2009关于哪个版本的Linux更适合组装集群是一个老掉牙的问题,和"C和C++哪个好"一样,作者认为这是一个特别主观的问题.
有很多人推荐过别的Linux,如:OpenSuse.
这个系统很好用,但是作者不喜欢,因为它的系统太臃肿.
第一章绪论第5页RedHat.
"正统"的Linux,而且带有ClusterTool.
但是作者认为那个ClusterTool不适合做HPC,仅仅适合HAC.
Rocks.
这个系统非常适合做生物计算的集群,但是因为种种原因,作者后来没有使用它,还是因为它太大了!
当然,如果读者的个人偏好和作者不同,也没有关系.
大多数操作在各个Linux间是兼容的.
网络通信系统.
这是集群得以成为"集群"的核心系统.
没有这个系统,集群只是几台互不相干的计算机组成的"机群".
这里的网络通信系统,不止是TCP/IP协议等网络连接功能,还包括文件共享系统、远程登录系统、信息管理系统等,只有这样才能使集群中的计算机成为一个相互协作的整体.
这些功能可以直接使用Debian操作系统的组件完成.
并行计算系统.
这是实现高性能计算的平台.
并行计算系统是实现某种并行计算协议的软件,各种并行计算的程序都要调用并行计算的函数和库才能运行,例如量子化学软件GAMESS,NWChem和分子动力学软件NAMD,Gromacs,Amber等.
它本质上是一种通信协议.
本教程将使用MPICH2作为并行计算系统.
作业管理系统.
这是管理集群的工具.
它负责计算作业的提交、管理、控制,集群资源的分配、调度,用户权限的分配、区分等,对于管理、维护特别是使用集群具有重要的意义.
本教程使用免费软件TORQUE和Maui实现.
应用软件.
这是集群的实用部分,比如Gaussian,NAMD和各种编译器等等.
本教程涉及到的软件,除了Windows操作系统和Gaussian等以外,所有软件均为免费软件!
在继续之前,有一些话需要交代给读者.
Linux系列的软件和其它免费学术类软件都是自由开发的,因此,它们的不同版本之间可能有某些不兼容情形,一些安装时候发生的状况和本教程所描述的可能有很大的不同.
作者曾经帮人装过NWChem,因为作者本人安装过NWChem5.
2,没有遇到过什么问题.
可是别人安装的是6.
0版本,在安装的时候碰到了无数编译错误,最后通过作者手动修改了NWChem6.
0的源码才得以解决(有经验的读者应该意识到这是编译器版本的第一章绪论第6页问题).
读者在继续之前,应该意识到在组建集群的过程中可能会遇到巨大的困难.
这时,可以在网上搜索或咨询身边有经验的人.
不要灰心,一旦集群组建完成,读者的计算机水平会有质的飞跃!
好了,现在说一下本教程的集群的各种信息:1个控制节点,8个计算节点,千兆局域网,安装Debian6系统,安装有;Gaussian,Gamess,NWChem,NAMD,Gromacs,Autodock,以及GNU和intel编译器等等,这个集群可以实现各种计算化学软件的运行,并提供完整的编程开发功能!
说了那么多,读者读完本教程并搭建完成了一个计算机集群后,对于使用集群的人,集群无非是这样一个东西:"……他装了个集群,在隔壁房间里,好像是好多台计算机,有啥计算节点控制节点的,好像还装得神马Linux,我也不懂.
我就知道,我每天在我的实验室,打开Win7,用putty登陆到集群,输入命令qstat,我发现有两个Gaussian和一个NAMD任务在运行.
哦,我前天算的那个NAMD的任务已经结束了,算了七天可算完了,把输出文件下下来看看.
我这有还个gjf,传上去,好,算上了.
现在关了putty,分析分析NAMD的轨迹吧……"好了,概念性的东西到此结束,下面,我们组建集群的激动人心的过程就开始了!
第二章集群的系统配置第7页第二章集群的系统配置§2.
1操作系统的安装到2011年5月时,Debian的最新版本为6.
0,可以在Debian社区的网站http://cdimage.
debian.
org上获得其DVD镜像文件.
根据读者的机器架构下载到相应的镜像,由于我们的机器是amd64架构,只需要下载第一个:debian-6.
0.
1a-amd64-CD-1.
iso当然,完整的镜像包括50多个iso文件,但出于我们组建集群的目的只需要第一个就可以.
如果读者有兴趣可以全部下载下来.
将第一个iso刻录为DVD光盘,利用光盘进行安装.
注意,安装操作系统的过程中,一定要保证外网的连通,因为安装过程需要在外网下载一些组件.
安装操作系统的步骤对控制节点和全部计算节点基本一致,叙述如下.
注意:读者在初学时,可以只装两台机器:一台compuchem,一台node021,等把全部细节弄懂之后,再根据自己的需要扩充新的节点.
事实上,如果读者的计算节点的硬件完全相同的话,完全可以在配置好一台计算节点以后,用Ghost软件拷贝到其它所有机器上,然后将其IP(修改/etc/network/interface)和主机名(修改/etc/hostname)修改成正确的即可.
当然,逐台计算机修改IP和主机名也可以使用shell脚本在控制节点上轻松的实现,因此,工作量不是问题.
下面提到的"在全部计算节点上……"是为了让读者明确的知道,哪些操作只在控制节点上做,哪些只在计算节点上做,哪些在全部节点上做.
1.
将Debian6.
0的光盘插入光驱,在BIOS中选择光盘启动,启动计算机.
2.
如启动成功,屏幕出现Debian的logo,选择textmode按Enter键开始安装.
3.
语言选择American,后面的选项根据具体情况选择,这里选择默认选项.
4.
进入Network设置界面时,选择Cancle取消DHCP,选择手动安装网络,在随后将出现一系列对话框,分别设置IP地址、子网掩码、默认网关、DNS服务器、主机名、域名.
其中IP地址、主机名设置如表2-1-1.
其它选项根据实验室的实际情况设定.
第二章集群的系统配置第8页表2-1-1集群的主机名IP地址设置节点主机名IP地址控制节点compuchem192.
168.
1.
100计算机点node021~node029192.
168.
1.
121~192.
168.
1.
129当然,IP和主机名可以根据读者的喜好来定义.
5.
设置完网络后,会进入分区设置.
对于计算节点,可以直接使用默认设置,整体划分为一个区,没有关系.
对于控制节点,建议至少划分两个区,一个用于挂载根目录"/",一个用于挂载家目录"/home",这个目录作为今后集群用户的工作目录,应该划分的很大,如500GB以上.
6.
在用户设定的界面,为root定制一个密码,密码最好包含有大小写字母、数字、符号等,这样可增加系统的安全性.
对于普通用户,要定义一个合法的用户名(以下以coolrainbow为例)以及一个安全的密码(以下假设为123456).
7.
分区完成后,继续安装,在选择组件的地方,只选择"BaseSystem",安装最基本的系统.
注意,选了这个选项,我们就安装了一个最小的Debian操作系统,并且没有图形界面.
8.
系统会请求选择安装的源(source).
所谓源就是Linux在安装时候下载更新文件的地址.
这个源非常重要,我们要反复用到,建议选择Taiwan或者Japanese,它们的速度比较快.
9.
稍微等待后,安装即可完成,重启计算机.
至此,系统安装完成.
这个过程与网速有关,可能需要不到20分钟,也可能需要1个小时.
现在需要对所有的节点做些准备工作:1.
添加域名解析地址.
打开/etc/hosts文件,添加如下信息:compuchem192.
168.
1.
100node021192.
168.
1.
121node022192.
168.
1.
122node023192.
168.
1.
123node024192.
168.
1.
124node025192.
168.
1.
125node026192.
168.
1.
126node027192.
168.
1.
127node028192.
168.
1.
128node029192.
168.
1.
129第二章集群的系统配置第9页这样就建立了相应的解析关系.
如pingnode023就相当于执行ping192.
168.
1.
123.
2.
将所有计算节点的普通用户及其家目录删除.
也就是说,删除掉node021~node029节点上的coolrainbow用户及其家目录/home/coolrainbow,使用命令:#userdel–rcoolrainbow注意不要删除控制节点的coolrainbow!
好了,操作系统的安装结束,现在开始安装网络通信系统!
§2.
2网络通信系统的建立至此,所建立的机器还是互不相干的九台计算机"机群",而不是相互协作的"集群".
现在的任务是将它们连成一体,成为一个有组织的系统.
下面把这个问题详细的说明一下.
这部分是整个集群技术的核心!
这一节可能会很罗嗦,对于Linux系统原理很熟悉的读者,可以跳过某些解释的部分,直接阅读具体的配置步骤,相信读者一看就会明白集群的组建思想,也许能设计出比作者的配置更简单更高效的方法:如果这样,作者将非常高兴.
如果读者对Linux原理不熟(比如,不知道/etc/fstab是什么东西),可以一边操作,一边搜索其中的知识(如,google一下fstab),这样才能进步.
前面说过,控制节点用来操作计算节点.
前面说了,compuchem是控制节点,node021~node029是计算节点.
实际上,对于用户(而不是像读者一样的集群构建者),控制节点起到了一个黑箱的作用.
比如读者的实验室有两个人将要使用集群,名叫coolrainbow和bingtear.
当用户coolrainbow使用控制节点(比如在Windows7下远程登录到控制节点)时,只要告诉控制节点:"在node023上用8个CPU拿Gaussian算我这个C60.
gjf",控制节点就会执行这个任务,用户完全不需要知道任何关于这个过程如何实现的细节.
事实上,背后的细节是这样的:coolrainbow登录到控制节点compuchem,并发出了上述指令时,控制节点首先检查node023是否可用,如果不可用(比如已经运行了别的任务,或者coolrainbow没有权限使用node023,或者node023已经关机,或者根本不存在,)则拒绝执行;如果可用,使用coolrainbow的用户名登录到node023,在node023第二章集群的系统配置第10页上面执行Gaussian算C60.
gjf的任务.
当然,C60.
gjf文件在compuchem的硬盘上,控制节点必须把compuchem上的C60.
gjf以某种方式让node023得到并运行,且监控这个任务.
一旦算完,控制节点就会报告任务结束,并使C60.
out和C60.
chk出现在compuchem的硬盘上.
node023重新进入了可用状态.
Done!
好吧,这个过程看着容易,实际做起来似乎并不那么简单.
比如,要想coolrainbow能登录各个节点,我们必须从compuchem到node029挨个建立一个叫coolrainbow的相同用户,密码还得全部知道;要执行Gaussian,还得从node021~node029全部安装Gaussian,路经、配置还得完全一样(不然并行计算会出毛病);还得设计套拷贝文件的系统,让机器自动把C60.
gjf拷贝到node023上面,算完了再把C60.
out和C60.
chk拷贝回来……这个过程太可怕了,倘若集群要把Gaussian从03升级到09,那就得9台全部重新来了.
如果读者的组里面很有钱,有100台机器让你升级,嘿嘿……作者的一个老师曾经说过一句话:只要有一件事情用计算机办是很繁琐的,那么肯定有一种技术你没有学会.
没错,无数天才的程序员已经开发了很多优秀的程序来完美的解决上述问题,下面作者将逐步给出解决方法.
再次强调:这部分是整个集群技术的核心!
§2.
2.
1SSH:主机间无密码的远程登录第一步,要实现coolrainbow在各个节点间自由登录.
注意,在§2.
1最后,我们已经在全部计算节点中删除了coolrainbow,因此coolrainbow不能登录到计算节点上.
没关系,首先,安装ssh.
ssh的英文全称是secureshell.
它能够实现计算机间的远程登录,ssh把所有传输的数据进行加密,能够防止数据泄密、DNS和IP欺骗,所以是"secure",还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度.

最初ssh是由芬兰的一家公司开发的.
但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH.
OpenSSH是ssh的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是ssh.
安装OpenSSH,在控制节点和全部计算节点执行:#aptitudeinstallssh第二章集群的系统配置第11页这里,aptitude是Debian下安装程序的命令,此时Debian会自动在它的网上的源中搜索ssh并安装,因此要保持外网通畅.
强烈建议读者搜索一下aptitude的用法!
我们会反复用到.
如果读者用过旧的Debian,可能更喜欢apt-get,没有关系,但是千万不要aptitude和apt-get同时使用,这会使依赖关系变得混乱!
如果读者就是喜欢用RedHat的话,上述命令就得改为yuminstall之类.
有了ssh后,现在配置无密码登录,以后coolrainbow用ssh登陆节点时就不用输入密码了.
在控制节点,以coolrainbow身份(不能是root!
)执行:$ssh-keygen–tdsa$cd/home/coolrainbow/.
ssh$catid_dsa.
pub>>authorized_keys它的原理:假设要想实现从机器A无密码登录到B,A和B双方必须互相有一个的密钥.
第一个命令即是产生密钥,自动生成在家目录的.
ssh文件夹.
然后密钥另一方必须也拥有,这个文件名叫authorized_keys,因此执行最后一行命令,将密钥导入这个文件中.
只要A机器的authorized_keys和B的.
ssh/中的内容匹配,就可以无密码的登录.
现在ssh本机:$sshcompuchemTheauthenticityofhost'192.
168.
1.
100(192.
168.
1.
100)'can'tbeestablished.
RSAkeyfingerprintise4:05:08:65:e4:b8:a0:88:cd:be:16:c8:9e:4b:96:87.
Areyousureyouwanttocontinueconnecting(yes/no)回答yes,即可.
这样本机到本机便可实现无密码ssh登录,以后再次登陆时,就不会出现上面的问题了,也不需要密码了.
有人问:自己到自己ssh有什么用,跟计算节点有什么关系没事,马上就有关系了.
§2.
2.
2NFS:主机间的文件共享第二步,配置文件共享.
coolrainbow要想在node023上面运行Gaussian,首先node023上面得有Gaussian,还得有要运行的文件C60.
gjf等等.
保持这些文件的同步是个很困难的事情.
解决办法就是事用NFS系统.
第二章集群的系统配置第12页NFS(NetworkFileSystem)即网络文件系统,是一种在网络上的机器间共享文件的方法,文件就如同位于客户的本地硬盘驱动器上一样.
NFS服务器可以把文件系统导入给其它系统,NFS客户端可以挂载从其它机器上导出的文件系统.
如果上面的描述看不懂,没关系,我们先把它安装上,然后详细解释.
在控制节点上安装NFS服务器:#aptitudeinstallnfs-kernel-server现在,打开/etc/exportfs文件,这个文件专门用来配置要共享的文件系统.
现在在此文件里添加如下内容:/home192.
168.
1.
0/255.
255.
255.
0(rw,sync,no_root_squash,subtree_check)/opt192.
168.
1.
0/255.
255.
255.
0(rw,sync,no_root_squash,subtree_check)/usr/local192.
168.
1.
0/255.
255.
255.
0(rw,sync,no_root_squash,subtree_check)这个exportfs文件,就是我们要共享文件的配置文件,控制节点compuchem会按照这个文件里面的内容,给计算节点共享文件.
以第一行为例,解释其中的含义:/home:要导出的目录.
/home是用户的家目录,必须要共享计算节点,这样我们的文件才能被计算节点获取.
我们还共享了另外两个目录:/opt和/usr/local.
前者是为了共享后面将要安装的intel编译器;后者,习惯上,Linux下的应用软件都安装到这一目录(相当于Windows下的C:\ProgramFiles),整个集群的计算化学软件如Gaussian等都会装到这个目录下,因此也要共享出去.
192.
168.
1.
0/255.
255.
255.
0:可以挂载的IP范围,这个设置用了一个掩码,表示共享给所有192.
168.
1.
X的IP,我们的计算节点的IP是192.
168.
0.
021~030,所以计算节点可以共享到.
(rw,sync,no_root_squash,subtree_check):挂载的配置.
这里表示可读可写,同步执行,若NFS主机使用分享目录的使用者,如果是root的话,那么对于这个分享的目录来说,他就具有root的权限,强制NFS检查父目录的权限.
重启NFS服务:#/etc/init.
d/nfs-kernel-serverrestart现在,这些目录就被挂载出去.
但是,计算节点还没有"接手"这些目录,现在,让计算节点将这些目录挂载.
打开所有计算节点的/etc/fstab文件,在文件下面添加:compuchem:/home/homenfsrw,defaults00compuchem:/opt/optnfsrw,defaults00第二章集群的系统配置第13页compuchem:/usr/local/usr/localnfsrw,defaults00以第一行为例解释一下这个文件的含义:compuchem:/home/home:表示把compuchem主机的/home目录挂载到本地的/home目录上.
通俗的说,就是当读者在计算节点上访问/home时,实际上访问的是控制节点上的/home.
这和Windows下的共享是类似的.
后面几个参数照抄就可以.
然后重启网络服务:#/etc/init.
d/networkingrestart这样子节点就把服务器共享的文件挂载了.
例如,在node021上,执行如下命令就可以看到.
#dfFilesystem1K-blocksUsedAvailableUse%Mountedon/dev/sda11512252487144561428289161%/tmpfs1037944010379440%/lib/init/rwudev1024040102001%/devtmpfs037944010379440%/dev/shmcompuchem:/home4807190724523844558474881%/homecompuchem:/opt15122524815334721420098882%/optcompuchem:/usr/local15122524815334721420098882%/usr/local看到最后三行了吗我们已经成功的共享了目录!
比如,当我们在控制节点上在/usr/local下安装了一个Gaussian03C时,所有的计算节点都可以通过/usr/local找到完全相同的Gaussian,因为它们实际上是通过网络访问的compuchem上的/usr/local.
NFS的作用,就是把这些操作屏蔽起来,使计算节点在访问网络上的文件时如同访问本地一样.
好了,coolrainbow的目录已经通过NFS共享到计算节点了,但是coolrainbow要想登陆计算节点,计算节点上必须有coolrainbow才行.
好,现在就来这最后一步!
§2.
2.
3NIS:主机间的用户同步第三步,配置用户信息.
这里就要用NIS.
NIS(NetworkInformationService)即网络信息服务,是集中控制几个系统管理数据库的网络用品.
NIS简化了UNIX和LINUX用户的管理工作,客户端利用它可以使用NIS服务器的管理文件,无第二章集群的系统配置第14页需建立他们自己的/etc/passwd,只简单的使用和维护在NIS服务器的文件即可.
1.
在所有机器上安装NIS:#aptitudeinstallnis安装过程中会要求输入NIS的域名,这里必须输入控制节点compuchem.
配置NIS端.
以下操作在控制节点上:2.
确认域名.
打开/etc/defaultdomain(这是包含NIS域名的文件),确认里面有一行:compuchem如果没有则添上;3.
打开/etc/default/nis,修改NISSERVER=master,NISCLIENT=true,这样本机便成为NIS服务器;4.
配置NIS主机.
打开/etc/yp.
conf,写入:ypservercompuchem5.
重启NIS服务:#/etc/init.
d/nisrestart6.
编译用户数据库:#cd/var/yp#make注意:以后无论控制节点对passwd,group,shadow文件做了任何修改,都必须进入/var/yp重新make,才能保证服务器和客户端的用户信息同步.
以下操作在计算节点上:6.
确认域名.
打开/etc/defaultdomain(这是包含NIS域名的文件),确认里面有一行:compuchem如果没有则添上;7.
打开/etc/default/nis,修改NISSERVER=false,NISCLIENT=true,这样本机便成为NIS客户端;8.
打开/etc/yp.
conf,通过写入ypservercompuchem配置NIS主机名;9.
写入"伪用户"信息,即:打开/etc/passwd,最后一行写入字符串:一个"+"六个":");打开/etc/group,最后一行写入字符串:+:::(一个"+"三个":");打开/etc/shadow,最后一行写入字符串:一个"+"八个":");第二章集群的系统配置第15页10.
打开/etc/nsswitch文件,将hostsfilesdns改为hostsfilesnisdns11.
重启nis服务:#/etc/init.
d/nisrestart这样整个集群的NIS服务都打通了.
那么NIS究竟有什么用呢我们知道,控制节点compuchem已经有了coolrainbow的用户信息,而计算节点如node021没有.
node021开启了NIS,那么它就会自动寻找NIS服务器即compuchem,此时compuchem所有的用户信息:用户名,密码,组信息等就都会被node021所接受,这样在NIS的帮助下,coolrainbow就成为了node021的合法用户,就可以登陆了.
到此为止,本节开头所指出的问题彻底的解决了.
用户信息、文件系统都已经在整个集群间共享,并且,ssh可以在整个集群间无密码登陆了——为什么很简单,当coolrainbow通过ssh连接node021时(命令:sshnode021),由于NIS,coolrainbow成为了node021的合法用户,所以有资格登陆;登陆后,系统自动搜索家目录,由于NFS,这个家目录实际就是compuchem上的家目录;而在§2.
2.
1中,我们已经在.
/ssh中生成了authorized_keys,所以登陆就不需要密码了(当然,第一次登陆时会遇到提问,只要回答一次yes以后就不用了,所以现在最好把所有的计算节点都ssh一下,这样ssh无密码的问题就解决了).
我们发现,通过ssh,NFS和NIS这三个相互关联的技术,我们彻底的解决了集群通信的问题.
下一步,我们就可以开始安装软件了!
§2.
3编译器的安装编译器是Linux下最重要的软件之一,几乎所有的软件都可以在Linux下重新编译,从而达到最高的效率.
在本教程中,需要两种编译器:GNU编译器和intel编译器.
§2.
3.
1GNU编译器我们需要两种编译器,Fortran和C的.
非常简单:第二章集群的系统配置第16页#aptitudeinstallgcc-4.
3g++-4.
3gfortran此时将安装C,C++和Fortran95的编译器.
§2.
3.
2intel编译器intel编译器是intel公司专门为其处理器量身打造的编译器,对于intel处理器具有非常高的性能.
本教程使用的机器就是intel芯片的,因此将会大量使用intel编译器以获取最高性能.
如果读者使用AMD处理器,便可以略去安装.
这个编译器可以在intel主页申请非商业版,利用邮箱注册即可,可以下载到intel的Fortran和C编译器11.
1版,注意申请64位版,因为我们选用AMD64机器:l_cproc_p_11.
1.
069_intel64.
tgzl_cprof_p_11.
1.
069_intel64.
tgzintel编译器是有最新版的,但是可能不稳定,这个11.
1是经过作者测试的,至少在我的集群上没有问题.
intel编译器本身安装非常简单,但是它有几个依赖的库比较讨厌:第一,尽管我们确实安装64位编译器,但是必须要装全套的32位的库才行;第二,现在的Linux上的libstdc++.
so都是6版本,但是intel编译器需要5版本;第三,要装intel编译器必须先装GNU编译器.
这些问题都很容易解决.
GNU编译器已经装好,首先解决libstdc++的问题.
1.
在http://packages.
debian.
org/lenny/libstdc++5上下载amd64架构的libstdc++.
so.
5的库,这个文件为libstdc++5_3.
3.
6-18_amd64.
deb.
2.
下载后,在全部节点上执行:#dpkg–Ilibstdc++5_3.
3.
6-18_amd64.
deb这样libstdc++.
so.
5就有了,现在安装32位库,全部节点执行一个命令:#aptitudeinstallia32-lib好了,现在正式安装intel编译器,以C编译器为例,在控制节点上进行.
3.
解压,进入文件夹,安装:#tar–xvzfl_cproc_p_11.
1.
069_intel64.
tgz#cdl_cproc_p_11.
1.
069_intel64/#.
/install.
sh下面的工作就是一路默认安装,注意中间输入intel公司的授权号.
安装完第二章集群的系统配置第17页成后,在/opt下会出现intel文件夹.
用同样的方法安装Fortran编译器即可.
此时,intel的命令还不在命令路径中,我们解决它,在所有节点上打开/etc/profile,将PATH改为:if["`id-u`"-eq0];thenPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/maui/bin:/usr/local/maui/sbin:/opt/intel/Compiler/11.
1/069/bin/intel64:/usr/local/mpich2/bin:/usr/local/mpich2/sbin"elsePATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/maui/bin:/opt/intel/Compiler/11.
1/069/bin/intel64:/usr/local/mpich2/bin"fi并且最后一行添加上intel编译器的库路径:exportLD_LIBRARY_PATH=/opt/intel/Compiler/11.
1/069/lib/intel64:/opt/intel/Compiler/11.
1/069/mkl/lib/em64t这样,intel编译器就可以使用了!
如果读者选取了不同的安装路径,注意按照正确的路径修改.
注意:上面的PATH中还有一些新加的mpich2之类,将在下一节用到.
§2.
4并行计算环境的配置既然要并行计算,就得有并行环境.
目前比较流行的并行计算环境被称为MPI(MessagePassingInterface)即消息传递接口,是一种并行计算的标准或规范,迄今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费得到MPI在不同并行计算机上的实现,一个正确的MPI程序可以不加修改地在所有的并行机上运行.
标准MPI虽然很庞大,但是它的最终目的是服务于进程间通信这一目标.
MPI的实现有多种,这里选用MPICH2.
它是免费软件,可以从http://www.
mcs.
anl.
gov/research/projects/mpich2/downloads/index.
phps=downloads上得到.
这里要下载源码,得到mpich2-1.
3.
1p1.
tar.
tar.
注意:不要选择MPICH1,它有很多缺点!
第二章集群的系统配置第18页可以开始编译MPICH2.
这个过程只需要在控制节点完成.
1.
解压:#tar–xvfmpich2-1.
3.
1p1.
tar.
tar#cdmpich2-1.
3.
1p12.
设置编译选项.
我们要把mpich2装到/usr/local下,可以实现全部集群共享,不妨建立一个mpich2的文件夹,装MPICH2并且配置configure:#mkdir/usr/local/mpich2#.
/configure--prefix=/usr/local/mpich2--enable-cxx--enable-f90--enable-threads=multiple这几项的含义:--prefix设置安装的路径;--enable-cxx和--enable-f90使MPICH2支持C,C++和FORTRAN语言;--enable-threads=multiple表示支持线程,这样可以更好的利用共享内存,前提是机器上必须有多个CPU.
3.
设置编译器.
如果使用GNU编译器:#exportCC=gcc如果使用intel编译器:#exportCC=icc如果读者的机器是intelCPU,强烈建议使用intel编译器.
4.
编译和安装:执行:#make#makeinstall完成后,在/usr/local/mpich2/bin中就会出现很多命令,如mpicc,mpif90等等,都是并行的C、Fortran编译器.
这些命令应该加入PATH,一般来说,/bin的命令对普通用户和root都需要加入,而/sbin则最好只加入到root的PATH.
这就是上一节中PATH加入的mpich2之类的含义,当然,如果读者的命令路径不一样,需要转换.
要运行并行计算,还需要进行一些配置,告诉MPICH2哪些机器能进行并行计算.
对我们来说,当然就是计算节点node021~node029,配置方法:在控制节点compuchem的/root下,建立一个文件:mpd.
hosts,里面写入:node021node022node023node024node025node026第二章集群的系统配置第19页node027node028node029到此为止,我们的MPICH2已经配置完成了.
本来我们现在应该测试一下MPICH2,但是由于我们建立的是集群,我们希望并行的任务更加的有条理,因此,我们暂时先把MPICH2放一放,现在的任务是建立集群的作业管理系统.
§2.
5作业系统的建立计算机集群的任务调度是一项非常重要的工作.
要想充分发挥集群的硬件和软件威力,必须将资源合理的分配给所运行的作业,使得整个集群的使用效率达到最大.
因此,必须选用一个自动化的作业管理系统来进行作业的调度.
举例来说,如果coolrainbow想"在node023上用8个CPU拿Gaussian算我这个C60.
gjf"的话,只需要在控制节点上发出这个指令就行了;如果bingtears想"用node021~node025并行运行NAMD"的话,也只需要在控制节点上发出这个指令就行了;如果coolrainbow已经占用了node023,那么bingtears的任务显然不能运行了,那么作业管理系统就会对任务"排队",等待coolrainbow的node023使用完毕(也许是三天以后),自动将bingtears的任务提交,运行NAMD.
每个任务运行完后,作业系统会自动报告该任务占用的资源数量和运行时间.
这个系统还应具有权限分配功能.
比如,某组在你的集群中花钱独占了node025的一个月的使用权,那么可以对作业系统进行设置,使没有花钱的用户不能在node025上发作业……作业管理软件有很多,如OpenPBS等等.
这里,我们选用一套作者认为最稳定的组合:Torque+Maui+mpiexec.
这三个都是免费软件.
Torque:最主要的作业分配工具.
Maui:Torque的辅助工具.
前面提到的限制权限的功能,单独用Torque无法实现,必须加上这个软件.
Mpiexec:Torque与MPICH2连接的工具.
它有什么用呢如果我们直接使用Torque,比如,分配node021和node022给MPICH2让它并行运行,运行的结果,可能MPICH2根本就不是使用的node021和node022,而是随机使用的节点.
mpiexec的功能,就是使用Torque分配的节点来执行MPICH2的任务,使得两者之间无缝结合.
第二章集群的系统配置第20页注意:MPICH2的可执行文件中也有一个mpiexec(位于/usr/local/mpich2/bin下),这个与我们上面提到的mpiexec名称确实完全相同,但是两者完全不是一个东西!
千万不要混淆!
下面开始构造这个系统.
§2.
5.
1Torque的安装到2011年5月时,Torque的最新版本为3.
0,作者选用较为稳定的2.
4.
6.
可以从http://clusterresources.
com/downloads/torque下载其安装文件torque-2.
4.
6.
tar.
gz.
Torque的安装十分简单.
在控制节点上依次执行下列命令即可:#tar-xvzftorque-2.
4.
6.
tar.
gz#cdtorque-2.
4.
6#.
/configure--with-scpCC=icc#make#makeinstall注意:如果不使用intel编译器,上面第三行的命令把CC=icc去掉.
这就完成了控制节点的安装.
此时compuchem已经成为了一个PBS服务器.
现在执行:#makepackages这时会生成一些.
sh文件,其中两个重要文件:torque-package-mom-linux-i686.
sh和torque-package-client-linux-i686.
sh将用来安装计算节点.
在计算节点上,执行:#.
/torque-package-mom-linux-i686.
sh--install#.
/torque-package-client-linux-i686.
sh--install至此,Torque安装结束.
§2.
5.
2Maui的安装现在安装Maui.
这个软件需要在http://clusterresources.
com注册才能下载,这里选用稳定的版本3.
3,下载后得到文件maui-3.
3.
tar.
gz,它的安装也很简单,只要在控制节点执行即可:#tar-xvzfmaui-3.
3.
tar.
gz#cdmaui-3.
3第二章集群的系统配置第21页#.
/configureCC=icc#make#makeinstall注意:如果不使用intel编译器,上面第三行的命令把CC=icc去掉.
§2.
5.
3Torque和Maui的配置Torque和Maui需要进行许多配置才能正常工作.
在控制节点:1.
Torque必须配置一位普通用户的管理员,这就需要在刚才的安装目录即torque-2.
4.
6中,执行:#.
/torque-setupcoolrainbow这就选择了coolrainbow作为Torque的普通管理员.
注意:如果不设普通用户的管理员就无法运行程序.
2.
进入/var/spool/torque/server_priv,建立名为nodes的文件,写入node021np=8node022np=8node023np=8node024np=8node025np=8node026np=8node027np=8node028np=8node029np=8这就是Torque计算节点的列表,np代表CPU个数.
3.
重启pbs服务.
方法:#ps–A|greppbs#得到pbs的进程号,如2798#kill2798#pbs_server#pbs_sched4.
使PBS服务器开机自动启动.
进入/etc/init.
d,建立一个文件如pbsserver,写入:/usr/local/sbin/pbs_server/usr/local/maui/sbin/maui第一行是启动PBS服务器;第二行,本来应该是/usr/local/sbin/pbs_sched,这个是Torque的任务调度系统,但是我们已经装了Maui,就不需要它,而是启动更高级的Maui任务调度系统.
第二章集群的系统配置第22页这个文件建立好后,执行:#chmod755pbsserver#update-rc.
dpbsserverstart302345.
stop30160.
最后的命令调用了update-rc.
d,这样以后重启时,PBS服务就会自动启动,而不用手动启动.
对update-rc.
d不熟悉的读者可以搜索下它的用法.
下面进行计算节点的配置,以下操作在计算节点上进行.
5.
进入/var/spool/torque/mom_priv,建立名为config的文件,写入:$pbsservercompuchem$logevent255$usecp*:/home/home6.
设置自动启动.
进入/etc/init.
d,建立一个文件如pbsmom,写入:/usr/local/sbin/pbs_mom然后,运行:#chmod755pbsmom#update-rc.
dpbsmomstart302345.
stop30160.
这样以后重启时,PBS客户端就会自动启动.
此时配置已经基本完成.
激动人心的时刻到了!
当所有的PBS服务器和客户端都启动好后,可以执行命令pbsnodes(这个命令显示所有的节点的情况)查看节点的情况;#pbsnodes…node025state=freenp=8ntype=clusterstatus=opsys=linux,uname=Linuxnode0252.
6.
18-6-686#1SMPSunFeb1022:11:31UTC2008i686,sessions=2839,nsessions=1,nusers=1,idletime=197844,totmem=4726576kb,availmem=4685196kb,physmem=2075892kb,ncpus=8,loadave=0.
00,netload=1043928615,state=free,jobs=,varattr=,rectime=1238950166node026state=freenp=8ntype=clusterstatus=opsys=linux,uname=Linuxnode0252.
6.
18-6-686#1SMPSunFeb1022:11:31UTC2008i686,sessions=2839,nsessions=1,nusers=1,idletime=197844,totmem=4726576kb,availmem=4685196kb,physmem=2075892kb,ncpus=8,loadave=0.
00,netload=1043928615,state=free,jobs=,varattr=,rectime=1238950166第二章集群的系统配置第23页…也就是说,作业管理系统已经找到了我们的计算节点了!
现在,整个集群的作业管理系统已经接近完成!
现在就差mpiexec了!
§2.
5.
4mpiexec的安装好了,现在安装mpiexec.
它的最新版本为0.
84,可在http://www.
osc.
edu/~djohnson/mpiexec/index.
php下载到mpiexec-0.
84.
gz.
在上面安装Torque和Maui时,没有指定安装路径,对于它,我们有必要指定一个,比如下面的路径:#mkdir/usr/local/mpitorque下面安装.
在控制节点上执行:#tar–xvzfmpiexec-0.
84.
gz#cdmpiexec-0.
84#.
/configuration--prefix=/usr/local/mpitorque--with-pbs=/usr/local--with-default-comm=mpich-p4这一行,--prefix配置安装路径,--with-pbs指定Torque的链接库、头文件的上级路径,--with-default-comm指定MPICH2的类型.
然后编译安装即可:#make#makeinstall此时,mpiexec安装到了/usr/local/mpitorque中.
以后所有的并行任务将由它执行.
OK!
集群到此就全部安装完毕!
现在可以试运行一个任务了!
§2.
6第一次运行集群切换为普通用户比如coolrainbow.
当然,我们的集群上还没有没有任何软件,但是有编译器,我们将用编译器编一个并行程序,并通过作业管理系统运行.
比如,在家目录下,用vi编辑一个并行的Fortran程序,叫hellocluster.
f95,见脚本2-6-1.
编译这个程序(注意全部工作要以普通用户的身份执行):$mpif90hellocluster.
f90-ohellocluster脚本2-6-1并行的Fortran程序第二章集群的系统配置第24页现在得到了可执行文件hellocluster.
我们调用作业管理系统来执行它.
建立一个叫做submit.
pbs的文件(也可以是你喜欢的任何名字),写入如下内容:脚本2-6-2作业提交脚本这个脚本,是提交作业的标准脚本,所有的用户都应该通过Torque使用提交作业的脚本执行任务,这是一切集群(从我们这个学术用小集群到上千台计算机的超级集群)执行任务的标准.
当然,商业或更高级的集群可能使用Torque这个免费的作业管理系统的,但是都是要通过某些脚本提交作业的.
在脚本2-6-2中,以#PBS开头的都是与Torque有关的选项,其他的命令(如6,7行)则是要执行的任务.
这在第四章会详细介绍.
这里,只介绍几个:第2行,我们了分配node023的8个CPU和node027的8个CPU给我们的任务;第5行,是给我们的任务随便起的一个名字;第7行,调用mpiexec并行执行#!
/bin/sh#PBS-lnodes=node023:ppn=8+node027:ppn=8#PBS-qbatch#PBS-joe#PBS-Nfirst_taskcd/home/coolrainbow/usr/local/mpitorque/bin/mpiexec.
/hellocluster>result!
hellocluster.
f95programmainInclude'mpif.
h'implicitnonecharacter*(MPI_MAX_PROCESSOR_NAME)processor_nameintegerid,nprocs,namelen,rc,ierrcallMPI_INIT(ierr)callMPI_COMM_RANK(MPI_COMM_WORLD,id,ierr)callMPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr)callMPI_GET_PROCESSOR_NAME(processor_name,namelen,ierr)write(*,1100)id,nprocs,processor_namecallMPI_FINALIZE(rc)1100FORMAT('HelloCluster!
Process',I2,'of',I1,'on',20A)end第二章集群的系统配置第25页hellocluster,并将输出重定向到一个叫result的文件里.
mpiexec会自动根据Torque分配的资源并行执行hellocluser.
如果这里使用MPICH2自带的那个mpiexec的话,不仅步骤繁琐(需要启动mpd守护者进程之类),而且不能保证我们并行的任务是在node023和node027上执行的.
有这个脚本后,提交作业:$qsubsubmit.
pbs不久,会生成一个叫first_task.
o0的文件,注意与我们的任务名相同,当然这个文件里面是空的.
还生成一个result文件,里面应该是我们的结果,打开看看:HelloCluster!
Process5of16onnode023HelloCluster!
Process12of16onnode023HelloCluster!
Process0of16onnode027……HelloCluster!
Process1of16onnode027没错,两台机器16个CPU并行执行了16个进程(process)!
我们的集群成功了!
到此,我们的集群就全部组装完毕了!
相信读者可以喘口气了,休息一下,哈哈!
上面的作业提交太简单了,不能满足要求.
我们将在第四章讨论更有用的Torque的操作.
下面,我们先装几个计算化学软件吧.
第三章集群的计算化学软件配置第26页第三章集群的计算化学软件配置计算化学的软件几乎有无数种,这里不可能全部介绍安装的方法.
但是考虑到集群的需要,读者如果没有什么Linux基础,面对计算化学软件的源码常常只能望而却步,因此这里作者挑选几种以"难编译"出名的软件介绍,相信读者即使没有编译软件的基础,在读完本章后,对大多数计算化学的软件的编译就没有问题了.
这里的软件安装,如无特殊声明,只要在控制节点上操作即可.
§3.
1Gaussian03安装与配置§3.
1.
1Gaussian03的安装Gaussian03是最著名的计算化学软件,通过商业途径可以购买到这个软件.
这里以其光盘镜像G03.
ISO来安装.
同时,Gaussian03的版权控制非常严格,只允许一定的用户使用,这要求管理员必须在系统中设定一个专门的组来运行Gaussian03,不妨就叫gaussian组:#groupaddgaussian然后将Gaussian03的光盘镜像加载:#mount–tiso9660–oloop/root/G03.
ISO/mnt现在开始安装:1.
Gaussian03必须用Cshell安装:#csh如果没有Cshell,安装:#aptitudeinstallcsh2.
设定环境变量:#setenvmntpnt"/mnt"#seteng03root"/usr/local/chemsoft"这两个环境变量的含义:mntpnt表示光盘镜像挂载的路径;g03root表示g03目录安装的路径.
注意,这里在/usr/local里建立了一个chemsoft的文件夹,以后所有的计算化学软件都装到chemsoft里.
第三章集群的计算化学软件配置第27页3.
进入安装目录并解压安装文件:#cd$g03root#cat$mntpnt/tar/*.
taz|zcat|tarxvf–4.
现在,将会生成一个g03目录,将它的组改为gaussian:#chgrp–Rgaussiang03#cdg035.
执行安装脚本:#.
/bsd/install6.
将g03目录及所有文件的权限改为750:#chmod–R750g03现在只要把需要运行Gaussian03的用户加入gaussian组,用户就可以运行gaussian了.
如修改/etc/group:gaussian:x:1001:coolrainbow这样coolrainbow就具有了运行Gaussian的权限.
注意要重新make一下NIS数据库.
§3.
1.
2Gaussian03的单机配置每次运行Gaussian03,还需要设置一些环境变量.
这里不采用通常的方法即在用户的.
bashrc中声明这些变量(作者的观点是既然有了集群,就把与具体任务有关的东西全部限制在作业脚本中,做到"影响极小化"),而是建立相应的PBS脚本,在提交作业前做这些处理.
所设计的脚本可见脚本3-1:脚本3-1-1Gaussian03的作业提交脚本解释下这个脚本含义.
以#PBS开头的行是Torque的设置内容,以后介绍;#!
/bin/sh#PBS-lnodes=node023:ppn=8#PBS-qparallel#PBS-joe#PBS-NUF4exportg03root="/usr/local/chemsoft"mkdir/tmp/${PBS_JOBID}exportGAUSS_SCRDIR=/tmp/${PBS_JOBID}source$g03root/g03/bsd/g03.
profilecd/home/coolrainbowg03UF4.
outrm-rf/tmp/${PBS_JOBID}第三章集群的计算化学软件配置第28页6行导出Gaussian03所在的路径变量;7行建立计算所需的缓存文件目录(最好使用本地目录),位于/tmp,其名称为该作业的编号(PBS_JOBID是Torque内部设定的变量,后面会介绍);8行导出缓存文件目录;9行执行Gaussian03的一个脚本;10行进入gjf文件所在的目录,根据情况修改;11行正式运行Gaussian03,UF4.
gjf就是要运行的文件,UF4.
out是输出文件;12行在任务结束后删除缓存文件目录.
这样,这个脚本可以给任何属于gaussian组的普通用户运行Gaussian03.
只要修改相应的路径和输入输出文件名后,运行(假设脚本名称为g03_submit.
pbs):$qsubg03_submit.
pbs即可运行.
至此单机的Gaussian03就配置完毕.
如果安装Gaussian09,完全可以参照上述步骤运行,Gaussian09的环境变量照样写入作业提交脚本中(这也看出了不写入.
bashrc的优点,至少防止GAUSS_SCRDIR冲突).
§3.
2NAMD安装与配置NAMD是并行效率极高的分子动力学软件,特别适合超大规模体系的处理,常常用来进行生物大分子研究和大规模的分子动力学模拟.
NAMD的使用比较简单,直接运行可执行文件即可,但是NAMD的安装非常复杂,配置文件繁多,有一点儿错误就无法安装,因此这里将安装过程详细介绍.
需要说明的是:对于不同的软件和硬件,安装的配置是有一定差别的,但是只要掌握了本节中例子,其差别就不言自明.
到2011年5月NAMD的最新版本为2.
8,但这是测试版,不稳定(如已经发现2.
8b1存在bug),这里我们会讲解2.
7的编译方法.
可以从http://www.
ks.
uiuc.
edu上下载到其源码文件NAMD_2.
7_Source.
tar.
gz.
在本节中,我们主要讲解NAMD多机并行版本的编译方法,相信这个版本掌握后,再编译别的版本(如单机多核版)时基本不会遇到太大困难.
另外,最新的GPU加速版将在§5.
2节单独介绍.
第三章集群的计算化学软件配置第29页如果读者掌握了这个软件的编译方法,基本任何Linux软件的编译都不在话下.
作者正是当初在初学Linux摸索NAMD的编译时,学到了大量的知识,现在基本可以没有任何困难的编译各种Linux软件.
§3.
2.
1组件安装首先要安装一些组件.
NAMD需要两个组件支持:TCL语言的模块tcl8.
4和快速Fourier变换模块fftw.
要安装这两个组件,只要在所有节点上执行(注意:这些组件会自动安装到/usr下的某些目录,不在共享的目录下,所以要全部安装):#aptitudeinstallfftw3fftw3-devsfftw-devsfftw2tcl8.
4tcl8.
4-dev如果读者有自己的高效的fftw库,也可以自行编译安装,过程很简单,就不重复了.
至于TCL,使用aptitude安装的比较可靠.
§3.
2.
2charm++安装编译NAMD只要在控制节点进行即可.
首先要编译charm++.
1.
解压并进入相应目录:#tar–xvzfNAMD_2.
7_Source.
tar.
gz#cdNAMD_2.
7_Source#tar–xvfcharm-6.
1.
3.
tar#cdcharm-6.
1.
32.
配置.
要安装的NAMD必须支持并行,因此要给charm++指明并行并行库,首先给出mpi-linux告诉编译器要编译并行,然后要通过--bashdir参数给出MPI库的位置,因为前面MPICH安装到了usr/local/mpich2下,MPI库这位于这个目录下的lib中,故给出MPICH的安装路径(不需要加/lib!
)就可以.
同时,给出所用的编译器和优化级别.
charm++表示对charm++只做基本安装.
下面是一个非常需要注意的问题.
如果读者使用GNU编译器编译了MPICH2,在build后面加上"cc"选项,表示用GNUC编译器编译charm++:#.
/buildcharm++mpi-linux--basedir=/usr/local/mpich2cc-O如果读者已经使用intel编译器编译了MPICH2,并且打算使用intel编译器编译charm++的话,一定不要在命令行中指定任何编译器!
即正确的方法:#.
/buildcharm++mpi-linux--basedir=/usr/local/mpich2-O第三章集群的计算化学软件配置第30页上面的命令会自动用intel编译器实现charm++.
如果读者使用下面的命令:#.
/buildcharm++mpi-linux--basedir=/usr/local/mpich2icc-O就会遇到MPICH2函数符号不能识别的情形,即下面的错误:`CmiNotifyIdle':machine.
c:(.
text+0x202):undefinedreferenceto`MPI_Recv'machine.
c:(.
text+0x232):undefinedreferenceto`MPI_Get_count'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiAsyncSendFn_':machine.
c:(.
text+0xe82):undefinedreferenceto`MPI_Isend'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiAsyncBroadcastAllFn':machine.
c:(.
text+0x11c2):undefinedreferenceto`MPI_Test'bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiAsyncBroadcastFn':machine.
c:(.
text+0x1622):undefinedreferenceto`MPI_Test'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiReleaseSentMessages':machine.
c:(.
text+0x2702):undefinedreferenceto`MPI_Test'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`PumpMsgs':machine.
c:(.
text+0x28f2):undefinedreferenceto`MPI_Iprobe'machine.
c:(.
text+0x2942):undefinedreferenceto`MPI_Get_count'machine.
c:(.
text+0x2992):undefinedreferenceto`MPI_Recv'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiAsyncMsgSent':machine.
c:(.
text+0x2e52):undefinedreferenceto`MPI_Test'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiBarrierZero':machine.
c:(.
text+0x3182):undefinedreferenceto`MPI_Recv'machine.
c:(.
text+0x3232):undefinedreferenceto`MPI_Send'第三章集群的计算化学软件配置第31页bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):InfunctionCmiCpuTimer':machine.
c:(.
text+0x32d2):undefinedreferenceto`MPI_Wtime'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiWallTimer':machine.
c:(.
text+0x3352):undefinedreferenceto`MPI_Wtime'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction`CmiTimer':machine.
c:(.
text+0x33d2):undefinedreferenceto`MPI_Wtime'.
/.
.
/.
.
/bin/.
.
/lib/libconv-cplus-y.
a(machine.
o):Infunction因此不能在命令行中指定icc.
这个错误作者曾经遇到过,是charm++的编写者给出的这个解决方法.
完成后,如果看到如下字样:charm++builtsuccessfully.
Next,tryoutasampleprogramliketests/charm++/simplearrayhello就表明编译成功!
§3.
2.
3NAMD编译编译NAMD修改需要很多参数,因为其默认的参数很多无法符合集群的要求.
1.
首先要保证机器上必须有Cshell;2.
指向charm++.
修改NAMD_2.
7_Source/Make.
charm,将CHARMBASE一行改为:CHARMBASE=.
rootdir/charm-6.
1.
3这里.
rootdir是一个指向安装路径的符号链接,在随后的安装中会自动生成.
3.
然后进入NAMD_2.
7_Source/arch,由于我们要编译MPI版本,故根据机器的硬件架构选择Linux--MPI.
arch文件,如本教程中使用x86_64架构,故打开Linux-x86_64-MPI-icc.
arch,将CHARMACH一行改为:CHARMACH=mpi-linux-x86_64-smp如果使用gcc编译,则打开Linux-x86_64-MPI-g++.
arch做相应修改.
第三章集群的计算化学软件配置第32页4.
给出tcl和fftw的库的路径.
同样根据机器选择适当的文件,如本组机器,打开NAMD_2.
7_Source/arch/Linux-x86_64.
tcl,将前几行改为如下内容:TCLDIR=/usrTCLINCL=-I$(TCLDIR)/include-I$(HOME)/tcl/include-I/usr/include/tcl8.
4/TCLLIB=-L$(TCLDIR)/lib-L$(HOME)/tcl/lib-ltcl8.
4-ldl第一行给出了tcl库所在的目录,第二行最后的-I/usr/include/tcl8.
4/同前;第三行则给出了tcl库的版本.
打开NAMD_2.
7_Source/arch/Linux-x86_64.
fftw,修改第一行以给出fftw库所在的位置:FFTWDIR=/usr如果读者的tcl和fftw在别的位置,或者版本不同(比如读者使用了tcl8.
5或者使用intelMKL的fftw库),则需要对上述选项做修改.
这个可以由读者自己完成.
5.
编译NAMD.
配置并编译:#.
/configtclfftwLinux-x86_64-MPI-icc#cdLinux-x86_64-MPI-icc#make至此,NAMD终于编译完毕.
7.
移动NAMD.
在/usr/local/chemsoft中建立namd2.
7/bin文件夹,将生成的可执行文件namd2,psfgen,charmrun(位于Linux-x86_64-MPI-icc中)等移动到该文件夹里,这样namd就可以为整个集群共享,现在就可以实现并行计算了.
§3.
2.
4NAMD运行通过PBS脚本运行NAMD是很容易的事.
对于并行运行的NAMD,可以像脚本2-6-1那样运行这个程序.
下面给出一个脚本的范例:第三章集群的计算化学软件配置第33页脚本3-2-1NAMD的作业提交脚本这个脚本比较好理解.
§3.
3Autodock的安装与配置Autodock是一个非常著名的分子对接程序.
可以从其网站http://autodock.
scripps.
edu/上下载到其最新版本4.
2的压缩包autodocksuite-4.
2-src.
tar.
tar.
Autodock的安装十分容易.
在主节点上建立文件夹/usr/local/chemsoft/autocock4.
2以便于安装软件的执行文件,然后依次执行:#tar-xvfautodocksuite-4.
2-src.
tar.
tar#cdautodocksuite-4.
2#cdautocock#.
/configure--prefix=/usr/local/chemsoft/autocock4.
2#make#makeinstall#cd.
.
/autogrid#.
/configure--prefix=/usr/local/chemsoft/autocock4.
2#make#makeinstall安装完毕.
运行脚本也非常容易:脚本3-3-1Autodock的作业提交脚本这个编译步骤非常典型,大部分Linux软件的编译都是configure——make——makeinstall#!
/bin/sh#PBS-lnodes=1:ppn=8#PBS-qparallel#PBS-joe#PBS-Nhemecd/home/coolrainbown/usr/local/chemsoft/autodock4.
2/bin/autodock4-pheme.
dpf-lheme.
dlg1.
#!
/bin/sh2.
#PBS-lnodes=2:ppn=83.
#PBS-qparallel4.
#PBS-joe5.
#PBS-Nubq6.
cd/home/zhangjun7.
mpirun-np16/usr/local/chemsoft/namd2.
6/bin/namd2ubq.
conf>ubq.
log15.
#!
/bin/sh16.
#PBS-lnodes=2:ppn=817.
#PBS-qparallel18.
#PBS-joe19.
#PBS-Nubq20.
cd/home/zhangjun21.
mpirun-np16/usr/local/chemsoft/namd2.
6/bin/namd2ubq.
conf>ubq.
log8.
#!
/bin/sh9.
#PBS-lnodes=2:ppn=810.
#PBS-qparallel11.
#PBS-joe12.
#PBS-Nubq13.
cd/home/zhangjun14.
mpirun-np16/usr/local/chemsoft/namd2.
6/bin/namd2ubq.
conf>ubq.
log1.
#!
/bin/sh2.
#PBS-lnodes=2:ppn=83.
#PBS-qparallel4.
#PBS-joe5.
#PBS-Nubq6.
cd/home/zhangjun7.
mpirun-np16/usr/local/chemsoft/namd2.
6/bin/namd2ubq.
conf>ubq.
log1.
#!
/bin/sh2.
#PBS-lnodes=node023:ppn=8+node027:ppn=83.
#PBS-qbatch4.
#PBS-joe5.
#PBS-Nnamd6.
cd/home/coolrainbow7.
/usr/local/mpitorque/bin/mpiexec/usr/local/chemsoft/namd2.
7/namd2ubq.
conf>#!
/bin/sh#PBS-lnodes=node023:ppn=8+node027:ppn=8#PBS-qbatch#PBS-joe#PBS-Nnamdcd/home/coolrainbow/usr/local/mpitorque/bin/mpiexec/usr/local/chemsoft/namd2.
7/namd2ubq.
conf>ubq.
log第三章集群的计算化学软件配置第34页这个流程.
configure中的一些选项在不同Linux软件中意义都是一致的.
比如,"--prefix"都是设定安装路径的,"--help"都是显示帮助信息的,"CC"设定C编译器,"CXX"设定C++编译器,"COPT"设定C编译器的选项,等等.
建议读者,拿到一个新的Linux软件时,首先寻找含有README,INSTALL,GUIDE字眼的文件,里面通常就有编译的步骤,然后.
/configure--help查看一下需要注意的事项,然后configure,make,makeinstall.
通常,大部分Linux软件都可以顺利编译了.
我们关于软件编译的东西就讲到这.
有些软件,如NWCHEM,GAMESS等,它们的编译相当复杂(特别是生成高效的源码),这里就不重复详细的步骤了.
网上有很多这方面的文章,比如,作者的博客(广告:P).
§3.
4MKL编程环境的构建前面已经介绍了很多计算化学软件的使用,如果还需要安装其他的软件可以依照前面的经验通过软件文档和自己摸索完成.
Linux操作系统是一个非常适合进行开发工作的系统,当需要自己编程完成一些工作时,可以利用系统自带的make,vi等完成,这些内容可以参考相关的技术文档,本文不介绍.
由于涉及到了intel编译器,这里将MKL程序的链接方法介绍以下.
经验表明,第一次做MKL程序编译时,大多数人都会走很多弯路,编译几个小时也不成功.
其实这个原因很简单,就是:懒于阅读技术文档!
事实上,作者当时就是这样,看到3000多页的MKL手册头都大了,于是在编译时就"跟着感觉走",弄得找不到库或者函数错误.
其实,花一个小时读下文档,绝对比自己瞎折腾要强的多,这里把编译MKL的一些经验与大家分享下,作为快速入门.

真正深入的话,还是那句:读文档!
这里以Lapack库的链接为例.
1.
MKL的环境变量安装好MKL后,需要设置一些环境变量,这样才能找到所需要的库,这可以通过/opt/intel/Compiler/11.
1/064/mkl/lib/tools/enviroments/mklvars{your-architecutre}.
{sh|csh}实现.
如果需要的话,可以加入到/etc/profile或你的.
bashrc中.
在程序编译或运行时,如果发生cannotfindlibXXX之类,记得导出相应的LD_LIBRARY_PATH.
如:第三章集群的计算化学软件配置第35页cannotfindlibmkl_intel_thread:cannotopensharedobjectfile.
.
.
什么不知道什么是LD_LIBRARY_PATHGoogleit!
如果你的这个库位于/opt/intel/Compiler/11.
1/064/mkl/lib/em64t,那么执行命令即可:$exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/Compiler/11.
1/064/mkl/lib/em64t2.
函数选择:LapackMKL提供了3000多页的技术文档,对每一个函数进行了详细的介绍.
这里仅对Lapack系列做一些介绍.
初学Lapack的读者可能会问:我怎么知道哪个函数是做向量点积的,哪个函数是做奇异值分解的.
问的最多的是:有没有什么书可以参考的答案:至少作者没见过哪个书像讲MFC或PHP那样详细的把Lapack的每一个函数讲解的书.

那么唯一的途径就是阅读技术文档.
不要头疼,那个文档没有中文版的.
好好学英文吧.
Lapack中的函数的名称都是XYYZZZ形式(BLAS类似)的,X:精度.
如s表示单精度(对应于Fortran中的real(kink=4),C中的float)等.
YY:对应的矩阵类型和存储方式.
如:ge:为一般的矩阵,存储方式full.
所谓full就是说,矩阵A的元素aij以数组a(i,j)或a[i][j]的形式存储于计算机中.
这是最简单的方法,但是对稀疏矩阵或元素有一定相关性的矩阵效率较低sy:对称矩阵,以full方式存储sp:对称矩阵,以pack方式存储pack方式对symmetricmatrix采用了一维数组优化存储的方法,可以减小内存的使用.
有两种存储方法,在Lapack程序中分别用'U''L'表示,对于"U",简单的说:aij位于a(i+j*(j-1/2)当i>>ThejobendsatTueMay1214:43:35EDT2011#!
/bin/shecho"JobID:$1"echo"Jobusername:$2"echo"Jobgroup:$3"echoecho"Thejobbeginsat`date`"exit0#!
/bin/shecho"Thejobendsat`date`"echo-n"Nodesforuseare:"foriin$(sort/var/spool/torque/aux/$1|uniq)doecho-n"$i"doneecho-e"\nJobID:$1"echo"Jobusername:$2"echo"Jobgroup:$3"echo"Jobname:$4"echo"Jobsession:$5"echo"Jobqueue:$8"echo"RequestResource:$6"echo"AvailableResource:$7"exit0第四章集群的管理技巧第43页Nodesforuseare:node022JobID:168.
compuchemJobusername:user02Jobgroup:user02Jobname:H2Jobsession:2874Jobqueue:parallelRequestResource:cput=5000:00:00,neednodes=1:ppn=8,nodes=1:ppn=8,walltime=5000:00:00AvailableResource:cput=00:00:00,mem=0kb,vmem=0kb,walltime=00:00:02这对管理作业非常有帮助.
管理员还可以删除用户的作业,见下节.
§4.
2.
2普通用户管理普通用户的管理任务比较简单,常用的只有三个:1.
提交作业:qsub最简单的例子,提交一个PBS脚本(普通用户):$qsubsubmit.
pbs以脚本2-6-2为例,最重要的几个参数如下:#PBS-lnodes=node023:ppn=8+node027:ppn=8这是表明要使用节点的个数及每个节点所要使用的CPU数.
通过下面的表4-2-4说明它的用法.
表4-2-4Torque的资源分配方法举例nodes=3:ppn=4Torque将给本作业分配3个节点(由Torque自动选择),每个节点使用4个CPU.
3个节点将有Torque自动选择.
nodes=node021:ppn=8+node025:ppn=8Torque将给本作业分配到节点node021和node025,分别使用8个CPU.
#PBS-qbatch表示用户要提交的队列,这里是"batch".
#PBS-Nfirst_task表示用户的作业名称,这里是"first_task".
它不能以数字开头.
这个名称最好具有一定的意义以便于识别.
其它的选项较少用,就不提了.
2.
查看作业:qstat这个选项比较丰富.
直接查看作业可以:第四章集群的管理技巧第44页$qstat则会显示当前正在运行和排队的作业:JobidNameUserTimeUseSQueue57.
compuchempc2-Iuser0332:17:33Rparallel64.
compuchemgraphite_hf_optuser027:45:49Rparallel从左到右依次为作业号、作业名、提交作业的用户、作业已消耗的时间、作业状态、作业所属队列.
对于状态,R表示正在运行,Q表示等待排队中.
加上参数-n则可以显示作业占用资源的详细情况.
$qstat-nReq'dReq'dElapJobIDUsernameQueueJobnameSessIDNDSTSKMemoryTimeSTime57.
compuchemuser03parallelpc2-I159951----5000:R32:46node023/7+node023/6+node023/5+node023/4+node023/3+node023/2+node023/1+node023/064.
compuchemuser02parallelgraphite_hf_opt63591----5000:R7:15node026/7+node026/6+node026/5+node026/4+node026/3+node026/2+node026/1+node026/03.
删除作业:qdel例如要删除作业号为123的作业,只需:$qdel123可以同时删除多个作业.
如要删除作业号为97、98两个作业,可以:$qdel9798一般用户只能删除自己的作业,管理员则可以删除所有人的作业.
第五章GPU在集群上的应用第45页第五章GPU在集群上的应用§5.
1GPU/CUDA的安装配置GPU计算是现代计算机发展的一个非常有趣的新方向.
它利用GPU中超大规模的计算单元来优化科学领域中的计算任务.
现在,这个领域一直在蓬勃发展,蒸蒸日上.
很多最新的超级计算机,如天河一号,都在硬件中加入了GPU以提高速度.
至2011年5月,大量的分子动力学软件,如Gromacs,NAMD等,和量子化学软件TeraChem都已经提供了GPU计算的功能.
因此,本教程在最后有必要提供一些与GPU和CUDA配置有关的东西.
这里,将以GeForceGTX460为例进行安装.
§5.
1.
1驱动程序的安装读者有了GPU的硬件后,需要将其配置在操作系统中.
Linux(这里是Debian)必须事先装好图形界面.
其实也可以不装,但是这样的话实现方法就会变相当麻烦,这里就不讲了.

GPU安装非常容易.
要安装GPU的驱动,首先停止掉X.
在Debian下,无法通过简单的init3来停止,但是用kill杀掉gdm进程是很简单的:#ps-A|grepgmd#得到gdm的进程号,如10365#kill10365然后安装用于Linux内核源码接口的header:#aptitudeinstalllinux-headers-`uname-r`然后在nVIDIA的官网下载其驱动devdriver_3.
2_linux_64_260.
19.
21.
run,执行即可.
不用重启,执行startx就可以看到新的图形界面.
可以在Linux的菜单System/Preference/中可以找到nVIDIA的配置菜单,见图5-1-1.
§5.
1.
2程序开发环境要利用GPU进行计算和编程,还需要安装toolkit和SDK,它们的安装非常简单,在nVIDIA的官方网站可以下载到符合系统名称的文件,直接安装即可.
第五章GPU在集群上的应用第46页我们的系统是Debian,在nVIDIA下没有专门适应Debian的,我们选择Ubuntu的即可,安装文件为:cudatoolkit_3.
2.
16_linux_64_ubuntu10.
04.
run和gpucomputingsdk_3.
2.
16_linux.
run.
这两个文件直接执行,即可,一般不会有什么错误.
图5-1-1GPU驱动程序安装成功效果图§5.
1.
3CUDA编程测试CUDA编程所需的编译器命令为nvcc,我们通过一个程序来调试一下,见脚本5-1-1.
这个脚本的功能是计算机器中GPU硬件的数量,并列出每一个GPU的名称.
这个程序命名为firstcuda.
cu,编译:$nvccfirstcuda.
cu-ofirstcuda如果编译无误,执行后输出为:Thereare1devicessupportingCUDA!
Device1:"GeForceGTX460"§5.
2NAMDCUDA版本的安装NAMD2.
7增加了对CUDA的支持.
这里讲一下NAMDCUDA版的编译方法.
第五章GPU在集群上的应用第47页其实和§3.
2的步骤类似,但是要注意:在CUDA3.
0版本之前,NAMDCUDA版本不能用intel编译器编译,因为nVIDIA在Linux下目前只支持gcc,不支持icc.

日本CN2独立物理服务器 E3 1230 16G 20M 500元/月 提速啦

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

DogYun香港BGP月付14.4元主机简单测试

前些天赵容分享过DogYun(狗云)香港BGP线路AMD 5950X经典低价云服务器的信息(点击查看),刚好账户还有点余额够开个最低配,所以手贱尝试下,这些贴上简单测试信息,方便大家参考。官方网站:www.dogyun.com主机配置我搞的是最低款优惠后14.4元/月的,配置单核,512MB内存,10GB硬盘,300GB/50Mbps月流量。基本信息DogYun的VPS主机管理集成在会员中心,包括...

GreenCloudVPS$20/年,新加坡/美国/荷兰vps/1核/1GB/30GB,NVMe/1TB流量/10Gbps端口/KVM

greencloudvps怎么样?greencloudvps是一家国外主机商,VPS数据中心多,之前已经介绍过多次了。现在有几款10Gbps带宽的特价KVM VPS,Ryzen 3950x处理器,NVMe硬盘,性价比高。支持Paypal、支付宝、微信付款。GreenCloudVPS:新加坡/美国/荷兰vps,1核@Ryzen 3950x/1GB内存/30GB NVMe空间/1TB流量/10Gbps...

hosts文件内容为你推荐
免费网站空间如何免费做网站 免费域名+免费空间+免费网站北京网站空间什么样的网站空间好香港虚拟主机推荐一下香港的虚拟主机公司!国内最好的虚拟主机国内虚拟主机哪家的好?虚拟主机管理系统如何用win虚拟主机管理系统搭建windows虚拟主机在windows 系统上装虚拟机有什么好的建议河南虚拟主机新网的虚拟主机怎么样?www二级域名顶级域名,二级域名,网站根域名服务器根域名解析服务器全世界有多少台?听说是13台,,是吗?为什么只有13台?域名到期查询域名过期是什么意思?
哈尔滨域名注册 传奇服务器租用 高防直连vps 免费动态域名 云网数据 dreamhost 账号泄露 好看的留言 seovip 南昌服务器托管 免费个人空间申请 中国电信测速112 河南移动邮件系统 炎黄盛世 日本bb瘦 百度云1t 789电视剧 vul 新加坡空间 贵阳电信测速 更多