教程|Gaussian 16的Linux安装

Gaussian 16安装教程

一. Gaussian 16的安装

强烈建议请参考Gaussian Inc官方的安装教程。首次购买Gaussian的用户,在收到光盘的袋子里有也附有一份安装指南,请仔细阅读。

本教程是针对Linux操作系统

因为G16在Windows下的安装方法与其它的Windows软件的安装方法没有任何区别,所以本文仅举例说明如何在Linux下安装。

  1. G16与G09安装无本质差异
  2. 除了环境变量之外,Gaussian 16在Linux下的安装与Gaussian 09无异,请参考:《Gaussian 09的安装》

  3. 您需要具备必要的Linux基础
  4. 必要的Linux基础是需要的,请参考《Linux命令极简教程》。您只要花半天或一天的时间去学习,将会从Linux获益无穷。如果您不愿意学习linux,本文就没有办法帮助到您。

  5. 优先采用英文版Linux界面
  6. 对于Linux的初学者,建议您采用英文界面,可以避免很多”照着你的方法,我为什么不能…?”。

本文的一些假设

本教程以linux为例子,假设使用光盘安装、bash环境下安装,还假设:

  1. 安装软件的用户名为tom;
  2. tom的HOME目录(~目录)为:/home/tom;
  3. 安装文件
  4. 假设Gaussian 16安装文件为foo.tgz。而真实的安装文件可能为E6B-132X.tbz、E6B-113N.tbz、A64-114X.tgz或者诸如E6B-114N.tbJ等压缩格式的文件。无论何种压缩文件,请不要在Windows下解压后再上传Linux操作系统

关于G16与GaussView 6/Linux同时安装

先安装Gaussian 16,再安装GaussView 6。具体方法参见《GaussView 入门教程》

关于Linda的安装

Gaussian分带Linda的版本(跨节点并行)与不带Linda的版本(单机多核的共享内存并行,SMP)。带Linda的Gaussian与不带Linda的Gaussian在安装上没有任何区别。

二. 安装流程

第一步:确认自己的操作系统类型与适用版本

Gaussian 16支持INTEL/AMD 64BIT CPU, 还针对SSE4.2,AVX, AVX2指令集做了优化。因此,需要先了解自己的机器支持哪种指令集以便选择合适的Gaussian版本进行安装。
请在操作系统shell命令行键入:

grep -o -e sse4_2 -e avx -e sse4a -e avx2 /proc/cpuinfo
  1. 如果什么都不出现或仅有空白行,则您的机器不能支持SSE4.2或AVX指令集,需要使用Legacy版本进行安装;
  2. 如果包含有sse4_2或sse4a字眼而没有avx字眼,建议您SSE4.2指令集的Gaussian版本;
  3. 如果包含有avx字眼(无论有无sse4_2或sse4a字眼),建议您使用AVX指令集的Gaussian版本。
  4. 如果包含有avx2字眼,建议您使用支持AVX2指令集的Gaussian版本;
  5. 如果您的集群既有Legacy又有AVX等机器,为了避免出错,建议您用Legacy版本。

第二步:环境变量$g16root的设定

[tom@linuxbox ~]$ export g16root=~

第三步:切换到$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里有详细的描述,请仔细阅读。

第四步:完成安装

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

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

第五步:GaussView 6与Gaussian 16一起安装

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

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

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

GV6在Linux系统下的使用详见《GaussView 6教程》。

二. Gaussian 16环境变量的设定

Gaussian 16使用前需设定使用环境,先设定$g16root与$GAUSS_SCRDIR两个环境变量。

1. $g16root与$GAUSS_SCRDIR环境变量的设置

设置环境变量$g16root,建立tmp目录作为scratch目录:

[tom@linuxbox ~]$ export g16root=~
[tom@linuxbox ~]$ mkdir $g16root/tmp
[tom@linuxbox ~]$ export GAUSS_SCRDIR=$g16root/tmp


注意:G16在计算可能会在$GAUSS_SCRDIR里产生很大的临时文件,如果这个变量所在的目录空间不足或读取速度不够快会影响G16的使用,这里只是一个例子,请根据自己的情况灵活设定

2. 加载g16的其它环境变量:

[tom@linuxbox ~]$ source $g16root/g16/bsd/g16.profile

简便的方法是建立一个文件,比如为g16_env.sh,预先设置好各个所需的环境变量:

#-----g16_env.sh Start-----
export g16root=~
export GAUSS_SCRDIR=$g16root/tmp
. $g16root/g16/bsd/g16.profile
#-----g16_env.sh End-----

