一. Gaussian 16的安装
强烈建议请参考Gaussian Inc官方的安装教程。首次购买Gaussian的用户,在收到光盘的袋子里有也附有一份安装指南,请仔细阅读。
本教程是针对Linux操作系统
因为G16在Windows下的安装方法与其它的Windows软件的安装方法没有任何区别,所以本文仅举例说明如何在Linux下安装。
- G16与G09安装无本质差异
- 您需要具备必要的Linux基础
- 优先采用英文版Linux界面
除了环境变量之外,Gaussian 16在Linux下的安装与Gaussian 09无异,请参考:《Gaussian 09的安装》。
必要的Linux基础是需要的,请参考《Linux命令极简教程》。您只要花半天或一天的时间去学习,将会从Linux获益无穷。如果您不愿意学习linux,本文就没有办法帮助到您。
对于Linux的初学者,建议您采用英文界面,可以避免很多”照着你的方法,我为什么不能…?”。
本文的一些假设
本教程以linux为例子,假设使用光盘安装、bash环境下安装,还假设:
- 安装软件的用户名为tom;
- tom的HOME目录(~目录)为:/home/tom;
- 安装文件
假设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
- 如果什么都不出现或仅有空白行,则您的机器不能支持SSE4.2或AVX指令集,需要使用Legacy版本进行安装;
- 如果包含有sse4_2或sse4a字眼而没有avx字眼,建议您SSE4.2指令集的Gaussian版本;
- 如果包含有avx字眼(无论有无sse4_2或sse4a字眼),建议您使用AVX指令集的Gaussian版本。
- 如果包含有avx2字眼,建议您使用支持AVX2指令集的Gaussian版本;
- 如果您的集群既有Legacy又有AVX等机器,为了避免出错,建议您用Legacy版本。
第二步:环境变量$g16root的设定
第三步:切换到$g16root目录,并且解压安装文件
[tom@linuxbox ~]$ tar -zvxf foo.tgz
解压后,在/home/tom目录下会生成一个新的目录:g16。
如果安装文件是.tbz结尾,请将tar的参数由-zvxf改为-jvxf:
如果安装文件是.tbj或tbJ结尾,请将tar的参数由-zvxf改为-Jvxf:
具体的安装方法,在安装光盘的REAME里有详细的描述,请仔细阅读。
第四步:完成安装
[tom@linuxbox g16]$ ./bsd/install
至此,已经完成安装,可以开始使用Gaussian 16了。
第五步:GaussView 6与Gaussian 16一起安装
方法:先安装Gaussian,再安装GaussView。假设GaussView安装文件为gv.tgz,在安装完Gaussian之后,键入如下命令:
[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 ~]$ mkdir $g16root/tmp
[tom@linuxbox ~]$ export GAUSS_SCRDIR=$g16root/tmp
注意:G16在计算可能会在$GAUSS_SCRDIR里产生很大的临时文件,如果这个变量所在的目录空间不足或读取速度不够快会影响G16的使用,这里只是一个例子,请根据自己的情况灵活设定。
2. 加载g16的其它环境变量:
简便的方法是建立一个文件,比如为g16_env.sh,预先设置好各个所需的环境变量:
#-----g16_env.sh Start-----
export g16root=~
export GAUSS_SCRDIR=$g16root/tmp
. $g16root/g16/bsd/g16.profile
#-----g16_env.sh End-----
每次,在使用高斯或高斯视图(GaussView)前先键入下列命令:
还可以将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文件里:
退出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 ~]$ mkdir demo
[tom@linuxbox ~]$ cd demo
从测试集里复制算例到当前目录:
执行计算:
如果已经设置了PATH,可以直接键入g16命令:
Gaussian 16如果不设置输出文件的名称,默认为:作业名.log,所以上面的命令于下面的一样:
三. Gaussian 09与Gaussian 16的共存与切换
请将Gaussian 09与Gaussian 16的环境变量分别保存在g09_env.sh与g16_env.sh里,需要使用哪个版本,就启用哪个版本的环境变量。比如,需要使用G09,请键入:
四. 共享安装或集群共享安装
有的课题组希望安装一次,多个用户共享使用,请在单用户安装的基础上额外设置用户群组与分配权限,操作步骤如下:
第一步:群组设置
假设: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]# 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作业
3. 作业依赖
比如,我希望一个作业等待另一个作业结束之后再启动计算。典型的计算场景:(1)先Opt freq计算;(2)再进行激发态计算。那么需要使用作业依赖,用-W选项:
qsub -W depend=afterok:work1_id work2.pbs
其中work1_id为第一个作业的作业号, work2会在work1完成之后再自动启动计算。
六. LSF作业管理系统提交作业
1. 命令行提交作业
(1) 单线程作业
提交一个单线程g16计算作业(test0001.com)到默认队列:
(2) 多线程作业
提交一个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”:
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) 提交作业
七. 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
- (2)用环境变量$GAUSS_WDEF接收计算节点,并传递给Gaussian
- (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
export GAUSS_LFLAGS=”-vv -opt ‘Tsnet.Node.lindarsharg: ssh'”
PBS脚本从管理系统获取计算资源,并传递给Gaussian,从PBS的管理器获取节点
export GAUSS_WDEF=”$(cat $PBS_NODEFILE|sort|uniq|awk ‘{ printf(“%s,”,$1) }’ | sed ‘s/,$//’)”