Gaussian16的安装方法

1 Gaussian的安装

1.1 设置环境变量

假设当前用户名是x,要把Gaussian安装到自己的主目录下,且用的是bash,那么安装过程为:

把Gaussian压缩包解压到/home/x/目录下

建立一个文件夹用于储存Gaussian运行过程中产生的临时文件,位置随意。比如此例我们建立/home/x/Gaussian/tmp。

用vi或者gedit等文本编辑器打开/home/x/.bashrc,在里面加入以下语句然后保存文件。

export g16root=/home/x/Gaussian
export GAUSS_SCRDIR=/home/x/Gaussian/tmp
source /home/x/Gaussian/g16/bsd/g16.profile

其中,g16root环境变量用来说明Gaussian目录被放在了哪个目录下。GAUSS_SCRDIR环境变量用来说明哪个文件夹作为临时文件夹。source命令用来执行Gaussian自带的脚本文件,其中包含了各种配置Gaussian运行环境的命令。

重新进入终端使以上内容生效(如果你是用Linux图形环境,就关闭终端窗口,然后重新打开。如果你是通过ssh方式登录服务器,就断开连接,然后重新连接服务器)

1.2 切换到$g16root目录,并且解压安装文件

[tom@linuxbox ~]$ cd $g16root
[tom@linuxbox ~]$ tar -zvxf foo.tgz

解压后,在/home/tom目录下会生成一个新的目录:g16。

如果安装文件是.tbz结尾,请将tar的参数由-zvxf改为-jvxf:

[tom@linuxbox ~]$ tar -jxf foo.tbz

如果安装文件是.tbj或tbJ结尾,请将tar的参数由-zvxf改为-Jvxf:

[tom@linuxbox ~]$ tar -Jvxf foo.tbj

具体的安装方法,在安装光盘的REAME里有详细的描述,请仔细阅读。

1.3 完成安装

[tom@linuxbox ~]$ cd $g16root/g16
[tom@linuxbox g16]$ ./bsd/install

至此,已经完成安装,可以开始使用Gaussian 16了。

1.4 GaussView 6与Gaussian 16一起安装

方法:先安装Gaussian,再安装GaussView。假设GaussView安装文件为gv.tgz,在安装完Gaussian之后,键入如下命令:

[tom@linuxbox ~]$ cd $g16root
[tom@linuxbox ~]$ tar -zxf gv.tgz

总的来说,需要切换到$g16root目录,将GaussView解压到该目录即可。

Tips:

Gaussian目录下的Default.Route用来设定默认用的计算资源(如果没有此文件就新建一个),-M-设置默认用的最大内存量(一般用MB或GB为单位),-P-设置默认用多少CPU核数来并行计算。比如我们想默认用36个核心、最大60GB内存做计算,就在/home/x/g16/Default.Route里面写入以下内容
-M- 60GB
-P- 36
此文件中的设置优先级低于输入文件里的%mem和%nproc设置。因此,输入文件里没写%mem的时候才会用这里的-M-设置,输入文件里没写%nproc的时候才会使用这里的-P-设置(如果你既没在这里设-P-也没写%nproc,那么程序只用单核计算。如果你既没在这里设-M-也没写%mem,那么G09最多用256MB内存,G16最多用800MB内存)。

最后,切换到/home/x/g16/目录,运行chmod 750 -R *命令,之后Gaussian就可以使用了。这里-R *代表对当前目录下所有文件和所有子目录下的文件都设置权限。

友情提示:默认情况下,当Gaussian任务运行中途中断,在GAUSS_SCRDIR环境变量设的临时文件夹里就会残留当前运行时生成的临时文件,文件名是任务的pid号。日积月累,可能此目录下的残留的临时文件体积会巨大,把硬盘占满,导致之后的各种Gaussian任务运行一开始就失败。因此,建议定期把临时文件夹里的内容清空,但不要在有任务运行的时候清理(或者,至少清理的时候别清掉当前任务对应的临时文件。用top或ps命令可以查看pid号)。

