VASP 6.1.0版本 CPU 和GPU 编译

0. 概述

    VASP (Vienna Ab-initio Simulation Package),是维也纳大学Hafner小组开发的进行电子结构计算和量子力学-分子动力学模拟软件包,是目前材料模拟和计算物质科学研究中最流行的商用软件之一。
    此教程主要介绍了在Centos 7.4系统中通过源码对VASP 6.1.0的CPU及GPU版本进行编译。

1. 安装环境需求

1、 Intel编译器
2、 Centos 7.x
3、 CUDA 11.2(用于编译GPU版本)

2. 编译环境设置

Intel编译器中包含许多组件,VASP的编译过程主要使用Intel编译器中自带的BLAS、FFTW、MPI等组件。

2.1 安装Intel parallel stdio 2018

获取Intel编译器压缩包

tar -xvf parallel_studio_xe_2018_update4_cluster_edition.tgz  ##解压intel压缩包
cd parallel_studio_xe_2018_update4_cluster_edition
chmod +x install.sh
./install.sh ##图形界面安装可以用./install_GUI.sh

2.2 配置intel编译器环境(按实际路径设置)

source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/bin/compilervars.sh intel64 ##配置编译器,按实际安装路径
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/mpi/intel64/bin/mpivars.sh intel64 ##配置mpi环境

3. VASP6.1编译

3.1 CPU版编译

cd /home/app/
tar -zxvf vasp.6.1.0.tar.gz
cd vasp.6.1.0
cp ./arch/makefile.include.linux_intel ./makefile.include ##arch里面有多个编译配置,使用intel编译器用makefile.include.linux_intel

3.1.1 修改makefile.include

针对不同机器可能需要对makefile.include作出修改,可以参考vasp.6.1.0目录下的readme.md文档
vi ./makefile.include
OFLAG项添加-xhost,此选项可以使VASP自动适配当前机器CPU所支持的最高指令集。在主节点编译时,如果主节点CPU与计算节点CPU型号不同,后续提交任务至计算节点时可能会出错,建议ssh至计算节点进行编译。
OFLAG      = -O2 -xhost

3.1.2 编译

make std ncl gam 编译标准版,非共线版,Gamma only版
编译完成后在vasp.6.1.0/bin目录下会产生vasp_std,vasp_gam,vasp_ncl三个可执行文件

3.2 GPU版编译

ssh进入有显卡并安装了CUDA驱动的节点

3.2.1 配置CUDA及INTEL编译器环境(按实际路径设置)

export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/bin/compilervars.sh intel64 
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/mpi/intel64/bin/mpivars.sh intel64 

3.2.2 修改makefile.include

cd /home/app/vasp.6.1.0
vi ./makefile.include

makefile.include主要修改的部分为GENCODE_ARCH,这部分初始文本可能未包括本机GPU及安装CUDA所支持的gencode。
查找本机GPU所支持的gencode类型

GENCODE_ARCH     :=-gencode=arch=compute_50,code=\"sm_50,compute_50\"
                   -gencode=arch=compute_30,code=\"sm_30,compute_30\" \
                   -gencode=arch=compute_35,code=\"sm_35,compute_35\" \
                   -gencode=arch=compute_60,code=\"sm_60,compute_60\" \
                   -gencode=arch=compute_70,code=\"sm_70,compute_70\" \
                   -gencode=arch=compute_72,code=\"sm_72,compute_72\"

make gpu gpu_ncl 编译gpu,gpu_ncl
编译完成后在vasp.6.1.0/bin目录下会产生vasp_gpu,vasp_gpu_ncl可执行文件

4. VASP任务提交Slurm队列

4.1 CPU任务提交脚本范例

#!/bin/bash
#SBATCH -N 1
#SBATCH -p WHEEL
#SBATCH -n 10
#SBATCH -o output
#SBATCH --nodelist=compute-0-0
cd $SLURM_SUBMIT_DIR
ulimit -s unlimited
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/bin/compilervars.sh intel64
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/mpi/intel64/bin/mpivars.sh intel64
mpirun -np 10 /home/app/vasp.6.1.0/bin/vasp_std

4.2 GPU任务提交脚本范例

#!/bin/bash
#SBATCH -N 1
#SBATCH -p WHEEL
#SBATCH --cpus-per-task=8
#SBATCH --gpus-per-task=1
#SBATCH -o output
#SBATCH --nodelist=compute-0-0
cd $SLURM_SUBMIT_DIR
ulimit -s unlimited
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/bin/compilervars.sh intel64
source /home/lfpara/apps/intel/18/compilers_and_libraries_2018.5.274/linux/mpi/intel64/bin/mpivars.sh intel64
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
mpirun -np 1 /home/app/vasp.6.1.0/bin/vasp_gpu

提交VASP 6.1的GPU任务mpirun -np后面的数量不是调用CPU数量,而是GPU数量