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数量。