Post

Study note:集群环境下MOKIT的部署

Study note:集群环境下MOKIT的部署

做多参考计算时,活性空间的确定是个麻烦的问题,涉及很多经验性的内容。MOKIT是一个辅助多参考计算的程序,可以通过gvb计算来自动确定活性空间,一定程度上解决了上述问题。 然而,笔者首先在安装时就遇到了问题。MOKIT做gvb计算默认调用GAMESS,做CASSCF计算默认调用pyscf,而这两个程序集群并没有提供,需要手动安装。尤其是GAMESS还要本地编译,这对集群老旧的系统来说就很麻烦。多番尝试后,今天终于解决了全部问题,在此记录。

除了基本的配置,MOKIT还可以调用Dalton、Molcas、MRCC等,日后慢慢尝试编译。

1. MOKIT与PySCF

由于这两个程序都可以通过conda来安装,所以放在一起。

首先,创建一个干净的python环境:

1
2
conda create -n mokit python=3.9
conda activate mokit

按照MOKIT手册说明,由conda安装MOKIT时,需要注意conda-forge的环境与MOKIT不兼容的问题。如果开启了conda-forge,需要这样安装MOKIT和PySCF:

1
conda install mokit pyscf -c mokit/label/cf -c conda-forge

或者拆开:

1
2
conda install pyscf -c conda-forge
conda install mokit -c mokit/label/cf -c conda-forge

安装好后,设置环境变量

1
2
3
4
5
6
export MOKIT_ROOT=$HOME/miniconda/envs/mokit-py39/lib/python3.9/site-packages/mokit
export PATH=$MOKIT_ROOT/bin:$PATH
export PYTHONPATH=$MOKIT_ROOT:$PYTHONPATH
export GMS=$HOME/apprepo/gamess/rungms       # optional
export PSI4=$HOME/psi4conda/bin/psi4          # optional
export BDF=$HOME/software/bdf-pkg/sbin/run.sh # optional

按照下一节方法编译好GAMESS后,还可以运行一下测试例确认安装成功:

1
2
3
4
5
6
7
8
9
10
%mem=4GB
%nprocshared=4
#p CASSCF/cc-pVDZ

mokit{}

0 1
O      -0.23497692    0.90193619   -0.068688
H       1.26502308    0.90193619   -0.068688
H      -0.73568721    2.31589843   -0.068688

将该文件保存为00-h2o_cc-pVDZ_1.5.gjf,运行:

1
automr 00-h2o_cc-pVDZ_1.5.gjf >00-h2o_cc-pVDZ_1.5.out 2>&1

期间MOKIT会自动调用Gaussian、PySCF、GAMESS进行计算,最终结果可以在00-h2o_cc-pVDZ_1.5.out中找到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Enter subroutine do_cas...
CASSCF(4e,4o) using program pyscf
doubly_occ=3, nvir=17, Root=0, Xmult=1, RIJK=F
No. of active alpha/beta e = 2/2
$python test1_uhf_gvb4_CASSCF.py >test1_uhf_gvb4_CASSCF.out 2>&1

E(CASCI)  =       -75.90802033 a.u.
E(CASSCF) =       -75.90822993 a.u.
----------------------- Radical index -----------------------
biradical character y0 = n_LUNO =  0.165
tetraradical character y1 = n_{LUNO+1} =  0.139
Yamaguchi's unpaired electrons  (sum_n n(2-n)      ):  1.121
Head-Gordon's unpaired electrons(sum_n min(n,(2-n))):  0.607
Head-Gordon's unpaired electrons(sum_n (n(2-n))^2  ):  0.315
-------------------------------------------------------------
Leave subroutine do_cas at Mon Nov 25 00:02:25 2024

2. GAMESS

GAMESS的安装包可以从官网获取。输入E-mail地址,选择要下载的类型,点提交(可能反应有点慢)。笔者这里选择的是64 bit x86_64 under Linux using Intel OneAPI compilers,官方确认后会把下载页的密码发给你,就可以下载安装包了。笔者在十月初曾尝试过编译GAMESS,但数次尝试总是卡在ifort上。今天再次安装时发现闹乌龙了,oneAPI从2024.2版本后已不再提供ifort,而是升级为ifx。不过今天笔者已经使用gcc编译成功,先记下来,后续尝试ifx。

Intel oneAPI

GAMESS使用的MKL数学库需要去Intel oneAPI官网下载Base toolkit来安装。在线模式安装包或通过wget下载安装包可能遇到连接超时的问题,可以选择下载离线安装包(2.2gb左右)。如果不想用gcc,要用Intel提供的Fortran编译器,则还要下载HPC toolkit。 将安装包上传到服务器,执行:

1
bash ./intel-oneapi-base-toolkit-2025.0.0.885_offline.sh -a --silent --cli --eula accept