PS 1:网上一些乌七八糟的介绍安装Gaussian的文章中还说要设定PATH、LD_LIBRARY_PATH、GAUSS_EXEDIR之类的环境变量,这是完全多余的。打开g16.profile看一眼就知道,这些环境变量在profile文件里都会自动设好,因此按照前文source一遍.profile文件就完事了,根本没有丝毫必要手动去设那些环境变量。本文介绍的绝对是步骤最少而且最正确的安装步骤。

2 Gaussian在Linux下运行的命令

这里顺便提一下Gaussian在Linux下的运行方法。常见有以下几种,test.gjf是输入文件
g16 < test.gjf > test.out    (信息都输出到test.out里。末尾可以再加上&令任务在后台运行)
g16 < test.gjf |tee test.out (信息输出到test.out的同时也同时输出到屏幕上)
g16 test.gjf  (输出文件将默认为当前目录下的test.log)

以上面第1种或第3种方式运行时,如果你又想把输出信息在屏幕上不断同步显示了,那么可以运行tail -f test.out。

使用SSH远程登录服务器时,如果提交了Gaussian任务,则与服务器连接中断后任务也相应地中断。为了能让任务在断开连接后也能一直在服务器上继续跑完,提交任务时应当写
nohup g09 < test.gjf > test.out &
并且退出时要用exit命令先优雅地断开连接,而不要直接关终端。这样任务就会在服务器上继续跑直到完成。

3 Gaussian运行的几个常见问题

 

(1)运行时提示files in the gaussian directory are world accessible. this must be fixed

这说明你没做chmod 750 -R *这一步。Gaussian如果发现其可执行文件对于所有用户都可以访问时就不干,这是Gaussian的一个莫名其妙、很固执的地方。

 

(2)运行时提示Error: illegal instruction , illegal opcode

