计算化学公社

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

[Quantum ESPRESSO] QE个从编译到应用(不定期更新)

  [复制链接 Copy URL]

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 万里云 于 2015-6-24 21:20 编辑

如今第一性原理计算领域基本VASP占了半壁江山。相比之下,Quantum Espresso(以下简称QE)的使用者就很少,相应的资料也难找,并且年代久远。现在已发布QE 5.1.2版,而百度搜到的教程还停留在4.x版。这些教程使用从软件源安装的编译器、MPI和数学库编译QE,难以保证能成功编译并通过测试。我从12年开始学习QE,从编译编译器、MPI、数学库再到编译QE,再到完成实际计算任务,基本上能折腾的都折腾过。最近有感于QE资料匮乏,为了让刚接触QE的人路尽快上手,也为了让大家批评指正,在此贴分享自己这几年间积攒的经验。此贴不是教程,而仅是一个使用者经验总结,因此肯定有纰漏之处。如果有疑问,最可靠的办法是看帮助文档和去官方邮件列表求助。

此贴将囊括以下内容,不定期更新:
(一)QE源代码下载,编译及测试;
(二)PW、PP模块介绍;
(三)常见算例;

常见算例中将包括:
(一)结构优化;
(二)自洽计算;
(三)能带计算;
(四)后期处理(分波态密度、差分电荷密度、电荷转移、功函数等);
(五)自旋极化;

受限于专业知识与研究领域,算例中将不包括:
(一)声子计算;
(二)分子动力学;
(三)NEB方法;
(四)非共线磁化与自旋轨道耦合;
(五)DFT+U与杂化泛函;

二楼开始正文。

评分 Rate

参与人数
Participants 18
威望 +2 eV +96 收起 理由
Reason
tjuhcy + 4 谢谢分享
Clifford + 3 谢谢分享
山里面的和尚 + 3 赞!
ChemG + 5 感谢分享intel编译方法
Yan_njit + 4 好物!
麦其芃芃 + 3 谢谢
nmrpostdoc + 3 谢谢分享
绽放星辰 + 3 谢谢
西乡新丰客 + 5
obaica + 5
winterzen + 5 赞!
helpme + 15 感谢推广QE&PWSCF
lwk205 + 4 赞!
ccyccxcl + 5 好物!
jiewei + 2 + 15
greatzdk + 4
卡开发发 + 5 赞!
jiangning198511 + 5 赞!

查看全部评分 View all ratings

190

帖子

0

威望

6100

eV
积分
6290

Level 6 (一方通行)

2#
发表于 Post on 2015-6-24 20:15:11 | 只看该作者 Only view this author
支持,以后后跟着您的帖子学习QE了。
https://www.x-mol.com/groups/weijie_chi

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2015-6-24 21:17:25 | 只看该作者 Only view this author
本帖最后由 万里云 于 2015-6-25 20:16 编辑

一、QE源码下载、编译及测试

1.1 源码下载
从5.0版开始,QE官方不再将各模块整合在一起发布,而是只在源码包中包含最基本的PW、CP和PP模块。其余的模块,比如做赝势的atomic,算声子的PHonon,算过渡态的neb等需要单独下载。源码包下载地址为http://qe-forge.org/gf/project/q-e/frs/?action=FrsReleaseBrowse&frs_package_id=18,如无特殊计算需求,可以只下载espresso-x.x.x.tar.gz。最新的稳定版为5.1.2,以下我们就以此版本为例,演示如何编译QE。


1.2 编译
个人认为,计算环境可分为两类:单一服务器和集群。在用户环境设置方面,单一服务器一般是自己私有的,可以为每个使用者建一个账户,可以放心大胆地修改环境变量;而集群一般是公有的,多个使用者使用同一个账户,修改环境变量必须要慎重,没有单一服务器那么自由。在任务调度方面,单一服务器一般不安装调度系统,而是直接使用mpirun提交;而集群有复杂的任务调度系统。在编译环境方面,单一服务器需要自己装编译器和MPI,而集群则预装多种编译器和对应的MPI。因此,这两种计算环境下编译QE的设置不同。


