计算化学公社

 找回密码 Forget password
 注册 Register
Views: 58004|回复 Reply: 21
打印 Print 上一主题 Last thread 下一主题 Next thread

[VASP] 正确使用超算中心,5分钟搞定vasp5.4.4编译

  [复制链接 Copy URL]

119

帖子

2

威望

2075

eV
积分
2234

Level 5 (御坂)

今天就来讲讲VASP的编译
首先直接上视频https://www.bilibili.com/video/av33956717/
欢迎加入理论计算化学研习社(QQ群:905699144),线上课程用到的资料都会在群里共享。

曾经,第一性原理编译是个世界性难题,无数刚入计算科学的朋友都倒在了编译程序的路上。
好在随着计算机系统管理的发展和程序的发展,编译VASP变得越来越简单。直到vasp5.4版本以后,编译vasp已经基本是傻瓜式的了,只要把intelmkl 和mpi库加载的路径改一下,很快就能编译好。所以,我讲编译vasp也变得简单的多,希望初学者不要倒在编译程序的门口。

网路充斥着非常多的vasp编译教程,由于老版本和新版差别比较大,使用不同的库和参数编译出来有可能性能差异也比较大。我这里建议的时针对2018年10月最新的vasp5.4.4,和最新intel2018的编译方法。也请之后学习此教程的朋友们注意新最版的vasp可能和我现在讲的方法不太一样。

问:编译VASP倒是在干什么?
答:把vasp.at上的vasp代码变成可执行文件。

问:vasp编译用什么版本?
答:一律用5.4.4

问:在每个机器上的编译方法一样吗?
答:取决于系统环境。如果您用的天河2号,或者中科院超算云,或者并行科技的机时,那么恭喜,您的VASP安装过程将会非常简单,makefile.include不用做任何修改就能编译出性能优秀的VASP原版执行文件,整个操作的过程只要大约5分钟。因为我用的就是超算云和并行科技的机时,所以今天我就演示在中科院超算云上的安装过程。

问:如果想要给VASP添加其他功能,是否要重新编译?
答:是的,但是如果一开始就把自己需要的功能就加进去,就可以一劳永逸了,这里我们编译的时候把constr_cell_relax.F,vaspsol,ssnbo和VTST都加进去,暂时我们用到的就这三个功能。


编译原版VASP5.4.4步骤:3步走
(1)登陆https://www.vasp.at/
下载正版VASP5.4.4和patch.5.4.4.16052018文件。Patch文件修补现有bug的文件,最好在编译之前运行。

(2)把vasp.5.4.4.tar.gz和patch.5.4.4.16052018这两个文件上传到~/apps/文件夹下。
(3)登陆服务器
cd~/apps
tar –zxvfvasp.5.4.4.tar.gz
gunzippatch.5.4.4.16052018.gz
cp  patch.5.4.4.16052018 ./vasp.5.4.4
cd./vasp.5.4.4
patch-p0 < patch.5.4.4.16052018
cparch/makefile.include.linux_intel ./makefile.include
moduleava  #(查看intel mkl和mpi库,使用超算中心上最新版本的intel mkl和mpi库)
moduleload intel/18.0.2-fast
moduleload mpi/intel/18.0.2-fast
echo$MKLROOT #(查看intelmkl库)
makeall
冲杯咖啡,稍等一刻钟,搞定

ls./bin #如果显示vasp_gam  vasp_ncl  vasp_std则编译成功

VASP原版几点注意事项:
(1)这里我们没有调用MPI和fftw库,是因为我们都是用的intel自带的MPI和fftw库。
(2)intel版本必须在2015(含)以上,否则会出现奇怪的错误,版本越高越好。
(3)如果使用intel2018的库可以把OFLAG设置成O3 同时针对机器CPU和vasp代码优化,再添加浮点稳定参数可使vasp效率进一步提升至少10%。这里为了稳定和操作简单化,我们就不调整这个参数了。这个内容会在线下课程里
(4) makefile.include里的参数我就不一一介绍了, 直接用默认的就好。
(5)我们编译使用的是intel动态库,在提交的使用同样需要加载一样的动态库,操作十分简单:moduleload intel/18.0.2-fast,module load mpi/intel/18.0.2-fast
(6)如果不使用动态库,需要自己手动在makefile.include里设置$MKLROOT和intel mpi的路径,
比如:MKLROOT = /public1/soft/intel/2015/composer_xe_2015.6.233/mkl