完成后,MKL数学库就安装好了。ifx的安装是类似的:

1
bash ./intel-oneapi-hpc-toolkit-2025.0.0.825_offline.sh -a --silent --cli --eula accept

这里其实进入安装界面来安装更好,可以选择不安装一些用不到的包。

编译

首先解压GAMESS

1
tar -xvzf GAMESS-US.gz

如果是为了MOKIT计算而编译GAMESS,解压后需要先修改GAMESS的源码,即将下文提到的修改脚本复制到source目录。

解压后进入GAMESS目录,运行配置脚本

1
./config

配置可以参考sob老师博文里的操作,不过对于最新oneAPI版本操作会略有变化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[enter]   //跳过提示
linux64   //操作系统类型
[enter]   //使用默认路径
[enter]   //使用默认路径
[enter]   //使用默认版本号00
[enter]   //不对特定超算环境编译
gfortran  //这里如果采用ifx作为编译器,则输入oneapi-ifx
[enter]   //接下来设置数学库
mkl       //然后会提示找到MKL库在work/home/intel/oneapi/mkl/2025.0
work/home/intel/oneapi/mkl/2025.0   //当前MKL数学库的位置。sob老师原帖提到的bug笔者没有遇到,可能已经修复
[enter]   //接下来设置GAMESS DDI
sockets   //节点内并行填sockets就行
[enter]   //接下来开始对GAMESS的编译选项进行设置。如果下面的所有选项都用no的话,直接按住回车键都用默认的no就行了
no   //不编译可以令GAMESS-US支持更多DFT泛函的libxc界面(否则还需要联网下载)
no   //不建立MDI界面(用于和其它代码交互的界面)
no   //不编译MSU CCT3、CCSD3A、ACP、DEA/DIP-EOMCC代码,否则会花费很多时间,而且一般用不着
no   //不编译用于GPU加速的LIBCCHEM 2.0
no   //不编译VeraChem's VM2库
no   //不建立TINKER插件
no   //不建立VB2000插件
no   //不建立XMVB插件
no   //不建立NEO(考虑核量子效应的方法)插件
no   //不建立NBO插件
no   //不建立RISM-SCF-cSED插件

完成后,目录下生产了一个install.info文件,此时就可以开始编译GAMESS了:

1
make -j 32

这会花上十来分钟编译。编译完毕后,会生成gamess.00.x二进制文件。

如果您是按照上文叙述的方式编译的,却遇到链接lapack失败的情况,请首先尝试彻底关闭conda环境(包括base)再次编译,不要信他提示的鬼话!笔者折腾了一天,每种办法都试过,全然无效,最后关了conda直接解决。

配置环境

临时文件目录初始配置是无法运行的,需要更改GAMESS目录下的rungms脚本。打开rungms,在开头的版本信息等后,有:

1
2
3
4
5
6
#
set TARGET=sockets
set SCR=~/apprepo/gamess/scr        //把这里的gamess路径改成你的gamess对应路径,scr文件夹需要自己建立
set USERSCR=~/apprepo/gamess/scr    //与上同
set GMSPATH=~/apprepo/gamess        //把这里的gamess路径改成你的gamess对应路径
set DEL_OLD=yes

然后修改默认运行核数:

1
if (null$NCPUS == null) set NCPUS=1

把1改成32,默认就使用32核运行了。改好后,运行:

1
./runall 00

测试完成后,把结果移动到gamess/tests/standard,运行./checktst与标准结果进行对比,确定编译是否成功。大部分通过即可,小部分由于版本特征不一致可能有偏差。 确定编译成功后,可以将

1
export PATH=$PATH:~/apprepo/gamess

加入.bashrc,这样就可以随时调用了。

针对MOKIT的修改

原版GAMESS只能计算12对gvb。由于MOKIT需要计算很多对gvb来确定活性空间,需要修改GAMESS源码来增加gvb上限。修改脚本modify_GMS1.shmodify_GMS2.f90在MOKIT的gitlab中提供了。

如果尚未编译GAMESS,可以保留modify_GMS1.sh的第21-69行内容,其余行删掉,然后将这两个文件复制到gamess/source/目录,并按GAMESS常见编译步骤编译。最终获得可执行文件gamess.00.x,改名为gamess.01.x即可被MOKIT识别。

如果已经编译好GAMESS,直接将这两个文件复制到gamess/source/目录,然后运行./modify_GMS1.sh。这会修改源码并重新编译GAMESS,生成gamess.01.x文件。重新编译后,可以使用./runall 00再进行一次测试。

Ref:

  1. GAMESS简易编译教程
  2. GAMESS-US的编译方法
  3. [GAMESS-US] Ubuntu20.04 安装 GAMESS
This post is licensed under CC BY 4.0 by the author.