科学计算软件编译安装方法说明 --- vasp 篇 (提供免费测试 QQ 178068275)
官网地址:
http://www.vasp.at/
截止目前(2017.4.22)最新版本:
http://www.vasp.at/index.php/news/44-administrative/118-new-release-vasp-5-4-4
下载:
需要购买版权
1. 什么是VASP?
VASP 全称 Vienna Ab-initio Simulation Package。VASP 是维也纳大学 Hafner 小组开发的进行电子结构计算和量子力学-分子动力学模拟软件包。它是目前材料模拟和计算物质科学研究中最流行的商用软件之一。
2. vasp 编译环境
Intel Compiler /GNU Compiler + MPI Compiler
3. 安装 Intel Compiler 编译器,设置编译环境
如果使用的是Intel的CPU,建议使用Intel的编译器。
详细安装方法参见博客相关文章。
例如使用TH-1A的Intel 2013编译器编译 vasp,可以加载如下环境变量:
source /opt/intel/composer_xe_2013.0.079/bin/iccvars.sh intel64
source /opt/intel/composer_xe_2013.0.079/bin/ifortvars.sh intel64
source /opt/intel/composer_xe_2013.0.079/mkl/bin/mklvars.sh intel64
4.安装 MPI Compiler,设置编译环境
编译并行版的程序需要并行编译器,例如MPI并行的程序需要MPI编译器,常用的MPI例如Intel MPI 、MPICH 、OPENMPI等。
不同的机器可能针对自身硬件进行MPI优化,天河系统的MPI是基于开源MPICH进行的二次开发优化,进而支持性能卓越的天河自主高速互联网络。
详细安装方法参见博客相关文章。
例如使用TH-1A的Intel 2013编译器编译的mpich,可以加载如下环境变量:
export MPI_HOME=/usr/local/mpi-intel2013
export PATH=$MPI_HOME/bin:$PATH
export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH
自从vasp5.4版本以后,它的目录结构及makefile有了很大的改进和提升,不再像之前需要繁琐的修改了,而是通过makefile.include文件进行配置即可。
5.1 打补丁(不一定需要)
因为vasp5.4版本是最新版本,如果官方更新了修复补丁,可以从官网下载,先打补丁。
举例:
现在拥有vasp.5.4.tar.gz 及 patch.5.4.1.08072015.gz 补丁,可以如下操作:
tar zxvf vasp.5.4.tar.gz
gunzip patch.5.4.1.08072015.gz
mv patch.5.4.1.08072015 vasp.5.4
cd vasp.5.4
patch -p1 < patch.5.4.1.08072015
5.2 修改makfile.include
tar zxvf vasp.5.4.tar.gz # 如果打了补丁则并不需要再次解压缩
cd vasp.5.4
# 修改 makefile.include 文件
cp ./arch/makefile.include.linux_intel makefile.include
# 备注:该步骤为主要修改部分,请仔细修改。
vim makefile.include
FC = mpiifort
FCL = mpiifort -mkl
修改为:
FC = mpif90
FCL = mpif90 -mkl
说明:
默认是使用intel的mpi,即为mpiifort。但是如果使用的是例如mpich/openmpi的话,那么需要修改为mpif90。
将:BLACS = -lmkl_blacs_openmpi_lp64
修改为:BLACS = -lmkl_blacs_intelmpi_lp64
说明:
检查BLACS ,如果默认就是 -lmkl_blacs_intelmpi_lp64则不需要修改(针对impi及mpich等);如果使用openmpi的时候则需要设置为 -lmkl_blacs_openmpi_lp64。
将:OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o $(MKLROOT)/interfaces/fftw3xf/libfftw3xf_intel.a
修改为:OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o /path/to/libfftw3xf_intel.a
说明:
如果是在安装intel compiler后手动编译了libfftw3xf_intel.a 则不需要修改,否则它会找不到这个fftw库。
我们需要手动编译这个库,并把“/path/to”设置为实际的路径。
5.3 编译vasp
现在可以开始编译vasp了,默认情况下,可以选择:
make all 2>&1 | tee make.log
vasp_std 默认版本
vasp_ncl 支持自旋轨道耦合的版本
vasp_gam 支持gamma的版本。
6.编译升级1:编译vasp + gpu
6.1 修改makefile.include
基本步骤与上一节相同,只不过在拷贝makefile.include的时候,选择cuda的版本,并且进行相应的设置即可,见下:
tar zxvf vasp.5.4.tar.gz
cd vasp.5.4
# 修改 makefile.include 文件
cp ./arch/makefile.include.linux_intel_cuda makefile.include
# 备注:该步骤为主要修改部分,请仔细修改。
vim makefile.include
出了上一节的修改内容外,额外修改如下内容:
修改:CUDA_ROOT := /usr/local/cuda/
为:CUDA_ROOT := /vol-th/software/cuda/cuda-7.5
说明:
如果cuda不是安装在默认的路径下,会找不到,所以手动设置一下。(请把红色部分设置为cuda的实际安装路径)
修改:
GENCODE_ARCH := -gencode=arch=compute_30,code=\"sm_30,compute_30\" -gencode=arch=compute_35,code=\"sm_35,compute_35\"
为:
GENCODE_ARCH := -gencode=arch=compute_20,code=\"sm_20,compute_20\"-gencode=arch=compute_30,code=\"sm_30,compute_30\"-gencode=arch=compute_35,code=\"sm_35,compute_35\"
说明:
针对自己的GPU型号,查看支持的gencode类型,不一定需要修改这个。
参考网址:
https://en.wikipedia.org/wiki/Nvidia_Tesla
搜索GPU型号对应的CUDA compute ability即可获得。
将:
MPI_INC =/opt/intel/impi_latest/include64
修改为:
MPI_INC =/usr/local/mpi-intel2013/include
说明:
修改mpi的include路径,将红色部分修改为实际的mpi的include路径。
6.2 编译vasp的GPU版本
现在可以开始编译vasp了,命令如下:
make gpu 2>&1 | tee make.log
这样可以在编译后生成2个可执行文件,分别是:
vasp_gpu 默认版本
vasp_gpu_ncl 支持自旋轨道耦合的版本
7.编译升级2:编译vasp + neb (VTSTcode)
可以参考:http://theory.cm.utexas.edu/vtsttools/,详细介绍如下;
希望编译支持neb的vasp需要:
7.1 从VTST官网 http://theory.cm.utexas.edu/vtsttools/download.html 下载 vtstcode
7.2 将vtstcode文件下的所有文件,全部复制到vasp.5.X/src文件夹下,覆盖。
tar zxvf vtstcode.tgz
cp vtstcode-*/* vasp.5.4/src
7.3 修改main.F文件
cd vasp.5.4/src
vim main.F
将:
CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &7.4 添加文件的编译规则
vim vasp.5.4/src/.objects
在“ hamil_rot.o \
chain.o \” 之间添加代码,
修改完成后形成:
hamil_rot.o \
bfgs.o dynmat.o instanton.o lbfgs.o sd.o cg.o dimer.o bbm.o \
fire.o lanczos.o neb.o qm.o opt.o \
chain.o \
7.5 编译vasp
至此,针对neb的修改完成,正常编译vasp即可。
make all 2>&1 | tee make.log
8. 使用方法(针对TH-1A系统的slurm作业调度系统举例)
8.1 准备输入文件
8.2 编写提交脚本sub.sh
#!/bin/bash
yhrun -N 2 -n 24 -p debug /path/to/vasp_std
-N 总节点数
-n 总核数
-p 使用分区名称
/path/to/vasp_std 请给出使用的vasp可执行文件的绝对路径及名称。
备注:
如果遇到到不到动态库的情况,请添加动态库所在路径到LD_LIBRARY_PATH变量即可,例如:
export LD_LIBRARY_PATH=/vol-th/intel_composer_xe_2013.0.079_lib:$LD_LIBRARY_PATH
8.3 提交任务
yhbatch -N2 -n24 -pdebug sub.sh
9. 并行参数介绍
9.1 NPAR / NCORE
NPAR parallelization over bands
NCORE determines how many cores work on one orbital.
NCORE = total number cores/NPAR.
可以依据实际的机器情况及计算问题设置,例如:
NPAR = 4, 6, 8
或者
NCORE = 12
以上给出的是推荐的,但实际值请根据实际测试经验确定,官方给出的建议是:
For optimal performance we recommend to set NCORE= 4 - approx SQRT( number of cores)
引用参考:
vasp的并行分为两个方面:一是对平面波系数的并行,一是对能带的并行。
对两者都支持的算法是RMM—DIIS迭代矩阵对角化(即IALGO=48);而共轭梯度band by band 法(IALGO=8)只支持对平面波系数的并行。
开启对能带并行的命令是NPAR。
NPAR的默认值是1,意思是只对平面波系数并行,所有的节点都计算同一个能带。vasp手册中建议这种情况适合于节点数较少的集群。
如果设置NPAR的值为总节点数,那么每个节点将会独自计算一个能带。vasp手册中指出,这种情况适合于通信带宽较小的集群,同时,将会增加内存需求。
如果NPAR的值位于1到总节点数之间,此时,计算一个能带所需的节点数为:总结点数/NPAR。
9.2 LPLANE
可以设置LPLANE=.TRUE.
这样取值,会减少在快速傅里叶变换时的通信带宽,加快计算速度。但仅建议在超算集群上开启。
9.编译补充 vasp5.3及以下版本的makefile介绍(暂略)
P.S 提供 vasp 的测试机会。
欢迎交流。