每次,在使用高斯或高斯视图(GaussView)前先键入下列命令:

[tom@linuxbox ~]$ source g16_env.sh


还可以将g16可执行文件目录添加到PATH里,并将下面内容添加到主目录的.bashrc里,实现打开shell可以直接使用Gaussian及其应用程序比如cubegen,cubman,formchk等:

#-----g16_env.sh Start-----
export g16root=~
export GAUSS_SCRDIR=$g16root/tmp
. $g16root/g16/bsd/g16.profile
export PATH=$PATH:$g16root/g16
#-----g16_env.sh End-----

注意:要特别注意空格(” “),句点(“.”),主目录(“~”)与美元符(“$”)不要漏写了。

使用cat命令,可以非常方便的将上述环境变量追加写到.bashrc文件里:

[tom@linuxbox ~]$cat g16_env.sh >> ~/.bashrc

退出shell,再重新登陆shell或者重新加载环境变量(用命令:source ~/.bashrc)就可以直接使用g16命令。注意:当你有多个不同的Gaussian版本同时在用的时候,不建议将上述环境变量加到.bashrc里。

更多的如何执行一个Gaussian作业,请参考:http://gaussian.com/man

3. AMD的Zen+构架(architecture)用户

Gaussian采用PGI编译,目前无法正确识别新的AMD CPU,因此无法识别Zen+构架的AVX2指令集,导致AVX2指令集的Gaussian无法在Zen+构架下使用,并且报错:

Error during math dispatch processing...
Error: Fastmath dispatch table is corrupt
  /opt/admin_home/g16/l302.exe() [0x152e4af]
  /opt/admin_home/g16/l302.exe() [0x9e6958]
  /opt/admin_home/g16/l302.exe() [0x75b148]
  /opt/admin_home/g16/l302.exe() [0x4dc751]
  /opt/admin_home/g16/l302.exe() [0x4bf664]
  /opt/admin_home/g16/l302.exe() [0x414bc9]
  /opt/admin_home/g16/l302.exe() [0x40f58c]
  /opt/admin_home/g16/l302.exe() [0x40bd2b]
  /opt/admin_home/g16/l302.exe() [0x40bc34]
  /usr/lib64/libc.so.6(__libc_start_main+0xf5) [0x2ad37bafd445]
  /opt/admin_home/g16/l302.exe() [0x4063a9]

特征错误是第1、2行提示,此时需要额外设定环境变量以解决这个问题:

export PGI_FASTMATH_CPU=sandybridge

4. 测试一个Gaussian 16自带的算例

万事具备,现在测试一个Gaussian自带的算例test0001.com。

首先建立一个demo目录

[tom@linuxbox g16]$ cd ~
[tom@linuxbox ~]$ mkdir demo
[tom@linuxbox ~]$ cd demo

从测试集里复制算例到当前目录:

[tom@linuxbox demo]$ cp $g16root/g16/tests/com/test0001.com .

执行计算:

[tom@linuxbox demo]$ $g16root/g16/g16 < test0001.com > test0001.log

如果已经设置了PATH,可以直接键入g16命令:

[tom@linuxbox demo]$ g16 < test0001.com > test0001.log

Gaussian 16如果不设置输出文件的名称,默认为:作业名.log,所以上面的命令于下面的一样:

[tom@linuxbox demo]$ g16 test0001.com

三. Gaussian 09与Gaussian 16的共存与切换

请将Gaussian 09与Gaussian 16的环境变量分别保存在g09_env.sh与g16_env.sh里,需要使用哪个版本,就启用哪个版本的环境变量。比如,需要使用G09,请键入:

[tom@linuxbox ~]$source g09_env.sh

四. 共享安装或集群共享安装

有的课题组希望安装一次,多个用户共享使用,请在单用户安装的基础上额外设置用户群组与分配权限,操作步骤如下:

第一步:群组设置

假设:gaussian群组(group)用户都可以使用gaussian,我们需要先将需要使用Gaussian的用户(tom,kim)预先添加到gaussian群组里。

建立gaussian群组:

[root@linuxbox tom]# groupadd gaussian

将用户tom加入到gaussian群组:

[root@linuxbox tom]# groupmems -g gaussian -a tom

同理,希望另一个用户kim也能使用tom安装的Gaussian的话,需要将kim也添加到gaussian用户组:

[root@linuxbox tom]# groupmems -g gaussian -a kim

第二步:给g16目录添加gaussian群组用户的权限

[root@linuxbox tom]# cd $g16root
[root@linuxbox tom]# chgrp -R gaussian g16

第三步:用户同步(仅限集群里安装)

