Featured image of post 广州超算编译安装Vasp.5.4.4

广州超算编译安装Vasp.5.4.4

|
Document-edit Created with Sketch.
|

这是一个vasp.5.4.4的编译教程(以广州超算为例)


准备好vasp.5.4.4安装包

自行下载,或者邮件给我留言 点击发送电子邮件至liaojinbo1999@163.com ,vasp为商业软件,请确保有授权!

好了,准备好压缩包vasp.5.4.4.tar.gz,解压,进入解压后的目录。

tar -zxvf vasp.5.4.4.tar.gz
cd vasp.5.4.4/

ls发现有以下文件和目录

$ ls
arch  bin  build  makefile  README  src

arch/:该目录通常包含特定于硬件架构的配置文件,例如针对不同操作系统和硬件架构的Makefile模板。你可以在这里选择或创建适合你系统的配置文件。
bin/:该目录通常为空,或者包含最终编译的VASP可执行文件。在编译完成后,VASP的可执行文件会放在这个目录下。
build/:此目录通常包含用于编译过程的临时文件。编译时会生成对象文件和中间文件,最终会被链接到 bin/ 目录中的可执行文件(std、gam、ncl)
makefile:这个文件是VASP的主Makefile,包含编译VASP所需的各种参数设置和规则。你需要根据你系统的环境编辑这个文件以适应你的编译器和库。
README:该文件通常包含VASP的安装说明、编译和运行的基本指导。在安装之前,建议阅读该文件。
src/:这个目录包含VASP的源代码。编译时,所有源代码文件将被编译成目标文件,然后链接成最终的VASP可执行文件。

配置环境

查看HPC已有的编译器

命令行输入module av

$ module av
--------------------------------------------------- /APP/u22/x86/modulepath/Compilers ---------------------------------------------------
gcc/9.5.0                               mpi/mpich/4.1.2-gcc-11.4.0-ch4                 mpi/mpich/4.1.2-icx-oneapi2024.2-ch4-dbg
intel/oneapi2023.2_impi                 mpi/mpich/4.1.2-gcc-11.4.0-ch4-dbg             mpi/mpich/4.3.2-icc-oneapi2023.2-ch4
intel/oneapi2023.2_noimpi               mpi/mpich/4.1.2-icc-oneapi2023.2-ch3-shared    mpi/openmpi/4.1.1-icc-oneapi2023.2-ch4
intel/oneapi2024.2_impi                 mpi/mpich/4.1.2-icc-oneapi2023.2-ch4           mpi/openmpi/4.1.6-icc-oneapi2023.2-ch4
intel/oneapi2024.2_noimpi               mpi/mpich/4.1.2-icc-oneapi2023.2-ch4-dbg       mpi/openmpi/5.0.0-gcc-9.5.0-ch4
mpi/mpich/3.4.3-gcc-9.5.0-ch4           mpi/mpich/4.1.2-icx-oneapi2023.2-ch4           mpi/openmpi/5.0.0-gcc-11.4.0-ch4
mpi/mpich/4.1.2-gcc-9.5.0-ch4           mpi/mpich/4.1.2-icx-oneapi2023.2-ch4-dbg       mpi/openmpi/5.0.0-icc-oneapi2023.2-ch4
mpi/mpich/4.1.2-gcc-9.5.0-ch4_openfoam  mpi/mpich/4.1.2-icx-oneapi2023.2-ch4_openfoam  mpi/openmpi/5.0.0-icx-oneapi2023.2-ch4
mpi/mpich/4.1.2-gcc-11.4.0-ch3          mpi/mpich/4.1.2-icx-oneapi2024.2-ch4

我需要使用Intel编译器和MPI编译环境,所以我选择加载这两个

module purge
module load intel/oneapi2023.2_impi
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
module list

为了确保不与其它模块冲突,所以使用module purge最开始先卸载所有模块,为了确认是否成功加载模块,使用了module list命令 检查已加载的模块。

进入arch目录下,选择所需的makefile文件

$cd arch/
$ ls
    makefile.include.linux_gnu  makefile.include.linux_intel  makefile.include.linux_intel_serial  makefile.include.linux_pgi