单一服务器一般会随系统附带GNU编译器,但是并不好用。我曾经用基于GNU的MPI编译过QE,编译勉强能过,测试时一堆segment fault。为了能顺利编译并通过测试,以及获得比较高的执行效率,推荐使用Intel编译器+MKL。集群则比较方便,有多种编译器和MPI可供使用。Openmpi  C / C++ / Fortran的mpi程序为 mpicc / mpic++ / mpif90,Intel MPI对应的是mpiicc / mpiicpc / mpiifort。除了GNU和Intel编译器之外,还有PGI,Pathscale等编译器,不过比较少见,一般碰不到。


1.2.1 通用准备工作
无论是在单一服务器上编译,还是在集群上编译,这一步是通用的。首先将espresso-5.1.2.tar.gz上传至服务器并解压,如果需要编译其它模块,将相应的压缩包复制到解压后的espresso-5.1.2/archive目录。在编译过程中,系统会自动解压这些压缩包,因此不要画蛇添足。编译完后测试PW模块需要赝势,而自5.0版之后源码包中附带的赝势不全,需要联网下载。由于单一服务器和集群一般不能连外网,因此测试时就会报错。解决方案是下载一份4.x版的QE,把其中pseudo子目录中的赝势添加到5.1.2版的pseudo子目录里。这一步之后,接下来的工作因计算环境而异。


1.2.2 单一服务器上编译QE
前文提到单一服务器可以自由修改环境变量,因此我们可以全部使用动态链接库,便于configure自动识别。在开始编译前,确保$HOME/.bashrc中含有这一行:
source /opt/intel/bin/compilervars.sh intel64
这一行确保了与Intel编译器和MKL相关的环境变量设置正确。

正确设置编译器之后,我们先编译openmpi。这里以1.8.5版为例,将源码上传至服务器后解压,进入源码子目录,执行如下命令:
export CC=icc
export CXX=icpc
export FC=ifort
export CFLAGS="-O3 -xHost"
export CXXFLAGS="-O3 -xHost"
export FCFLAGS="-O3 -xHost"
./configure \
        --prefix=$HOME/code/openmpi-1.8.5 \
        --enable-mpi-fortran=yes --enable-mpi-cxx=yes --enable-mpi-java=no \
        --enable-wrapper-rpath=yes --enable-cxx-exceptions=yes \
        --enable-mpi-thread-multiple=yes \
        --enable-shared=yes --enable-static=yes
配置完成后make -j 2,然后make check检查编译是否成功,最后make install安装openmpi-1.8.5至$HOME/code/openmpi-1.8.5目录。安装完之后,将如下内容添加至$HOME/.bashrc以设置相关环境变量:
export LD_LIBRARY_PATH=$HOME/code/openmpi-1.8.5/lib:$LD_LIBRARY_PATH
export PATH=$HOME/code/openmpi-1.8.5/bin:$PATH

最后执行命令source $HOME/.bashrc以更新设置。


接下来编译FFTW-3.3.4,解压源码,进入源码目录,执行如下命令:
export CC=icc
export F77=ifort
export CFLAGS="-O3 -xHost"
export FFLAGS="-O3 -xHost"
./configure --prefix=$HOME/code/fftw-3.3.4 --enable-sse2 --enable-shared
然后仿照编译openmpi,make -> make check -> make install三部曲。安装完后,将如下内容添加至$HOME/.bashrc:
export LD_LIBRARY_PATH=$HOME/code/fftw-3.3.4/lib:$LD_LIBRARY_PATH
最后执行命令source $HOME/.bashrc以更新设置。


最后编译QE。进入源码目录,执行如下命令:
export MPIF90=mpif90
export CC=icc
export FC=ifort
export F77=ifort
export CFLAGS="-O3 -xHost"
export FCFLAGS="-O3 -xHost"
export FFLAGS="-O3 -xHost"
./configure --prefix=$HOME/code/espresso-5.1.2