同时在提交任务的时候需要加载同样的库路径,这样就稍微有点麻烦。直接用动态库编译最好。

测试:

就用我们第四节课使用的例子来测试我们刚编译好的VASP。
slurm提交脚本:

#!/bin/bash
#SBATCH -N 1
#SBATCH -n 20
#SBATCH -p pg2_64_pool
#SBATCH -J VASP
#SBATCH -t 12:00:00

module load mpi/intel/18.0.2

cd $SLURM_SUBMIT_DIR

srun -n 20/public1/home/pg2738/apps/vasp.5.4.4/bin/vasp_std > LOG

测试:

另外我们还要准备赝势库,这个我们在第四节课已经详细讲过了。


准备好INCAR,POTCAR,KPOINTS,POSCAR就可以运行了。

以后有机会我们再讲怎么编译
VTST,
SSNBO,
VASPsol,
OPTCELL,

Wannier90。

评分 Rate

参与人数
Participants 3
eV +14 收起 理由
Reason
李朋 + 4 GJ!
Lanthanide + 5
obaica + 5

查看全部评分 View all ratings

103

帖子

5

威望

1000

eV
积分
1203

Level 4 (黑子)

2#
发表于 Post on 2018-10-16 14:35:15 | 只看该作者 Only view this author
可否告知一下浮点稳定参数?谢谢

1060

帖子

0

威望

3254

eV
积分
4314

Level 6 (一方通行)

3#
发表于 Post on 2018-10-16 15:21:03 | 只看该作者 Only view this author
挺好的,谢谢。
但是编译步骤里有很明显格式错误,很多空格都漏掉了……

cd  ~/apps
tar –zxvfvasp.5.4.4.tar.gz
gunzip patch.5.4.4.16052018.gz
cp  patch.5.4.4.16052018 ./vasp.5.4.4
cd ./vasp.5.4.4
patch -p0 < patch.5.4.4.16052018
cp arch/makefile.include.linux_intel ./makefile.include
module ava  #(查看intel mkl和mpi库,使用超算中心上最新版本的intel mkl和mpi库)
module load intel/18.0.2-fast
module load mpi/intel/18.0.2-fast
echo $MKLROOT #(查看intelmkl库)
make all

103

帖子

5

威望

1000

eV
积分
1203

Level 4 (黑子)

4#
发表于 Post on 2018-10-16 15:30:43 | 只看该作者 Only view this author
乐平 发表于 2018-10-16 15:21
挺好的,谢谢。
但是编译步骤里有很明显格式错误,很多空格都漏掉了……

要这么说的话还得先unload原来的编译器和库,否则会报错

689

帖子

2

威望

4101

eV
积分
4830

Level 6 (一方通行)

5#
发表于 Post on 2018-10-16 16:40:34 | 只看该作者 Only view this author
非常不错的教程,期待后续的安装教程

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

6#
发表于 Post on 2018-10-16 20:26:35 | 只看该作者 Only view this author
放心。 这玩意没有什么指导意义。

因为,一般的机器上,没有人帮你把需要的东西配置为可用的模块。
没有做此配置,moduleava当然无法使用了。

其实最简单的,应该采用GNU那一套,基本上,yum install XXX
然后直接编译,不会报错的。
vasp wiki写的很清楚的。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

21

帖子

0

威望

252

eV
积分
273

Level 3 能力者

7#
发表于 Post on 2019-1-20 02:48:20 | 只看该作者 Only view this author
谁来说说如果编译VTST?
谢谢!

13

帖子

0

威望

67

eV
积分
80

Level 2 能力者

8#
发表于 Post on 2019-2-27 15:11:39 | 只看该作者 Only view this author
tcclab 发表于 2019-1-20 02:48
谁来说说如果编译VTST?
谢谢!