因为我使用intel的编译器,所以我将makefile.include.linux_intel复制到上一级目录,命名为makefile.include

$ cp makefile.include.linux_intel ../makefile.include

打开上一级目录中自己刚复制过来的makefile.include发现其内容如下:

# Precompiler options
CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
             -DMPI -DMPI_BLOCK=8000 \
             -Duse_collective \
             -DscaLAPACK \
             -DCACHE_SIZE=4000 \
             -Davoidalloc \
             -Duse_bse_te \
             -Dtbdyn \
             -Duse_shmem

CPP        = fpp -f_com=no -free -w0  $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)

FC         = mpiifort
FCL        = mpiifort -mkl=sequential -lstdc++

FREE       = -free -names lowercase

FFLAGS     = -assume byterecl -w
OFLAG      = -O2
OFLAG_IN   = $(OFLAG)
DEBUG      = -O0

MKL_PATH   = $(MKLROOT)/lib/intel64
BLAS       =
LAPACK     =
BLACS      = -lmkl_blacs_intelmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

OBJECTS    = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o

INCS       =-I$(MKLROOT)/include/fftw
................

这个文件是编译所需的环境,确保环境正常

确保编译环境已加载(也就是前面提到的)

module purge
module load intel/oneapi2023.2_impi
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
module list

不放心可以再次执行下,或者module list查看下

开始编译

回到vasp主目录下,开始编译
因为我需要std、gam、和ncl,所以我直接输入make all,如果没有问题那就会开始编译,等待即可(需要几十分钟)
编译完成进入./bin目录下,发现多了这三个执行文件,那么表示以及成功了。

 $ cd bin/;ls
vasp_gam  vasp_ncl  vasp_std

设置环境变量

两种方法

  1. vasp_gam vasp_ncl vasp_std所在路径添加到~/.bashrc(推荐使用)
vi ~/.bashrc
export PATH=/your path/vasp.5.4.4/bin/:$PATH
source ~/.bashrc
  1. 将其写入脚本
    后续会讲到

测试

编译完后测试下是否能正常运行,准备好测试文件
我这里准备了5个文件,分别为INCAR、POSCAR、POTCAR、KPOINTS、vasp-sbatch.sh

脚本编写

在测试前,可能很多人并不知道如何编写一个合适的任务提交脚本,这里我简单介绍下脚本的编写规则

查看官方手册

最简单的就是查看官方的手册,以广州超算来说,打开HPC1系统用户手册可以找到脚本的编写规则

目前 HPC1 系统部署的资源管理系统包括多种作业提交方式,包括批处理作业提交方式 yhbatch 和交互作业提交方式 yhrun。作业终止方式为 yhcancel 命令,需要获取作业的 jobid,可以通过 yhq 命令查看获得。

如果没有交互需求,请使用 yhbatch 提交任务。yhbatch 提交的作业终端关闭 时不会受到影响,登陆结点 down 机时也不会受到影响,强烈推荐使用 yhbatch 提 交任务。

yhbatch 运行的主要格式如下:
yhbatch [options] program
yhbatch 包括多个选项,用户最常使用的选项如下:


-n, --ntasks=ntasks
指定要运行的进程数。请求 yhrun 分配/加载 ntasks 个进程。省缺的情况是每 个 CPU 核运行一个进程,但是-c 参数将改变此省缺值。

-N, --nodes=minnodes[-maxnodes]
请求为此作业至少分配 minnodes 个结点。调度器可能决定在多于 minnodes 个结点上启动作业。可以通过指定 maxnodes 限制最多分配的结点数(如“– nodes=2-4”)。最少和最多结点数可以相同以便指定确切的结点数(如“– nodes=2-2”将请求两个并且仅仅两个结点)。如果没有指定-N,省缺的行为是分 配足够的结点以满足-n 选项的要求。
-p, --partition=partition
从分区 partition 请求资源。如未指定,则省缺为默认分区。

-t, --time=minutes
设置作业的运行时间限制为 minutes 分钟。省缺值为分区的时间限制值。当到 达时间限制时,作业的进程将被发送 SIGTERM 以及 SIGKILL 信号终止执行。完 整格式为–time=days-hours:minutes:seconds,建议包机时用户使用该选项。