因为前面已经设置好了环境变量,系统会自动找到FFTW和MKL,因此configure后面不加相关设置就可启用MPI并行 + MKL + ScaLapack + FFTW。如果使用Intel MPI,系统可能无法找到对应的BLACS库,这时需要在configure后面加参数SCALAPACK_LIBS="-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64"来指定。设置完之后,make pw即可编译PW模块,make cp即编译CP模块,make pp即编译PP模块,make ph即编译PHonon模块,其它依此类推。


1.2.3 集群上编译QE
集群相对不自由,不能随便设置环境变量。有的集群编译节点和计算节点给出的动态链接库不同,会导致“编译测试都没问题,但一提交任务就报错退出”这种稀奇古怪的错误,我们组在编译VASP时就遇到过这问题。一个简单粗暴的方法就是全部使用静态链接库。这种方法也有缺点,比如编译出的程序体积很大,但还没达到令人难以接受的地步。FFTW编译部分相同,不同之处在于编译QE时的设置。以下举两个例子,大家可以根据自己所用集群编译器和MKL设置进行修改。


第一个例子是天津超算中心。它使用了自己开发的MPI,mpi程序名与openmpi一致,却需要链接Intel MPI对应的BLACS库(怀疑是套了马甲的IntelMPI)。设置如下:
export MPIF90=mpif90
export F90=ifort
export F77=ifort
export FC=ifort
export CFLAGS=-O2
export FFLAGS=-O2
export FCFLAGS=-O2
export MKL_LIB_PATH=/opt/intel/composer_xe_2013.0.079/mkl/lib/intel64
export FFT_LIB_PATH=$HOME/lib/fftw-3.3.4/lib
./configure
--prefix=$HOME/code/espresso-5.1.2 \
BLAS_LIBS="-Wl,--start-group \
$MKL_LIB_PATH/libmkl_intel_lp64.a \
$MKL_LIB_PATH/libmkl_sequential.a \
$MKL_LIB_PATH/libmkl_core.a \
-Wl,--end-group" \
SCALAPACK_LIBS="-Wl,--start-group \
$MKL_LIB_PATH/libmkl_scalapack_lp64.a \
$MKL_LIB_PATH/libmkl_blacs_intelmpi_lp64.a \
-Wl,--end-group" \
FFT_LIBS="$FFT_LIB_PATH/libfftw3.a"

第二个是我们学校的超算中心,用了Intel MPI,因此环境变量MPIF90值有所变化:
export MPIF90=mpiifort
export F77=ifort
export F90=ifort
export FC=ifort
export CFLAGS=-O2
export FCFLAGS=-O2
export FFLAGS=-O2
export MKLDIR=$HOME/lib/mkl-13.0.080
./configure
--prefix=$HOME/code/espresso-5.1.2 \
BLAS_LIBS="-Wl,--start-group $MKLDIR/libmkl_intel_lp64.a $MKLDIR/libmkl_sequential.a $MKLDIR/libmkl_core.a -Wl,--end-group" \
SCALAPACK_LIBS="-Wl,--start-group $MKLDIR/libmkl_scalapack_lp64.a $MKLDIR/libmkl_blacs_intelmpi_lp64.a -Wl,--end-group" \
FFT_LIBS="$HOME/lib/fftw-3.3.4/lib/libfftw3.a"

make部分操作同单一服务器。


1.3 测试
PW模块自带一个测试脚本,该脚本默认以串行方式调用pw.x,也可以以并行方式调用。由于集群一般禁止在登录节点运行任务,因此串行方式更通用。

进入espresso-5.1.2/PW/tests目录,执行命令./check-pw.x.j即可启动该脚本。一般情况下输出是这样的:
Checking atom-lsda...passed
Checking atom-pbe...passed
Checking atom-sigmapbe...passed
Checking atom...passed
Checking b3lyp-O...passed
Checking b3lyp-h2o...passed

但也有可能遇到这样的:
Checking cluster2...discrepancy in force detected
Reference:   0.5354, You got:   0.5355
这些微小的数值误差无关紧要,只要没有ERROR就可以。

