计算化学公社

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

[VASP] vasp6.4.3openACC+openMPI的GPU编译步骤

[复制链接 Copy URL]

4

帖子

1

威望

158

eV
积分
182

Level 3 能力者

Toolchains - VASP Wiki VASP官方测试过了一些相关编译器和依赖库。自己这边直接拿手头版本来用了,环境是debian10,11以及ubuntu22
1. cuda以及cuda tookit的安装CUDA Toolkit 12.5 Downloads | NVIDIA Developer这次用的12.5直接按官方手册全部默认就行,如果你的机器以前没有装过cuda记得结束后重启
2. nvhpc安装
根据cuda版本选择对应版本,这次安装的12.5对应24.5
NVIDIA HPC SDK Current Release Downloads | NVIDIA Developer同样按照官方手册,默认即可
  1. NVARCH=`uname -s`_`uname -m`; export NVARCH
  2. NVCOMPILERS=/opt/nvidia/hpc_sdk; export NVCOMPILERS
  3. MANPATH=$MANPATH:$NVCOMPILERS/$NVARCH/22.11/compilers/man; export MANPATH
  4. export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/compilers/bin:$PATH
  5. export MANPATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/compilers/man:$MANPATH
  6. #export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/comm_libs/mpi/bin:$PATH                                                                    
  7. export PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/comm_libs/openmpi/openmpi-3.1.5/bin:$PATH
复制代码
结束之后将以上内容写进bashrc
3.fftw安装
FFTW Download Page这次用的3.3.10版本,下载解压后注意configure的选项
  1. ./configure --enable-shared  --enable-threads --enable-openmp --prefix=/install-path
复制代码
vasp6.4默认用的是libfftw3_omp.a库,所以需要加上openmp选项,之后make && make install就行
4.openmpi编译
这个属于可选项,上面toolchain里官方给的是openmpi4.1.6但是hpc里自带的是3.1.5,两个都试了目前没有发现什么问题
Open MPI: Version 4.1 (open-mpi.org) FAQ: Building CUDA-aware Open MPI (open-mpi.org)下载和编译参考这个官方网页
值得注意的是为更好的效果官方建议同时编译ucx和gdcopy,方法参考这两网页个OpenUCX — OpenUCX documentationGitHub - NVIDIA/gdrcopy: A fast GPU memory copy library based on NVIDIA GPUDirect RDMA technology
然后编译fftw的时候用以下选项
  1. ./configure --prefix=/path/to/ucx-cuda-install --with-cuda=/usr/local/cuda --with-gdrcopy=/gdrcopy_path
复制代码
个人感觉用hpc自带的差别不大方便省事一点,如果用了这个记得bashc里替换openmpi的PATH
5.vasp编译
上面安装完成以及环境变量没问题之后直接make就行了
  1. cp arch/makefile.include.nvhpc_omp_acc ./makefile.include
复制代码
具体makefile.include里可能需要修改的地方如下所示
  1. #associate with infiniband issue
  2. -DMPI_BLOCK=8000 -DCACHE_SIZE=4000
  3. # chage cuda version and mpi is the one provided by hpc
  4. CC          = mpicc  -acc -gpu=cc60,cc70,cc80,cuda12.4 -mp
  5. FC          = mpif90 -acc -gpu=cc60,cc70,cc80,cuda12.4 -mp
  6. FCL         = mpif90 -acc -gpu=cc60,cc70,cc80,cuda12.4 -mp -c++libs
  7. #appoint cpu type
  8. VASP_TARGET_CPU ?= -tp px
  9. #qd path
  10. QD         ?= /opt/nvidia/hpc_sdk/Linux_x86_64/24.5/compilers/extras/qd
  11. #fftw path
  12. FFTW_ROOT  ?= /opt/install_fftw-3.3.10-omp
  13. # Improves performance when using NV HPC-SDK >=21.11 and CUDA >11.2
  14. OFLAG_IN   = -fast -Mwarperf
  15. SOURCE_IN  := nonlr.o
复制代码
其中值得注意的是编译器的-tp选项,HPC Compiler Reference Manual Version 24.5 for ARM, OpenPower, x86 (nvidia.com)参考这里用自己CPU对应的选项
6.提交任务
  1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/compilers/extras/qd/lib

  2. vasp_path=/home/program_pacakage/vasp.6.4.3-cuda12.4-openmpi3.1.5/bin
  3. mpi_path=/opt/nvidia/hpc_sdk/Linux_x86_64/24.5/comm_libs/openmpi/openmpi-3.1.5/bin

  4. $mpi_path/mpirun -n 1 $vasp_path/vasp_std > vasp.log
复制代码
这里是个简单的任务脚本实例,根据自己安装位置不同来修改

评分 Rate

参与人数
Participants 2
威望 +1 eV +5 收起 理由
Reason
针灸大师容嬷嬷 + 5 精品内容
sobereva + 1

查看全部评分 View all ratings

21

帖子

0

威望

294

eV
积分
315

Level 3 能力者

2#
发表于 Post on 2024-6-30 21:43:51 | 只看该作者 Only view this author
您好,想请问编译完成之后,进行结构优化,生成的CONTCAR文件,在第五行原子号后出现斜杠,这个是为什么?如下所示:

