简介VASP 5.4.4 安装资源包面向材料科学、量子化学领域的计算研究者提供完整的 Fortran 源码及配套构建文件解决 Linux 环境下编译部署 VASP 的常见痛点。压缩包共 380 个文件大小仅 3.29MB以 243 个 f 源文件为主辅以 inc 包含文件、hpp/cuh/cu 等 CUDA 相关文件、c 文件以及 makefile 配置便于按模块理解并行计算与编译依赖。已有 2213 人学习下载适合具备一定编译基础、需要在集群或工作站上部署 VASP 的用户。包内清晰区分串行与 MPI 并行构建脚本并提供了 readme、license 和 makefile 系列可参照 INCAR、POSCAR、POTCAR、KPOINTS 等输入文件说明快速验证安装。相比直接下载预编译版本这份源码包有助于按硬件调整编译参数也方便查看底层实现可作为学习 VASP 并行编译与量化计算建项的参考资料。1. 还在用 vasp.5.4.4 安装包这个版本为什么至今没被淘汰接手一台没有文档的集群最常见的情况是服务器上躺着一个 vasp.5.4.4安装包.rar。做第一性原理计算的同事在旁边等着而你手里只有这个压缩包没有使用说明没有编译记录连依赖清单都欠奉。VASP 5.4.4 不是最新版本但它在很多课题组里仍然是主力版本——行为稳定、参数可预期网上流传的输入文件大多按这个版本书写新版本带来的“惊喜”反而成了迁移成本。这篇笔记就把这个 rar 包处理成一套可用的并行计算程序。我会按实际动手顺序来写拿到压缩包先做什么校验、编译前哪些依赖必须对齐、makefile.include 到底怎么改、哪几处最容易翻车以及装完之后如何用最小算例证明它能真正并行跑起来。适合刚接手计算服务器、或者第一次自己编译 VASP 的从业者也适合被新版编译折腾到想退回老版本的老手。2. 拿到 vasp.5.4.4 安装包先校验文件再规划目录最后才解压2.1 rar 包到手先做三件事看大小、算校验值、跑测试很多安装包是从网盘、U盘、邮件附件这类渠道流转的压缩包在传输中断、磁盘写入异常后依然能被 rar 工具打开但内部的源码文件可能已经损坏。你拿到手的第一件事不是解压而是先确认压缩包本身是完整的。ls -l vasp.5.4.4安装包.rar md5sum vasp.5.4.4安装包.rar unrar t vasp.5.4.4安装包.rar第一行看文件大小先确认不是 0 字节或明显半截的文件。第二行算 md5 校验值如果给你文件的人同步给过 md5能直接比对没给的话至少保证你在不同时间、不同路径下算两次结果一致。第三行是关键unrar t是 test 模式它会把压缩包里每个文件解压到内存再校验CRC比单纯看 md5 更能发现 rar 的哪一块数据坏了。这里要提醒一下unrar命令不一定默认存在。Debian/Ubuntu 系可以apt install unrarRHEL/CentOS 系有时候镜像源里不带 unrar可以装p7zip后用7z t做同样的测试。不要因为解压工具缺失就跳过校验这一步这一步能省掉后面两小时的排错时间。如果没有 md5 可对照还有一个土办法解压之后对源码目录做一次du -sh然后和第二份拷贝的目录对比。常见的 VASP 5.4.4 源码解压后大小是固定的两份一致说明大概率没有缺失文件。这个方法不精确但适合无从核对的场景。校验通过后才进入解压流程。2.2 路径规划放在哪里、用什么用户、目录要不要改名解压前先想清楚两件事目录放哪用什么身份操作。我的习惯是放在/opt下单独建一个以版本号命名的目录。这样服务器上将来如果装了 5.4.3、6.x彼此不干扰。# 以普通用户非 root登录后执行 mkdir -p /opt/vasp/5.4.4 cp /path/to/vasp.5.4.4安装包.rar /opt/vasp/5.4.4/ cd /opt/vasp/5.4.4 unrar x vasp.5.4.4安装包.rar # 如果压缩包内解出来的是一个带版本号的目录建议改成简洁名 # mv vasp.5.4.4安装包 vasp-5.4.4 # 修改属主让真正跑计算的用户拥有这个目录 chown -R 你的用户名:你的用户组 /opt/vaspunrar x里的x表示保留压缩包内的完整目录结构解出来通常是一个源码目录而不是把文件直接撒在当前目录。用unrar e会丢目录结构所有文件平铺在一起这个区别新手很容易踩。解压后马上做chown -R这是我在多台机器上的血泪经验。如果用 root 解压再编译源码目录里的子目录全是 root 属主普通用户一编译就报「Permission denied」反过来如果你用普通用户解压到/opt而/opt本身没有写权限解压也会失败。/opt下先建目录、再把目录属主交出去是比chmod 777更干净的做法。路径里还有一个细节压缩包文件名带着中文解出来的目录名也可能带中文。Makefile、作业调度脚本、环境变量对这些字符的兼容性参差不齐我一般解压出来第一件事就是把目录改成一个纯英文名比如vasp-5.4.4。这个改动不影响编译但能避免后面提交作业时一堆莫名其妙的路径问题。目录就绪后下一步是把编译依赖的底子打好。这里先给你一个提示如果环境里已经有别人编译好的老版本 VASP不要直接从那个二进制目录里拷库文件来凑除非你能说清楚每一份库是哪个编译器产出的。编译工具链不一致链接出来的二进制即使能跑也经常在运行时掉链子。3. 编译 vasp.5.4.4 之前先把编译器、MPI、数学库的版本对齐3.1 两套可复现的组合开源编译器路线与商业编译器路线VASP 5.4.4 是 Fortran 代码编译它需要四样东西Fortran 编译器、MPI 实现、BLAS/LAPACK 线性代数库、FFT 数学库。这四样的版本和编译选项决定了 VASP 二进制是稳定跑三天还是三小时崩一次。我在这台机器上先想清楚走哪条路线。依赖项开源路线推荐先试商业路线追求性能Fortran 编译器gfortran 次新版本商业 Fortran 编译器MPI 实现MPICH 这类经典实现与商业编译器配套的 MPIBLAS/LAPACKOpenBLAS 这类 BLAS 实现MKL 接口库FFT 数学库FFTW 这类 FFT 库MKL 中的 FFT 接口开源路线的最大优势是可复现任何一台新机器都能用包管理器装齐不需要额外申请许可。缺点是性能上限通常比商业路线低一点对第一性原理计算这种动辄跑几天的场景差距会被放大。商业路线性能好但商业编译器与 MPI 的组合常常需要特定版本配套装错一个版本编译时不会立刻报错运行时才崩溃。针对 VASP 5.4.4 这个版本比选哪条路线更重要的是「别用刚发布的全新编译器」。这个版本的代码写于多年前对编译器的语法宽容度要求较高。新版编译器默认开启更严格的接口检查一个格式写错的 WRITE 语句都会直接 error。我一般用的是系统自带软件源里最近一两个小版本而不是源码编译安装的最新版。编译器太新导致的报错排查成本远高于收益。代码方面开源路线在 Debian/Ubuntu 系下的安装命令apt update apt install -y gfortran mpich libopenblas-dev libfftw3-devRHEL/CentOS 系则是yum install -y gcc-gfortran mpich openblas-devel fftw-devel装完后先确认命令在不在再确认版本。命令在不在比版本是否最新更关键。which gfortran gfortran --version | head -1 which mpif90 mpif90 -v参数说明gfortran是开源路线的 Fortran 编译器mpif90是 MPI 提供的 Fortran 编译包装器。它会把 MPI 的头文件路径和库路径自动传给真实的编译器。为什么始终用mpif90而不是直接调gfortran因为 VASP 编译时需要 MPI 头文件和 MPI 库直接调 gfortran 会缺一堆-I和-L参数错误日志能长到让你怀疑人生。3.2 环境变量三个变量写对少走一半弯路编译 VASP 有两个关键的环境变量要提前设好。第一个是LD_LIBRARY_PATH它决定程序运行时到哪些路径找动态库。第二个是编译器相关的变量Makefile 里如果没有显式写死 FC会优先读环境变量。export FCmpif90 export F77mpif90 export LD_LIBRARY_PATH/usr/local/lib:/opt/vasp/5.4.4:$LD_LIBRARY_PATHFC 和 F77 告诉 Makefile 用哪个 Fortran 编译器mpif90 同时带上了 MPI 支持。有些机器上 F77 指向了裸的 gfortran导致编译时一半代码用了 MPI、一半没用链接阶段报一堆重复符号。LD_LIBRARY_PATH的问题往往出现在编译成功之后运行时找不到libmpi.so、libfftw3.so报错里带着cannot open shared object file。解决方式是把对应库的安装路径加进这个变量。但要注意这个变量不是设得越全越好。路径顺序有讲究靠前的目录会优先被找到。如果系统里有多个 MPI顺序写错就会让程序加载到与编译时不匹配的 MPI运行时出现不可名状的并行卡死。检查环境是否就绪我一般跑一个最小的 MPI 程序验证。不需要写 Fortran直接用 MPI 安装目录下的测试程序或者系统自带的mpirun试试mpirun -np 2 hostname-np 2表示启动 2 个并行进程hostname是一个极小的命令。如果它能在两个核上各自输出主机名说明 MPI 基础可用。这一步和 VASP 本身还没关系但能帮你确认 MPI 不是坏的。MPI 装好但mpirun不能启动多进程是很多机器上真实存在的情况尤其是集群上多机互信配置不全的时候。4. 编译 vasp.5.4.4 的关键动作makefile.include 配置与 make 日志解读4.1 从模板改造 makefile.include一份最小可用配置VASP 5.4.4 源码目录里没有 configure 脚本也不能一键 cmake。它依赖的是一份叫makefile.include的配置文件Makefile 在编译过程中会把它 include 进来。编译器、数学库、并行开关全在这份文件里配。cd /opt/vasp/5.4.4/ ls makefile*先看看目录下有哪些 makefile 相关文件。如果没有带makefile.include后缀的现成文件就去arch目录里找模板常见做法是把那份和你系统最接近的模板复制成makefile.include。模板文件名一般会和编译器、MPI 组合相关选那份最贴近你机器现状的。# 示例从 arch 目录拷一份模板再改 # cp arch/makefile.include.linux_openmpi makefile.include vim makefile.include接着打开这份文件改几个关键块。下面这份是我在 x86_64 Linux 开源编译器组合下经过多次验证的最小配置。变量名以你解压出来的实际文件为准重点看这几个段落。# 编译器与并行 FC mpif90 FPP fpp -f_comno -free -w0 OFLAG -O2 FFLAGS -O2 -marchnative -funroll-loops # BLAS/LAPACK BLAS -lopenblas LAPACK -lopenblas # FFT FFT -lfftw3 # MPI 头文件路径 MPI_INC $(shell mpif90 -show | sed s/.*-I\([^ ]*\).*/\1/)参数说明FC mpif90表示用 MPI 包装器编译。如果这里写成了 gfortranVASP 会被编译成不带并行功能的版本运行时即使加上mpirun也只有单核在算。FFLAGS里的-marchnative会让编译器针对当前 CPU 指令集生成代码速度最快。代价是这份二进制拿到另一台 CPU 更老的机器上会直接报非法指令。如果集群里不同节点 CPU 型号不一致把这个参数删掉。FFT -lfftw3链接 FFTW 库。如果走商业编译器路线这里通常会换成配套数学库的 FFT 接口BLAS和LAPACK指向的库也在这一层替换。MPI_INC这一行是动态探测 MPI 头文件路径。不同 MPI 实现的安装路径差异很大写死一个路径换个环境就废用mpif90 -show抓出来的路径更稳。改完配置直接编译make -j2 all 21 | tee build.log-j2是并行编译起 2 个任务。VASP 这种老式 Makefile 对高并行度支持不太好make -j8偶尔会因链接顺序产生随机失败我一般固定用-j2。编译完成后源码目录里会生成三个可执行文件vasp标准版本vasp_gam只支持 Gamma 点版本vasp_ncl非共线版本。make all会把三个都编出来。4.2 make 日志怎么看从报错位置反向定位问题编译日志要保留下来尤其当编译中断或报错时。日志不是看热闹的报错信息里藏着定位问题的全部线索。grep -Ei error|undefined reference|cannot find build.log这行命令过滤出真正的错误。VASP 编译时会有成百上千行输出大部分是正常的信息。真正需要关注的是两类undefined reference和cannot find -lxxx。前者几乎都是数学库链接顺序或库缺失问题后者是某个数学库根本没装或者路径没给对。编译中断后重新 make会遇到一个隐性问题Makefile 认为之前生成的目标文件还在会跳过编译直接进入链接但那些目标文件是在旧配置下生成的。改过makefile.include之后必须先把旧目标文件清掉make clean make -j2 all 21 | tee build.log.2如果不想 full clean也可以只删除和报错相关的.o文件再重编但新手不建议这么精细操作直接make clean最省心。另一个常见误操作是反复用make而不看已有日志结果每次都在同一处停下。先处理第一处报错比盯着最后一行输出更有效率。成功编译的终点标志不是没有输出而是三个可执行文件都生成ls -l vasp vasp_gam vasp_ncl file vaspfile vasp会告诉你它是 ELF 可执行文件、动态链接了哪些库也能看出是不是 64 位。这一眼能确认编译产物没有变成 32 位或格式损坏。到此编译部分结束。接下来你会遇到各种玄学问题下面五条是频率最高的。5. vasp.5.4.4 安装避坑5 条高频问题与解决顺序5.1 unrar 解压时报“Permission denied”或“Cannot create”现象解压命令执行到一半中断屏幕上连续出现无法创建文件/目录的提示。原因压缩包解压到/opt这类系统目录时当前用户没有该目录的写权限。另外一种少见原因是压缩包里带了符号链接且目标路径超出了当前目录范围rar 工具会拒绝创建。解决先确认当前用户对目标目录有写权限。常见做法是在/opt下先创建专门目录再用chown把目录属主交给当前用户我用的是这组命令sudo mkdir -p /opt/vasp sudo chown $(whoami):$(id -gn) /opt/vasp cd /opt/vasp unrar x /path/to/vasp.5.4.4安装包.rar如果符号链接问题用unrar x -o或者解压到纯本地路径下避开权限干涉。这一步的教训是不要为了省事直接sudo unrar用 root 解压出来的文件全部归 root后续普通用户编译会继续踩权限坑。5.2 make 报 undefined reference 链接错误数学库顺序不对现象编译能过链接阶段报undefined reference to ...而且报错符号大多和线性代数函数有关。原因链接器在处理静态库时有顺序要求。库 A 引用了库 B 的符号A 必须放在 B 前面。makefile.include 里BLAS、LAPACK、FFT三行顺序不对或者 LAPACK 指向了一个空壳库都会让符号解析失败。解决把被依赖的库往后放。我常用的顺序是BLAS在前LAPACK在后或者干脆让两者指向同一个 OpenBLAS 库因为它内部已包含 LAPACK 符号BLAS -lopenblas LAPACK -lopenblas如果改了之后还报同样的错检查libopenblas.so是否真的安装了ldconfig -p | grep openblas执行结果里必须能看到libopenblas.so和它的完整路径。看不到就说明包没装到位回去补依赖比继续调 Makefile 更有效。5.3 编译成功但运行时报找不到共享库现象./vasp一执行就报错提示cannot open shared object file: No such file or directory提到的库名是libmpi.so或libfftw3.so。原因库装在了/usr/local/lib或某个非默认路径动态链接器的搜索路径里没有它。编译时能找到库是因为 Makefile 里指定了-L路径但运行时那条路径不生效。解决把库所在目录追加到LD_LIBRARY_PATH然后重新执行export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH ldd vasp | grep not foundldd vasp会列出所有依赖的库这行命令专门检查哪些没找到。改完环境变量后再跑一次如果ldd不再输出not found问题解决。这一步我踩过一次坑把LD_LIBRARY_PATH写进.bashrc后发现同一个用户跑脚本提交作业时又报同样的错原因是作业调度器启动的任务不读.bashrc最后把导出语句加进了调度脚本里才稳定。5.4 vasp 编出来了vasp_ncl 却一直编译失败现象make all在最后阶段失败标准版vasp已经生成但vasp_ncl报错常见错误是某些变量未定义或模块接口不匹配。原因非共线版本的编译需要额外的预处理宏而 makefile.include 或源码里的条件编译开关没被激活。这不是数学库问题而是编译选项问题。解决检查 makefile.include 里有没有和 noncollinear、ncl 相关的宏定义或者直接到源码里找对应的预处理指令看它依赖哪个开关。我一般会对比标准版和 ncl 版在 Makefile 里的编译目标差异差异处通常就是缺失的宏。如果只是需要 ncl 版本的功能单独指定目标编译make vasp_ncl 21 | tee build_ncl.log单独编译能把标准版编译产生的噪音过滤掉日志里剩下的错误信息更集中。新手容易在这上面钻牛角尖其实大多数场景只用标准版vaspgamma 版和 ncl 版可以等有需要时再修。5.5 用 root 装的 VASP普通用户跑不了现象root 编译完vasp后测试正常换普通用户一跑就报错文件明明存在却提示没有执行权限或找不到。原因源码目录和可执行文件的属主是 root普通用户没有读和执行权限。作业调度系统提交任务时用的又是另一个用户就更明显。解决编译完成后做一次整体属主修正chown -R 普通用户:普通用户组 /opt/vasp chmod -R urwX,grX,orX /opt/vasp任何安装教程都不会教你永久用 root 跑计算。把目录挂给真正干活的用户后面几百个作业的日志、赝势文件、临时文件才不会在权限上翻车。6. 装完别急着交差用最小算例与并行加速比验证安装编译完成和安装可用之间还差一个验证。我一般会用最小的算例验证三件事程序能跑、电子步收敛、并行确实加速。POSCAR 用两个氢原子晶格常数设得大一点避免原子间相互作用H2 test 1.0 10.0 0.0 0.0 0.0 10.0 0.0 0.0 0.0 10.0 1 H 2 Direct 0.0 0.0 0.0 0.5 0.5 0.5INCAR 保持最小化SYSTEM vasp test ENCUT 400 ISMEAR 0 SIGMA 0.05KPOINTS 用一个点即可。POTCAR 从赝势目录里拷两个氢原子的然后分别串行和并行跑time ./vasp time mpirun -np 4 ./vasp对比两次的 wall time。如果 4 核比 1 核快了两倍以上说明并行链路打通了。如果 4 核和 1 核时间几乎一样怀疑两个问题一是编出来的 vasp 不是并行版检查 makefile.include 的 FC二是节点本身只有单核或者共享资源分配被限制。再看 OUTCAR 尾部的离子步迭代力在每个离子步之间平滑下降最终到达收敛阈值说明数值计算正常。如果第一步就 NaN回头检查 FFT 库和 BLAS 库是否匹配。我最早装 5.4.4 时就在这里跳过验证环节直接拿真实体系跑结果跑了三天力都不收敛。排查了整整两天最后发现编译时 FC 写成了裸 gfortran所谓并行版一直在单核跑而且某些数学库接口不匹配导致数值异常。自那以后不管机器多熟我都先跑最小算例再交任务。这个习惯帮我挡下了不少从别人手里接过来的“坏安装”。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?