在单服务器上可以用并行模式调用pw.x,为此先打开espresso-5.1.2/environment_variables这个文件,找到这么两行:
PARA_PREFIX="mpirun -np 2"
PARA_PREFIX=" "

删除最下面那行,再执行check-pw.x.j即可并行测试。可以通过调整np后面的数值来改变所用核数,但不要设置过大,4就差不多了。


测试完成后,make install即可将程序复制到--prefix指定的目录(这里是
$HOME/code/espresso-5.1.2)。将此目录添加到环境变量PATH,在单一服务器上就可直接用"mpirun -np 16 pw.x -in abc.in > abc.out 2>&1 &"这样的命令提交任务了。集群有自己的提交方式。比如天津超算是“yhrun -J XXX -n 12 -p TH_xxx pw.x -in abc.in > abc.out 2>&1 &",使用LSF任务调度系统的则需要使用bsub命令。



评分 Rate

参与人数
Participants 2
威望 +1 eV +2 收起 理由
Reason
greatzdk + 2
sobereva + 1 GJ!

查看全部评分 View all ratings

29

帖子

0

威望

132

eV
积分
161

Level 3 能力者

4#
发表于 Post on 2015-8-24 10:30:39 | 只看该作者 Only view this author
本帖最后由 冰山 于 2015-8-24 10:33 编辑

这两天编译QE,此帖帮大忙了!
希望楼主继续啊!
顺便补一下,
我的机器上装了IMSL
所以还需要再设置一下
export F90FLAGS=-O2
不然 F90FLAGS会指向IMSL库的目录
另外:./configure里面添加了
LAPACK_LIBS="-Wl,--start-group $MKLDIR/libmkl_lapack95_lp64.a -Wl,--end-group"
不然会报错,不认 -llapack

2

帖子

0

威望

11

eV
积分
13

Level 1 能力者

5#
发表于 Post on 2015-8-24 10:32:04 | 只看该作者 Only view this author
楼主辛苦了,期望早点更新,期待PHONON

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

6#
 楼主 Author| 发表于 Post on 2015-8-24 15:01:41 | 只看该作者 Only view this author
本帖最后由 万里云 于 2015-8-24 15:14 编辑
冰山 发表于 2015-8-24 10:30
这两天编译QE,此帖帮大忙了!
希望楼主继续啊!
顺便补一下,

我一般用MKL,启用了ScaLAPACK就不必设置LAPACK了。

29

帖子

0

威望

132

eV
积分
161

Level 3 能力者

7#
发表于 Post on 2015-8-24 16:32:36 | 只看该作者 Only view this author
本帖最后由 冰山 于 2015-8-25 14:57 编辑
万里云 发表于 2015-8-24 15:01
我一般用MKL,启用了ScaLAPACK就不必设置LAPACK了。

我也是用MKL,不知道为什么还是提醒我-llapack找不到,加了lapack_lib之后就好了。

另外还想问下,QE的并行效率如何?
我刚才测试一下,感觉效率特别低,不知道为什么。
8核的49秒 单核才94秒。刚才考到本地又测了一下
8核24秒 单核 65秒

补充一下,就不单独写回帖了。
“我们发现,CPU时间和并行度成正比,wall time 实际时间和和并行度关系比较弱。”
也可能是因为这个计算过程太短,而输入输出时间相对过多造成的。

最新测试结果,PWscf 自洽过程 并行度和耗费时间测试结果。版本4.0.3 (因为要用某软件和QE接口)
8 cores
     Program PWSCF     v.4.0.3  starts ...
     PWSCF        :     1.65s CPU time,    7.45s wall time
4 cores
     Program PWSCF     v.4.0.3  starts ...
     PWSCF        :     2.30s CPU time,    7.70s wall time
2 cores
     Program PWSCF     v.4.0.3  starts ...
     PWSCF        :     3.86s CPU time,    9.15s wall time
1 cores
     Program PWSCF     v.4.0.3  starts ...
     PWSCF        :     6.58s CPU time,   11.97s wall time



403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