-D, --chdir=path
加载的作业进程在执行前将工作目录改变到 path 。省缺情况下作业 yhrun 进 程的当前工作目录。

-l, --label
在标准输出/标准错误的每行之前添加任务号。通常,远程任务的标准输出和 标准错误通过行缓冲直接传递到 yhrun 的标准输出和标准错误。–label 选项将在 每行输出前面添加远程任务的 ID。

-J, --job-name=jobname
指定作业的名字。省缺值是可执行程序的名字 program 。

-W, --wait=seconds
指定在第一个任务退出后,到终止所有剩余任务之前的等待时间。0 表示无限 等待(60 秒后将发出一个警告)。省缺值可由系统配置文件中的参数设置。此选 项用于确保作业在一个或多个任务提前退出时能够及时终止。

-w, --nodelist=nodelist|filename
请求指定列表中的结点。分配给作业的将至少包含这些结点。nodelist 可以是 逗号分割的结点列表或范围表达式(如 cn[1-5,7,12])。如果包含“/”字符,则 nodelist 将会被当作是一个文件名,其中包含了所请求的结点列表。

具体不多赘述了,有需要的可以向我要官方文档[ 点击发送电子邮件 ]

编写脚本

以手册为例:

sub.sh 如下:

#!/bin/bash
VASP_BIN=/your path/vasp.5.4.4/bin/vasp_std
yhrun -n 28 -p TH_HPC1 $VASP_BIN

前面提到yhrun是交互提交作业,虽然可以提交任务,但是要保证窗口一直挂着,且不能断链,这显然是很不方便的,所以还需要yhbatch提交脚本。
将脚本命名为run.sh:

#!/bin/bash
module purge
module load intel/oneapi2023.2_impi
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
module list
export PATH=/your path/vasp.5.4.4/bin/:$PATH
yhbatch -n 28 -p TH_HPC1 -J example1 ./sub.sh
自己写sbatch任务脚本

虽然以上脚本可以满足要求了,但是我还是觉得很麻烦,为什么我需要写两个脚本,我直接写一个多好,所以这是另一个方法,使用的是sbatch
具体用法参照官方手册slurm官方手册
这是我自己的脚本:

#!/bin/bash
#SBATCH -J ljb         ## Job Name
#SBATCH -o out.%j            ## standard output
#SBATCH -e err.%j              ## standard error
#SBATCH -p mars               ## Partition
#SBATCH -N 1                   ## Number of nodes
#SBATCH --ntasks-per-node=64   ## Each node has n tasks
#SBATCH -t 07-23:57:25         ## time for your job: 2 d,23 h ,57 min and 23 s
module purge
module load intel/oneapi2023.2
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
export PATH=/your path/vasp.5.4.4/bin/vasp_ncl:$PATH
module list
ulimit -s unlimited
VASP_BIN=/your path/vasp.5.4.4/bin/vasp_std
yhrun $VASP_BIN

运行测试

准备好vasp所需文件:

ls
INCAR  KPOINTS  POSCAR  POTCAR  vasp-sbatch.sh
sbatch vasp-sbatch.sh
Submitted batch job 133974

squeue查看节点状态,显示R

 JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            133974      mars      ljb caep_lts  R       1:28      1 cnode5131

显示已提交成功。
检查OUTCAR或者out.133974(根据实际名字查看)文件是否正常运行

$ tail out.133974
 POSCAR found type information on POSCAR  Pb I  C  N  H
 POSCAR found :  5 types and      92 ions
 scaLAPACK will be used
 LDA part: xc-table for Pade appr. of Perdew
 POSCAR, INCAR and KPOINTS ok, starting setup
 FFT: planning ...
 WAVECAR not read
 entering main loop
       N       E                     dE             d eps       ncg     rms          rms(c)
DAV:   1     0.129655355373E+04    0.12966E+04   -0.13885E+05 17024   0.108E+03

顺利运行且无报错,完毕。


Licensed under CC BY-NC-SA 4.0 转载请留言告知
最后更新于 Apr 16, 2025 05:19 UTC
使用 Hugo 构建
主题 StackJimmy 设计
本博客已稳定运行