Fe2 O2 F2
   1.00000000000000
     3.8478394449133773    0.0000000000000000    0.0000000000000000
     0.0000000000000000    5.0489589640565793    0.0000000000000000
     0.0000000000000000    0.0000000000000000   24.3574179999999991
  Sc/             S/              I/
               2               2               2

1

帖子

0

威望

49

eV
积分
50

Level 2 能力者

3#
发表于 Post on 2024-7-8 13:40:04 | 只看该作者 Only view this author
请问vtst有编译成功吗,我使用最新的199 编译有未定义错误,undefined reference to `chain_stress_'。不知道是不是这个代码还没更新

1

帖子

0

威望

125

eV
积分
126

Level 2 能力者

4#
发表于 Post on 2024-7-23 10:43:09 | 只看该作者 Only view this author
ly934684881 发表于 2024-7-8 13:40
请问vtst有编译成功吗,我使用最新的199 编译有未定义错误,undefined reference to `chain_stress_'。不知 ...

你好,我也遇到了这个问题,请问解决了吗

1063

帖子

0

威望

3277

eV
积分
4340

Level 6 (一方通行)

5#
发表于 Post on 2024-7-23 10:59:24 | 只看该作者 Only view this author
请问,这个是编译 GPU 版的 VASP 吗?

5

帖子

0

威望

47

eV
积分
52

Level 2 能力者

6#
发表于 Post on 2024-9-4 17:02:05 | 只看该作者 Only view this author
剑羽流光 发表于 2024-7-23 10:43
你好,我也遇到了这个问题,请问解决了吗

您好,我也遇到了同样的问题,解决了吗?

1

帖子

0

威望

49

eV
积分
50

Level 2 能力者

7#
发表于 Post on 2024-9-10 19:48:15 | 只看该作者 Only view this author
您好,编译完成后运行vasp报错说mpi初始化失败,我确定openmpi和其他的路径都没问题,编译的时候也没报错,不知道这是什么原因呢

1

帖子

0

威望

43

eV
积分
44

Level 2 能力者

8#
发表于 Post on 2024-9-12 22:02:22 | 只看该作者 Only view this author
ly934684881 发表于 2024-7-8 13:40
请问vtst有编译成功吗,我使用最新的199 编译有未定义错误,undefined reference to `chain_stress_'。不知 ...

请问,您解决了吗?我尝试了6.3.2用199可以,但是6.4.3用199就是这个报错,我看vtst自己的论坛里也有人说遇到这个,但是没有给出解决办法。

6

帖子

0

威望

42

eV
积分
48

Level 2 能力者

9#
发表于 Post on 2024-10-12 09:52:07 | 只看该作者 Only view this author
由于VTST中chain.F移除了SUBROUTINE chain_stress这部分。解决方式:在VASP官方的chain.F中复制过来,加在 END SUBROUTINE chain_force后面。并在55行PUBLIC :: chain_force后面加入chain_stress。

这是官方源文件的子函数:
  1.     SUBROUTINE chain_stress( stress )

  2.        implicit none
  3.        REAL(q),intent( inout ) :: stress(3,3)
  4.        REAL(q)                 :: stress_all(3,3,2)
  5.        INTEGER                 :: node

  6.        IF ( images == 0 ) RETURN
  7.        IF ( spring == -1000 ) RETURN

  8. #if defined(MPI) || defined (MPI_CHAIN)
  9.        node = comm_chain%node_me

  10. !======================================================================
  11. ! Parallel tempering return
  12. !======================================================================
  13.        IF ( LTEMPER ) THEN
  14.           RETURN
  15. !======================================================================
  16. ! VCA average stresses over two images
  17. !======================================================================
  18.        ELSE IF ( LVCAIMAGES ) THEN
  19.           stress_all(:,:,1:2)  = 0
  20.           stress_all(:,:,node) = stress
  21. #ifndef old_vca
  22.           ! first core in image merges the data
  23.           IF ( comm%node_me == 1 ) THEN
  24.              !! 3x3 stress components and two molecular dynamics streams
  25.              CALLMPI_C( M_sum_d( comm_chain, stress_all(1,1,1), 3*3*2))
  26.              stress(:,:)=stress_all(:,:,1)*VCAIMAGES+stress_all(:,:,2)*(1-VCAIMAGES)
  27.           ELSE
  28.              stress=0
  29.           ENDIF
  30.           ! now sum over all cores in one image
  31.           CALLMPI_C( M_sum_d( comm, stress( 1, 1 ), 3*3 ) )
  32. #else
  33.           !! 3x3 stress components and two molecular dynamics streams
  34.           CALLMPI_C( M_sum_d( comm_chain, stress_all( 1, 1, 1 ), 3*3*2 ) )
  35.           stress = 0
  36.           stress( : , : ) = stress_all( :, :, 1 ) * VCAIMAGES + stress_all( :, :, 2 ) * ( 1 - VCAIMAGES )
  37.           RETURN
  38. #endif
  39.        END IF
  40. #endif
  41.     END SUBROUTINE chain_stress
复制代码

29

帖子

0

威望

119

eV
积分
148

Level 2 能力者

10#
发表于 Post on yesterday 00:26 | 只看该作者 Only view this author
我想问一下gpu版的vtst怎么算?我编译好了不会用,是直接mpirun -np 插值 vasp_gpu吗?

本版积分规则 Credits rule

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

GMT+8, 2024-11-27 15:53 , Processed in 0.943723 second(s), 32 queries , Gzip On.

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