计算化学公社

标题: vasp6.4.3openACC+openMPI的GPU编译步骤 [打印本页]

作者
Author:
MIOSAMA    时间: 2024-6-19 22:14
标题: vasp6.4.3openACC+openMPI的GPU编译步骤
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
复制代码
这里是个简单的任务脚本实例,根据自己安装位置不同来修改

作者
Author:
raolixiang    时间: 2024-6-30 21:43
您好,想请问编译完成之后,进行结构优化,生成的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


作者
Author:
ly934684881    时间: 2024-7-8 13:40
请问vtst有编译成功吗,我使用最新的199 编译有未定义错误,undefined reference to `chain_stress_'。不知道是不是这个代码还没更新
作者
Author:
剑羽流光    时间: 2024-7-23 10:43
ly934684881 发表于 2024-7-8 13:40
请问vtst有编译成功吗,我使用最新的199 编译有未定义错误,undefined reference to `chain_stress_'。不知 ...

你好,我也遇到了这个问题,请问解决了吗
作者
Author:
乐平    时间: 2024-7-23 10:59
请问,这个是编译 GPU 版的 VASP 吗?
作者
Author:
zhangwenyue22    时间: 2024-9-4 17:02
剑羽流光 发表于 2024-7-23 10:43
你好,我也遇到了这个问题,请问解决了吗

您好,我也遇到了同样的问题,解决了吗?
作者
Author:
life    时间: 2024-9-10 19:48
您好,编译完成后运行vasp报错说mpi初始化失败,我确定openmpi和其他的路径都没问题,编译的时候也没报错,不知道这是什么原因呢
(, 下载次数 Times of downloads: 5)

作者
Author:
hliu    时间: 2024-9-12 22:02
ly934684881 发表于 2024-7-8 13:40
请问vtst有编译成功吗,我使用最新的199 编译有未定义错误,undefined reference to `chain_stress_'。不知 ...

请问,您解决了吗?我尝试了6.3.2用199可以,但是6.4.3用199就是这个报错,我看vtst自己的论坛里也有人说遇到这个,但是没有给出解决办法。
作者
Author:
heyi87    时间: 2024-10-12 09:52
由于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
复制代码

作者
Author:
ljb874722957    时间: yesterday 00:26
我想问一下gpu版的vtst怎么算?我编译好了不会用,是直接mpirun -np 插值 vasp_gpu吗?




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3