这说明Gaussian和你的CPU不兼容,确切来说,是你的CPU太老,不支持Gaussian在开发者编译程序的时候使用的指令集。比如Gaussian 16有利用较新的AVX2指令集的版本,也有不利用AVX2指令集的版本,前者运行速度更快。如果你用的是前者,而你的CPU较老,比如是XEON v3及之前系列的服务器CPU,或者你用的是Intel的消费级的CPU而型号是3xxx及之前的,由于不支持AVX2指令集,运行就会报上面的错误。解决方法就是购买非AVX2版的Gaussian 16或者换机子。PS:什么CPU支持什么指令集,可以去看我的硬件资料库,对于Intel的CPU也可以去查Intel ARK(https://ark.intel.com/)。

还有一种情况是你用的是较新的AMD的CPU,比如ZEN2架构的,虽然支持相应的指令集,但由于编译器与CPU架构之间的兼容问题导致以上报错。可尝试在运行Gaussian前通过这行命令定义环境变量:export PGI_FASTMATH_CPU=sandybridge。

 

(3)运行时该用多少核?

如果你的机子打算只跑一个Gaussian任务,那么建议CPU有多少物理核心就用多少核数来并行,这样最快。如果有n个任务在跑,那么分配给所有任务的核心数加和不应当超过物理核心数。注意,对于采用了超线程(HT)技术的CPU而且管理机子的人没有干出把超线程关闭这种多余的事情的话,逻辑核心数会是物理核心数的两倍。如果你搞不懂这一点,务必看《正确看待超线程(HT)技术对计算化学运算的影响》。比如,如果你的机子是双路2696v3 CPU,一共有36个物理核心,对应72个逻辑核心,而且你平时只跑一个Gaussian任务,那么Default.Route里的-P-后面应该写36。

注意,当设定的并行核数超过64时,至少对于Gaussian 16 B.01及之前的版本来说,Gaussian一上来就会报错。解决办法是在~/.bashrc里添加比如export OMP_THREAD_LIMIT=256,这样就把并行核数上限提升到256了,因此就可以使用超过64核并行了。

 

(4)运行时该分配多少内存?

Gaussian里同一个任务可能有不同算法,有的速度快但是耗内存高,有的算法速度慢但是耗内存少,如果你的内存给得足够大,Gaussian往往会自动选择速度最快的算法。而且对于有的算法,当可用内存较大时,计算量就会较小。因此,一般建议是有多少空余物理内存,就分配多少内存给Gaussian。何况,有些任务本身就特别耗内存,内存分配小了则Gaussian根本没法完整执行完此任务,或者程序会自动降低并行线程数来降低内存消耗,使得任务在有限的内存量下得以算完,但显然会因此导致耗时增加。如果你的机子里打算只跑一个Gaussian任务,那么把实际物理内存量中扣除一部分分配给操作系统和后台任务的,其余部分都给Gaussian即可。为稳妥起见,我建议把90%左右的物理内存分配给Gaussian。如果内存分配量超过了空余物理内存,将导致程序运行一开始就会报错,或者程序可能会试图使用虚拟内存(即把相对来说速度很慢的硬盘虚拟成内存来用)而导致计算速度被严重拖慢。如果你要跑多个Gaussian任务,那么所有任务分配的内存量的总和不应当超过空余物理内存量。

给Gaussian分配的内存量是Gaussian对内存使用量的上限,不是说分配多少就都会被占满。诸如普通泛函的DFT单点任务(假设以默认的direct SCF方式运行时),由于其算法原因,注定就占不了什么内存,所以你分配200GB可能实际也只会占用300MB。

PS:有兴趣的读者不妨看看《硬盘速度与内存容量对量子化学计算速度影响的测试》,里面有一些关于内存分配量对计算速度影响的测试。

 

(5)如何在机子里令Gaussian 09和16并存?

比如你把g09和g16都放在了/home/sob下,为了能够令g09和g16都有可能被使用,你可以在.bashrc文件中加入比如以下内容

export g16root=/home/x/Gaussian
export GAUSS_SCRDIR=/home/x/Gaussian/tmp
source /home/x/Gaussian/g16/bsd/g16.profile

export g09root=/home/x/Gaussian
source /home/x/Gaussian/g09/bsd/g09.profile
#export g16root=/home/x/Gaussian
#source /home/x/Gaussian/g16/bsd/g16.profile
export GAUSS_SCRDIR=/home/sob/g09/scratch
其中#用来注释,因此凡是前头带#的行,说明此行在当前情况下不生效。因此,当前情况只能用g09而不能用g16。如果你接下来想改用g16,那么就修改.bashrc文件,把g16对应的两行前头的#挪到g09对应的两行的开头,然后保存文件,重新进入终端,此时g09就没法用了,而g16则可以使用了。

由于g09和g16在一些运行环境的配置上是共通的,没有办法同时令g09和g16命令都可以正常使用。

PS:实际上,每次运行bash命令,也会把.bashrc文件里的信息执行一遍,但在前面的叙述中,都是通过重新进入终端来使.bashrc内的信息生效,因为这样做是最保险的。这是考虑到g09或g16.profile的某些命令可能是对环境变量里的内容进行追加,而不是重设。只有重新进入终端,那么当前的环境变量和只执行过一次profile里的配置命令才是相同的,才可以严格确保g09和g16不会在运行时候出现混乱。

 

(6)我运行formchk命令,怎么提示找不到命令?

这说明你没有严格按照前文的方法配置Gaussian(可能你被网上的一些文章坑了)。

 

(7)运行一开始提示此类报错怎么回事?

Entering Gaussian System, Link 0=g09
PGFIO/stdio: No such file or directory
PGFIO-F-/OPEN/unit=11/error code returned by host stdio – 2.
File name = /sob/g09/scratch/Gau-75009.inp
这说明GAUSS_SCRDIR环境变量所指向的路径(比如当前为/sob/g09/scratch)目前不存在,应当仔细检查路径。另外,如果GAUSS_SCRDIR环境变量指向的是一个虽然存在,但是你没有可读写权限的路径,Gaussian运行时由于没法创建临时文件,显然也会运行失败。

 

(8)运行一开始报错galloc:  could not allocate memory

说明你设Gaussian内存使用量上限过大了,超过了实际可分配的内存量。虽然如前所述,不是你给Gaussian分配多少内存Gaussian就会实际用多少(计算过程中内存实际使用量可以在top命令里看),但是Gaussian会在计算一开始就向系统请求你设的内存量,如果发现没法分配那么多就直接报错

上一篇
下一篇