集群安装最常见的问题是权限设置不成功,主要体现为:单节点组用户执行没问题,但在另一个计算节点上组用户计算失败,不能并行或没有读、执行的权限。请系统管理员做一个用户数据同步即可,因为新增的用户属性需要同步之后计算节点才能知道。

五. PBS作业管理系统提交作业

1. PBS作业脚本

假设:用户zdtest在其/home目录的demo里提交一个单节点32核计算作业test0397.com, 现在要写一个PBS作业脚本文件为Gaussian计算获取单节点、32核的计算资源。

解决方法:写一个test0397.pbs作业脚本,内容如下:

#--------从这里开始--------
#PBS -o /home/zdtest/demo/test0397_pbs.log
#PBS -e /home/zdtest/demo/test0397_pbs.err
#PBS -l nodes=1:ppn=32
source /home/zdtest/g16_env.sh
cd $PBS_O_WORKDIR
$g16root/g16/g16  test0397.com
#-------到这里结束--------

2. 提交PBS作业

[zdtest@node01 demo]$qsub test0397.pbs

3. 作业依赖

比如,我希望一个作业等待另一个作业结束之后再启动计算。典型的计算场景:(1)先Opt freq计算;(2)再进行激发态计算。那么需要使用作业依赖,用-W选项:

qsub -W depend=afterok:work1_id work2.pbs

其中work1_id为第一个作业的作业号, work2会在work1完成之后再自动启动计算。

六. LSF作业管理系统提交作业

1. 命令行提交作业

(1) 单线程作业

提交一个单线程g16计算作业(test0001.com)到默认队列:

[tom@linuxbox demo]$bsub g16 test0001.com

(2) 多线程作业

提交一个32线程g16计算作业(test0397.com)到默认队列:

[tom@linuxbox demo]$bsub -n 32 g16 test0397.com

(3)命令行提交作业的小结

LSF bsub格式如下:

bsub -n Z -q QUEUENAME -i INPUTFILE -o OUTPUTFILE COMMAND

-n Z: 提交作业需要的线程数;

-q QUEUENAME: 指定作业提交的队列。如果不添加 -q选项,系统将把作业提交到默认的作业队列。

-i INPUTFILE: 表示程序需要读入的文件名

-o OUTPUTFILE: 表示输出文件名,作业提交后的输出到标准输出信息将会保存在这个文件中。

COMMAND: 需要执行的命令

(4) 命令行提交openmpi并行计算作业

openmpi并行需要加上“-a openmpi mpirun.lsf”:

[tom@linuxbox demo]$bsub -n 32 -a openmpi mpirun.lsf ./foo.sh

2. LSF脚本提交作业

注意:请咨询系统管理员如何请求计算资源,比如节点、内存与核心数。

(1) 脚本文件的准备

假设每个节点32核,使用8个节点共256核多线程计算作业,脚本文件为foo.lsf,希望提交后的作业名称为HELLO_LSF,要提交一个foo.sh的计算作业。

#---------这里开始----------
#作业名称
#BSUB -J HELLO_LSF

#标准输出
#BSUB -o job.out

#错误信息输出
#BSUB -e job.err

#请求计算的核心数
#BSUB -n 256

#指定每个节点的核心数为32,也就是说上面的256核从8个32核节点来得
#BSUB -R "span[ptile=32]"

#计算命令行,将下面的内容修改为gaussian计算的命令即可
cd /home/gkxiao/demo
./foo.sh
#---------这里结束----------

假设每个节点32核,使用1个节点共32核多线程计算作业,脚本文件为foo.lsf,希望提交后的作业名称为HELLO_LSF,要提交一个foo.sh的计算作业。

#---------这里开始----------
#作业名称
#BSUB -J HELLO_LSF

#标准输出
#BSUB -o job.out

#错误信息输出
#BSUB -e job.err

#请求计算的核心数
#BSUB -n 32

#指定每个节点的核心数为32,也就是说上面的256核从8个32核节点来得
#BSUB -R "span[hosts=1]"

#计算命令行,将下面的内容修改为gaussian计算的命令即可
cd /home/gkxiao/demo
./foo.sh

#---------这里结束----------

(2) 提交作业

[tom@linuxbox demo]$bsub foo.lsf

七. SLURM作业管理系统(同时适用于天河二号)

交互式提交作业

假设作业为Gaussian自带算例的test0397.com,则提交一个单节点、24核心、96GB内存SMP并行的计算作业:

srun -N 1 -n 1 -c 24 g16 -m=96GB -p=24 test0397.com

等同于:

srun -N 1 -n 24 g16 -m=96GB -p=24 test0397.com

