经验怪谈

技术文章

VASP 6.4.2 编译与作业提交

Intel / AMD 两套 makefile。并行编译要改 dependencies,OBJECTS_O1 需带上 symlib.o;作业里 ulimit -s unlimited。

2026-09-11 · 科研软件 · Slurm · HPC / 集群

VASP 是商业软件。现场笔记里源码、VASPKIT、赝势都是内网 wget;公开站不放那些地址,改成从 VASP Portal / VASPKIT 授权渠道拿到同样文件名的包,后面 tar、改 makefile、作业脚本不变。路径按 /opt/software/vasp.6.4.2 示例。

公共步骤

# wget <授权渠道拿到的 vasp.6.4.2.tgz>
tar zxf vasp.6.4.2.tgz
cd vasp.6.4.2
sudo yum install -y gcc-c++ rsync make gcc-gfortran

默认 src/makefiledependencies: sources 不利于并行 make,改成同时编 libs:

sed -i 's|dependencies: sources|dependencies: sources libs|' src/makefile

makefile.includeOBJECTS_O1 需要带上 symlib.o

OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o symlib.o

编挂了先 make veryclean 再来。

Intel

依赖 Intel MPI 与 MKL。模板:

cp arch/makefile.include.intel makefile.include
vim makefile.include

${MKLROOT} 改成实际位置。现场一次是 OpenHPC 的 oneAPI,例如 /opt/ohpc/pub/intel/oneapi/2022/mkl/latest;没有这套就用你机器上的 $MKLROOT。CPU 指令集按机器改:

VASP_TARGET_CPU ?= -xCORE-AVX2
make DEPS=1 -j $(($(nproc) - 1)) all
export PATH=/opt/software/vasp.6.4.2/bin:$PATH

AMD

依赖 AOCC / AOCL 与配套 MPI。模板:

cp arch/makefile.include.aocc_ompi_aocl makefile.include
vim makefile.include

同样补 symlib.o。现场一次 AOCL 前缀如下,改成你机器上的实际路径

FFLAGS += $(VASP_TARGET_CPU) -fPIC
AMDBLIS_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc
AMDLIBFLAME_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc
AMDSCALAPACK_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc
AMDFFTW_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc

然后同样 make DEPS=1 -j ... all

Slurm

VASP 对栈空间敏感,脚本里写 ulimit -s unlimited-n / --ntasks 要和 mpirun -np 一致。

常用参数:-p 分区,-N 节点,-n MPI rank,-w 指定节点,-J 作业名。

Intel 示例:

#!/bin/bash
#SBATCH -J vasp
#SBATCH -p debug
#SBATCH --nodes=1
#SBATCH --ntasks=32
#SBATCH -o out_%j.log
#SBATCH -e error_%j.log

if [ -z "$ONEAPI_ROOT" ]; then
  source /opt/ohpc/pub/intel/oneapi/2022/setvars.sh   # 没有 OpenHPC 时改成你的 setvars.sh
fi
export PATH=/opt/software/vasp.6.4.2/bin:$PATH
ulimit -s unlimited
export OMP_NUM_THREADS=1
mpirun -np 32 vasp_std

AMD 示例(source 改成本机 AOCC / OpenMPI,不要和 Intel setvars.sh 混用):

#!/bin/bash
#SBATCH -J vasp
#SBATCH -p debug
#SBATCH --nodes=1
#SBATCH --ntasks=32
#SBATCH -o out_%j.log
#SBATCH -e error_%j.log

source /opt/AMD/aocc-compiler-4.1.0/setenv_AOCC.sh
source /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/amd-libs.cfg
export PATH=/opt/openmpi-4.1.6-aocc/bin:$PATH
export LD_LIBRARY_PATH=/opt/openmpi-4.1.6-aocc/lib:$LD_LIBRARY_PATH
export PATH=/opt/software/vasp.6.4.2/bin:$PATH
ulimit -s unlimited
export OMP_NUM_THREADS=1
mpirun -np 32 vasp_std

VASPKIT

现场笔记里是内网包 vaspkit.1.5.1.linux.x64.tar.gz。公开站改成从官网获取同名发行包,后面解压和 setup.sh 不变:

tar -zxvf vaspkit.1.5.1.linux.x64.tar.gz
cd vaspkit.1.5.1
bash setup.sh
echo 'export PATH=/opt/software/vaspkit.1.5.1/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
vaspkit

能进交互菜单即安装成功。

赝势同样只使用授权副本。现场笔记里这一步也是内网包;拿到后解压,把 ~/.vaspkit 指到你自己机器上的 PAW 目录。版本目录以你解压出来的为准:

VASPKIT_UTILITIES_PATH /opt/software/vaspkit.1.5.1/pseudopotential
LDA_PATH = /opt/software/vaspkit.1.5.1/pseudopotential/PAW_LDA
PBE_PATH = /opt/software/vaspkit.1.5.1/pseudopotential/PAW_PBE
GGA_PATH = /opt/software/vaspkit.1.5.1/pseudopotential/PAW_PW91