我也想知道,不知道会不会出视频

4

帖子

0

威望

71

eV
积分
75

Level 2 能力者

9#
发表于 Post on 2019-9-5 20:43:45 | 只看该作者 Only view this author
老师,在您帖子中,让我们编译的时候把constr_cell_relax.F,vaspsol,ssnbo和VTST都加进去,但是在后面的步骤中没有看到,是不是这些都包含在patch.5.4.4.16052018中了?

119

帖子

2

威望

2075

eV
积分
2234

Level 5 (御坂)

10#
 楼主 Author| 发表于 Post on 2019-9-9 12:49:51 | 只看该作者 Only view this author
infe2001 发表于 2019-9-5 20:43
老师,在您帖子中,让我们编译的时候把constr_cell_relax.F,vaspsol,ssnbo和VTST都加进去,但是在后面的 ...

不是,patch.5.4.4.16052018是修正bug的。

213

帖子

1

威望

2230

eV
积分
2463

Level 5 (御坂)

11#
发表于 Post on 2019-9-9 13:40:24 | 只看该作者 Only view this author
abin 发表于 2018-10-16 20:26
放心。 这玩意没有什么指导意义。

因为,一般的机器上,没有人帮你把需要的东西配置为可用的模块。

自己动手,丰衣足食!厉害

4

帖子

0

威望

71

eV
积分
75

Level 2 能力者

12#
发表于 Post on 2019-9-16 20:36:51 | 只看该作者 Only view this author
啦啦黑还黑 发表于 2019-9-9 12:49
不是,patch.5.4.4.16052018是修正bug的。

谢谢!

1

帖子

0

威望

19

eV
积分
20

Level 1 能力者

13#
发表于 Post on 2020-3-12 17:52:27 | 只看该作者 Only view this author
啊,vtst那个到底怎么用起来啊

1

帖子

0

威望

21

eV
积分
22

Level 1 能力者

14#
发表于 Post on 2020-9-28 19:44:15 | 只看该作者 Only view this author
各位老师,请问在中科院“元”超算平台上编译出现这样的错误,如何解决呢?
mkdir build/std ; \
        cp src/makefile src/.objects makefile.include build/std ; \
        make -C build/std VERSION=std all