作业提交后会返回作业号,比如1758829。

有的队列对最长运行时间有约束,则需要指定作业的队列与最长运行时间,此时可以用-p与-t两个选项来配置队列与时长。

srun -p paratera -N 1 -n 1 -c 24 -t 72000 g16 -m=96GB -p=24 test0397.com

或者:

srun -p paratera -N 1 -n 24 -t 72000 g16 -m=96GB -p=24 test0397.com

其中-p paratera表示作业提交到paratera队列;-t的单位为分钟,表示运算最长时间为72000分钟(1200小时,50天)。

脚本提交作业

假设作业为Gaussian自带算例的test0397.com,则提交一个单节点、24核心并行计算的脚本,脚本(test0397.sh)内容如下:

#!/bin/bash

# set the number of nodes
#SBATCH --nodes=1

# set max wallclock time
#SBATCH --time=5000:00:00

# set name of job
#SBATCH --job-name=M01_2

# mail alert at start, end and abortion of execution
#SBATCH --mail-type=ALL

# send mail to this address
#SBATCH --mail-user=calc@molcalx.com

# run the application
cd $SLURM_SUBMIT_DIR
scrdir=`mktemp -d XXXX`
export GAUSS_SCRDIR=$SLURM_SUBMIT_DIR/$scrdir
g16 -p=24 -m=48GB test0397.com
rm -fr $scrdir

提交作业

sbatch test0793.sh

这个脚本可以简化为(test0793.sh):

#!/bin/sh
g16 -p=24 -m=48GB test0793.com

对应提交作业的方式为:

sbatch -J test0793 -p paratera -N 1 -n 1 -c 24 -t 72000 test0793.sh

或者:

sbatch -J test0793 -p paratera -N 1 -n 24 -t 72000 test0793.sh

显示作业详细信息

scontrol show job 1758829

取消作业

取消作业号为1758829的作业:

scancel 1758829

作业依赖

如果nmr.sh作业需要在另一个作业(比如jobid为2101576)成功后再执行计算,则可以使用作业依赖:

yhbatch -p paratera -N 1 -n 24 -t 72000 --dependency=afterok:2101576  nmr.sh

八. 跨节点并行

以PBS作业管理系统为例说明跨节点并行的使用。

1. 软件的安装与普通的Gaussian 16一样

假设Gaussian 16计算环境如下:

export $g16root=~
export $GAUSS_SCRDIR=~/tmp
source $g16root/bsd/g16.profile

2. 跨节点并行需要额外设置三个环境变量

  • (1)节点间通讯协议,通过$GAUSS_LEFLAGS来接收并传给Gaussian
  • export GAUSS_LFLAGS=”-vv -opt ‘Tsnet.Node.lindarsharg: ssh'”

  • (2)用环境变量$GAUSS_WDEF接收计算节点,并传递给Gaussian
  • PBS脚本从管理系统获取计算资源,并传递给Gaussian,从PBS的管理器获取节点

    export GAUSS_WDEF=”$(cat $PBS_NODEFILE|sort|uniq|awk ‘{ printf(“%s,”,$1) }’ | sed ‘s/,$//’)”

  • (3)用环境变量$GAUSS_PDEF来设定每个节点SMP并行的核心数

    比如每个节点12个核心计算:

    export GAUSS_PDEF=”12″

    3. PBS脚本示例

    设定G16环境变量(g16_env.sh)

    #---g16_env.sh-------
    export g16root=/home/test2
    export GAUSS_SCRDIR=$g09root/tmp
    export GAUSS_LFLAGS="-vv -opt 'Tsnet.Node.lindarsharg: ssh'"
    . $g16root/g16/bsd/g16.profile
    #---g16_env.sh-------
    

    假设要在2个节点、每个节点12个核心进行并行计算,则PBS脚本如下:

    #PBS -o /home/zdtest/demo/test0397_pbs.log
    #PBS -e /home/zdtest/demo/test0397_pbs.err
    #PBS -l nodes=2:ppn=12
    
    source /home/zdtest/g16_env.sh
    export GAUSS_WDEF="$(cat $PBS_NODEFILE|sort|uniq|awk '{ printf("%s,",$1) }' | sed 's/,$//')"
    export GAUSS_PDEF="12"
    
    # working directory
    cd /home/zdtest/demo
    
    #run g16 job
    $g16root/g16/g16  foo.com
    
    

    九. 上门安装技术服务

    如果您需要上门安装、集群技术服务,我们会为您推荐第三方上门服务(包含集群维护服务)。

    十. 问题反馈

    请联系我们:020-38261356 info@molcalx.com