8#
 楼主 Author| 发表于 Post on 2015-8-24 16:58:42 | 只看该作者 Only view this author
冰山 发表于 2015-8-24 16:32
我也是用MKL,不知道为什么还是提醒我-llapack找不到,加了lapack_lib之后就好了。

另外还想问下,QE ...

我没具体测过并行效率。

主程序pw.x其实是可以接受其它命令行参数的,这些参数可以控制并行计算细节,可以看Doc/user_guide.pdf这个文件。

111

帖子

0

威望

458

eV
积分
569

Level 4 (黑子)

9#
发表于 Post on 2015-8-25 09:53:45 | 只看该作者 Only view this author
刚看看 学习了,相当给力。老师对QE的MD学习多吗,这里有个问题,希望您能帮看看,谢谢了!  
http://ccc.keinsci.com/thread-1639-1-1.html

22

帖子

1

威望

268

eV
积分
310

Level 3 能力者

10#
发表于 Post on 2015-9-7 17:02:28 | 只看该作者 Only view this author
学习中,感谢分享

111

帖子

0

威望

458

eV
积分
569

Level 4 (黑子)

11#
发表于 Post on 2015-9-21 13:29:28 | 只看该作者 Only view this author
您好!我做完计算,画能带,但是出现下面的问题,这是怎么回事,是我计算输入文件中保存数据少了么?还是其它问题,附件附上了输入文件,麻烦能帮看下,谢了,我在网上查了好久

QQ截图20150921132600.jpg (286.5 KB, 下载次数 Times of downloads: 148)

问题

问题

input_tmpscf.in

3.14 KB, 阅读权限: 10, 下载次数 Times of downloads: 13

in文件

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

12#
 楼主 Author| 发表于 Post on 2015-9-21 14:33:28 | 只看该作者 Only view this author
茶味果冻 发表于 2015-9-21 13:29
您好!我做完计算,画能带,但是出现下面的问题,这是怎么回事,是我计算输入文件中保存数据少了么?还是其 ...

bands.x的输入文件呢?

111

帖子

0

威望

458

eV
积分
569

Level 4 (黑子)

13#
发表于 Post on 2015-9-21 19:06:53 | 只看该作者 Only view this author
万里云 发表于 2015-9-21 14:33
bands.x的输入文件呢?

来了,在附件中,麻烦您了

bands.in

68 Bytes, 下载次数 Times of downloads: 19

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

14#
 楼主 Author| 发表于 Post on 2015-9-22 09:11:28 | 只看该作者 Only view this author
茶味果冻 发表于 2015-9-21 19:06
来了,在附件中,麻烦您了

prefix和上面那个输入文件不一致。

111

帖子

0

威望

458

eV
积分
569

Level 4 (黑子)

15#
发表于 Post on 2015-9-22 10:44:22 | 只看该作者 Only view this author
万里云 发表于 2015-9-22 09:11
prefix和上面那个输入文件不一致。

您好!按照说的我调了,但是运算有出现错误了,附件是我的band计算的输入文件 和scf、bands计算的输出文件和产生band.dat的输出文件,错误信息如图片所示,slurm-2721910文件中也有.是我第二步calculation = 'bands',计算k点设置的问题嘛还是其它原因,这是小木虫上一个类似的错误问题,http://emuch.net/bbs/viewthread. ... =1&target=blank,是这样吗?麻烦大神帮看下,谢谢了!

QQ截图20150922103927.jpg (155.2 KB, 下载次数 Times of downloads: 129)

错误

错误

TiO2scf.out

33.73 KB, 阅读权限: 10, 下载次数 Times of downloads: 4

bands.out

35.42 KB, 阅读权限: 10, 下载次数 Times of downloads: 3

slurm-2721910.out

4.46 KB, 阅读权限: 10, 下载次数 Times of downloads: 3

input_tmpband.in

3.14 KB, 下载次数 Times of downloads: 9

本版积分规则 Credits rule

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

GMT+8, 2024-11-23 05:07 , Processed in 0.218228 second(s), 31 queries , Gzip On.

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