mkdir: cannot create directory `build/std': File exists
make[1]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std'
rsync -ru ../../src/lib .
cp makefile.include lib
make -C lib -j1
make[2]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
make libdmy.a
make[3]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
make[3]: `libdmy.a' is up to date.
make[3]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
make[2]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
rsync -ru ../../src/parser .
cp makefile.include parser
make -C parser -j1
make[2]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
make libparser.a
make[3]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
make[3]: `libparser.a' is up to date.
make[3]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
make[2]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
rsync -u ../../src/*.F ../../src/*.inc .
rm -f vasp ; make vasp ; cp vasp ../../bin/vasp_std
make[2]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std'
mpiifort -free -names lowercase -assume byterecl -w -O2 -I/soft/compiler/intel/composer_xe_2013_sp1.0.080/mkl/include/fftw -c mpi.f90
mpi.F(429): error #6404: This name does not have a type, and must have an explicit type.   [MPI_COMM_TYPE_SHARED]
      CALL MPI_Comm_split_type(COMM%MPI_COMM,MPI_COMM_TYPE_SHARED,0,MPI_INFO_NULL,COMM_intra%MPI_COMM,ierror)
---------------------------------------------^
mpi.F(570): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPIMY]
      USE mpimy
----------^
mpi.F(526): error #6457: This derived type name has not been declared.   [COMMUNIC]
      TYPE(communic) COMM
-----------^
mpi.F(534): error #6404: This name does not have a type, and must have an explicit type.   [MPI_SUCCESS]
      IF ( ierror /= MPI_success ) &
---------------------^
mpi.F(550): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPIMY]
      USE mpimy
----------^
mpi.F(559): error #6404: This name does not have a type, and must have an explicit type.   [MPI_COMM_WORLD]
      call MPI_abort(MPI_comm_world , 1, ierror )
---------------------^
mpi.F(568): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPIMY]
      USE mpimy
----------^
mpi.F(577): error #6404: This name does not have a type, and must have an explicit type.   [MPI_COMM_WORLD]
      call MPI_abort(MPI_comm_world , 1, ierror )
---------------------^
mpi.F(596): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPIMY]
      USE mpimy
----------^
mpi.F(600): error #6457: This derived type name has not been declared.   [COMMUNIC]
      TYPE(communic) COMM
-----------^
mpi.F(606): error #6404: This name does not have a type, and must have an explicit type.   [MPI_INTEGER]
      call MPI_send( ivec(1), n, MPI_integer, node-1, 200, &
---------------------------------^
mpi.F(607): error #6404: This name does not have a type, and must have an explicit type.   [COMM]
     &               COMM%MPI_COMM, ierror )
---------------------^
mpi.F(607): error #6460: This is not a field name that is defined in the encompassing structure.   [MPI_COMM]
     &               COMM%MPI_COMM, ierror )
--------------------------^
mpi.F(608): error #6404: This name does not have a type, and must have an explicit type.   [MPI_SUCCESS]
      IF ( ierror /= MPI_success ) &
---------------------^
mpi.F(604): error #6279: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [MPI_STATUS_SIZE]
      INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(604): error #6404: This name does not have a type, and must have an explicit type.   [MPI_STATUS_SIZE]
      INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(622): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPIMY]
      USE mpimy
----------^
mpi.F(626): error #6457: This derived type name has not been declared.   [COMMUNIC]
      TYPE(communic) COMM
-----------^
mpi.F(631): error #6404: This name does not have a type, and must have an explicit type.   [MPI_INTEGER]
      call MPI_recv( ivec(1), n, MPI_integer , node-1, 200, &
---------------------------------^
mpi.F(632): error #6404: This name does not have a type, and must have an explicit type.   [COMM]
     &               COMM%MPI_COMM, status, ierror )
---------------------^
mpi.F(632): error #6460: This is not a field name that is defined in the encompassing structure.   [MPI_COMM]
     &               COMM%MPI_COMM, status, ierror )
--------------------------^
mpi.F(633): error #6404: This name does not have a type, and must have an explicit type.   [MPI_SUCCESS]
      IF ( ierror /= MPI_success ) &
---------------------^
mpi.F(629): error #6279: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [MPI_STATUS_SIZE]
      INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(629): error #6404: This name does not have a type, and must have an explicit type.   [MPI_STATUS_SIZE]
      INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(647): error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MPIMY]
      USE mpimy
----------^
mpi.F(651): error #6457: This derived type name has not been declared.   [COMMUNIC]
      TYPE(communic) COMM
-----------^
mpi.F(653): error #6683: A kind type parameter must be a compile-time constant.   [Q]
      COMPLEX(q) :: zvec(n)
--------------^
mpi.F(657): error #6404: This name does not have a type, and must have an explicit type.   [MPI_DOUBLE_COMPLEX]
      call MPI_send( zvec(1), n, MPI_double_complex, node-1, 200, &
---------------------------------^
mpi.F(658): error #6404: This name does not have a type, and must have an explicit type.   [COMM]
     &               COMM%MPI_COMM, ierror )
---------------------^
mpi.F(658): error #6460: This is not a field name that is defined in the encompassing structure.   [MPI_COMM]
     &               COMM%MPI_COMM, ierror )
--------------------------^
mpi.f90(1853): catastrophic error: Too many errors, exiting
compilation aborted for mpi.f90 (code 1)
make[2]: *** [mpi.o] Error 1
make[2]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std'
cp: cannot stat `vasp': No such file or directory
make[1]: *** [all] Error 1
make[1]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std'
make: *** [std] Error 2
[lihong9@login7 vasp.5.4.4]$

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

15#
发表于 Post on 2020-9-28 23:10:08 | 只看该作者 Only view this author
咸鱼游啊游 发表于 2020-9-28 19:44
各位老师,请问在中科院“元”超算平台上编译出现这样的错误,如何解决呢?
mkdir build/std ; \
        ...

编译器设定问题。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 06:47 , Processed in 0.223282 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list