第11届北京科音分子动力学与GROMACS培训班将于8月13~16日于北京举办,是系统性学习分子动力学与GROMACS使用的最佳机会,请点击此链接查看培训详情,欢迎参加!

计算化学公社

 找回密码 Forget password
 注册 Register
Views: 4985|回复 Reply: 8

[GPU加速] VASP 用 GPU 加速后似乎没有 CPU 并行快

[复制链接 Copy URL]

1

帖子

0

威望

17

eV
积分
18

Level 1 能力者

发表于 Post on 2021-1-6 16:52:38 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 Ionizing 于 2021-1-6 17:08 编辑

本人使用某超算中心集群,编译了 VASP 6.1.0 ,使用 GPU 加速后效率反而没有单纯 CPU 并行效率高:

测试体系:
  1. TiO2(110) rutile+O2, with LDAU, ISPIN=2, 36 k-points, symmetry off(见附件)
复制代码

测试环境

测试结果(每个电子步的时间):
  1. 1 node with no GPU: 20s, (i.e. 36 mpi tasks)
  2. 2 nodes with no GPU: 11s, (i.e. 72 mpi tasks)
  3. 1 node with V100x2: 83s, (1 mpi task)
  4. 1 node with V100x2: 88s, (36 mpi tasks)
  5. 1 node with V100x2: 44s, (2 mpi tasks)
  6. 1 node with V100x2: 43s, (4 mpi tasks)
复制代码



注:
  • 在使用 GPU 加速时要求 NCORE=1 ,但在单纯使用 CPU 计算时 NCORE=6 ,其它参数相同;
  • 在使用 GPU 加速时我曾 ssh 到计算节点上查看 GPU 的占用情况 (nvidia-smi),上面四种情况下 GPU 的两张卡均占用 95%+, 显存占用 20% 。


[size=14.399999618530273px]提交脚本:
  1. #!/bin/bash
  2. #SBATCH --account some_account
  3. #SBATCH -p analysis
  4. #SBATCH -N 1
  5. #SBATCH -n 6
  6. #SBATCH -c 6
  7. ##SBATCH --ntasks-per-node=32
  8. #SBATCH -t 02:00:00
  9. #SBATCH --gres=gpu:volta:2
  10. #SBATCH --gres-flags=disable-binding

  11. source /etc/profile.d/modules.bash
  12. module purge

  13. ulimit -s unlimited

  14. export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

  15. module purge
  16. module load intel/ips_18
  17. module load impi/ips_18
  18. module load cuda/11.1.0-intel
  19. echo "============================================================"
  20. module list
  21. env | grep "MKLROOT="
  22. echo "============================================================"
  23. echo "Job ID: $SLURM_JOB_NAME"
  24. echo "Job name: $SLURM_JOB_NAME"
  25. echo "Number of nodes: $SLURM_JOB_NUM_NODES"
  26. echo "Number of processors: $SLURM_NTASKS"
  27. echo "Task is running on the following nodes:"
  28. echo $SLURM_JOB_NODELIST
  29. echo "============================================================"
  30. echo

  31. srun ../bin/vasp_gpu
复制代码



编译参数(makefile.include):
  1. # Precompiler options
  2. CPP_OPTIONS= -DHOST="LinuxIFC"\
  3.              -DMPI -DMPI_BLOCK=8000 -Duse_collective \
  4.              -DscaLAPACK \
  5.              -DCACHE_SIZE=4000 \
  6.              -Davoidalloc \
  7.              -Dvasp6 \
  8.              -Duse_bse_te \
  9.              -Dtbdyn \
  10.              -Dfock_dblbuf

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

  12. FC         = mpiifort
  13. FCL        = mpiifort -mkl=sequential

  14. FREE       = -free -names lowercase

  15. FFLAGS     = -assume byterecl -w -xHOST
  16. OFLAG      = -O2
  17. OFLAG_IN   = $(OFLAG)
  18. DEBUG      = -O0

  19. MKL_PATH   = $(MKLROOT)/lib/intel64
  20. BLAS       =
  21. LAPACK     =
  22. BLACS      = -lmkl_blacs_intelmpi_lp64
  23. SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

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

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

  26. LLIBS      = $(SCALAPACK) $(LAPACK) $(BLAS)


  27. OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
  28. OBJECTS_O2 += fft3dlib.o

  29. # For what used to be vasp.5.lib
  30. CPP_LIB    = $(CPP)
  31. FC_LIB     = $(FC)
  32. CC_LIB     = icc
  33. CFLAGS_LIB = -O
  34. FFLAGS_LIB = -O1
  35. FREE_LIB   = $(FREE)

  36. OBJECTS_LIB= linpack_double.o getshmem.o

  37. # For the parser library
  38. CXX_PARS   = icpc
  39. LLIBS      += -lstdc++

  40. # Normally no need to change this
  41. SRCDIR     = ../../src
  42. BINDIR     = ../../bin

  43. #================================================
  44. # GPU Stuff

  45. CPP_GPU    = -DCUDA_GPU -DRPROMU_CPROJ_OVERLAP -DUSE_PINNED_MEMORY -DCUFFT_MIN=28 -UscaLAPACK -Ufock_dblbuf

  46. OBJECTS_GPU= fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d_gpu.o fftmpiw_gpu.o

  47. CC         = mpiicc
  48. CXX        = mpiicpc
  49. CFLAGS     = -fPIC -DADD_ -Wall -qopenmp -DMAGMA_WITH_MKL -DMAGMA_SETAFFINITY -DGPUSHMEM=300 -DHAVE_CUBLAS

  50. CUDA_ROOT  ?= /usr/local/cuda/
  51. NVCC       := $(CUDA_ROOT)/bin/nvcc -ccbin=mpiicc
  52. CUDA_LIB   := -L$(CUDA_ROOT)/lib64 -lnvToolsExt -lcudart -lcuda -lcufft -lcublas

  53. #GENCODE_ARCH    := -gencode=arch=compute_30,code="sm_30,compute_30" \
  54. #                   -gencode=arch=compute_35,code="sm_35,compute_35" \
  55. #                   -gencode=arch=compute_60,code="sm_60,compute_60" \
  56. #                   -gencode=arch=compute_70,code="sm_70,compute_70" \
  57. #                   -gencode=arch=compute_72,code="sm_72,compute_72"

  58. GENCODE_ARCH    := -gencode=arch=compute_35,code="sm_35,compute_35" \
  59.                    -gencode=arch=compute_60,code="sm_60,compute_60" \
  60.                    -gencode=arch=compute_70,code="sm_70,compute_70" \
  61.                    -gencode=arch=compute_72,code="sm_72,compute_72"


  62. MPI_INC    = $(I_MPI_ROOT)/include64/
复制代码




现在我的疑问是:
  • 我使用的编译参数是否有问题;
  • 我使用的提交脚本是否有问题;
  • 我使用的测试体系和测试参数是否有问题;
  • 我仍然怀疑我打开方式不对,请问有何指教。



TiO2_test_gpu.zip

450.13 KB, 下载次数 Times of downloads: 13

28

帖子

0

威望

813

eV
积分
841

Level 4 (黑子)

发表于 Post on 2021-1-25 15:30:26 | 显示全部楼层 Show all
vasp本来就是cpu更合适

1653

帖子

1

威望

3660

eV
积分
5333

Level 6 (一方通行)

发表于 Post on 2021-1-26 09:28:34 | 显示全部楼层 Show all
#SBATCH -N 1 以下申请的资源请局限在一个节点,猜测是36个核心的机器
#SBATCH -n 6 分成六组,  
#SBATCH -c 6 每一个组6个MPI_thread?

如果设定的是NCORE=6, 那么-n -c选项都可以拿掉了。

另外,请确认
1    VASP_GPU版本,是100%纯GPU程序吗?
2    系统设定的一个GPU默认搭配几个CPU核心?
3    如果具有IB网络,可以尝试修改-DMPI_BLOCK=8000 -DCACHE_SIZE=4000 来获取更高的性能,可以google到部分论文。实际效果待测试,严重依赖硬件。
4    GPU加速严重依赖双精度的计算,效果一般,比如参考Gaussian16。
5    可以测试-O3优化。

High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
App,  https://gitee.com/hpc4you/linux
hpc4you toolkit,  https://gitee.com/hpc4you/hpc
电邮hpc4you@163.com VX: hpc4you

3

帖子

0

威望

139

eV
积分
142

Level 2 能力者

发表于 Post on 2021-2-23 14:08:05 | 显示全部楼层 Show all
我现在也发现了了这个问题,不仅GPU版,包括ACC版本,有时候4块GPU的速度还不如单个CPU节点。。。ACC版本有时候会异常的慢。。。搞的我最近比较烦躁,不知道是不是跟算的原子数总数有关系。。。楼主有空可以测试一下。。。而且GPU没必要开那个多mpi进行,,貌似一个GPU开两个进程是比较快的。ACC版本只支持一个进程一个GPU。。。

3

帖子

0

威望

139

eV
积分
142

Level 2 能力者

发表于 Post on 2021-2-23 14:19:30 | 显示全部楼层 Show all
主要是现在GPU节点配备的CPU也基本上式非常好的CPU,但是一个GPU往往只用上一个CPU核心。所以单CPU节点和GPU节点的运行速度估计不好比较,应该是单CPU核心比单CPU核心+单GPU卡慢很多?

6

帖子

0

威望

90

eV
积分
96

Level 2 能力者

发表于 Post on 2021-3-13 00:06:38 | 显示全部楼层 Show all
试试 NSIM=4

68

帖子

1

威望

166

eV
积分
254

Level 3 能力者

发表于 Post on 2022-2-27 20:51:14 | 显示全部楼层 Show all
KevinLee 发表于 2021-1-25 15:30
vasp本来就是cpu更合适

我可是十分肯定地说,对于体系比较大的时候,肯定是GPU版本的速度会快很多的(官方说快10倍)。但如果体系比较小时,CPU版本的可能会更快,这个不能作为比较的标准。尤其是多K点并行时,效率会特别高,一个K点,一个GPU,几乎能按比例降低时间。但对于单K点多个GPU并行的效率就没那么高了。就是说你用两个GPU算一个K点的体系,效果可能就不佳,甚至与只用一个GPU时的速度一样。这是vasp5时gpu版本。

据说目前出了ACC版本,速度比起原来的GPU版本速度还快。我只编译过旧的GPU版本的,编译过程十分复杂,源代码有bug,要修改(在网上能找到解决办法,但说得不详细,也不全面)。新版本有可能对单K点多GPU的并行效率有提升。

vsap5 GPU时,如果只是使用官方的版本,其效果就是如果是多个K点,那么最好就只使用与K点相同数目的GPU数量(体系很大,不可约K点数目少),这样所花时间,就只与单个K点所花的时间几乎相同。但当GPU多于不可约K点数目,你想用更多GPU来计算,那旧基本就没用了,基本不能降低计算时间。

对于之前那个版本,使用magma(有一个网站专门开发这个的,在旧版中,有使用这个东西的编译选项)十分关键,可以很大程度地改善那种多个GPU算单K点并行效率不佳的情况。不清楚vasp6是否还能继续使用那个magma,以及是否依然有必要使用那个magma库。

GPU版最强的地方,就在于多K点并行。采用与不可约K点相同数量的GPU,就与采用单个K点所花的时间差不多。对时间降低作用可想而知,如果不可约K点不太少,能达到的速度不是CPU并行能够追得上的。

此外计算hybrid DFT的速度快,CPU版本难以算得动的体系,再多的CPU都没办法的体系,GPU版本的都可能能胜任。如果主要使用hybrid DFT,GPU版本的优势就特别明显了。

由于不清楚vasp 6 acc版本的具体情况,如果是算得慢的,很可能是因为你这个体系的K点数量太少了,比如只有1个,你采用多个GPU的效果可能就不佳了。可以考虑一下是否这种情况。也可以查看一下vasp 6是否依然可以使用那个magma,这个对于提高旧GPU版本的并行效率十分重要。

总结一下,对于旧GPU版,对于多个K点,使用与K点数量相同的GPU(比如2个K点,2个GPU)进行计算。更多的GPU,几乎没有效果。使用magma库编译,能够改善,但效果不能按比例减少计算时间。

旧GPU版的并行效率就是有这个K点数量太少,并行效率差的问题。

评分 Rate

参与人数
Participants 1
eV +4 收起 理由
Reason
KevinLee + 4 赞!

查看全部评分 View all ratings

1

帖子

0

威望

35

eV
积分
36

Level 2 能力者

发表于 Post on 2022-7-5 13:13:07 | 显示全部楼层 Show all
hgyhgy 发表于 2022-2-27 20:51
我可是十分肯定地说,对于体系比较大的时候,肯定是GPU版本的速度会快很多的(官方说快10倍)。但如果体 ...

“对于旧GPU版,对于多个K点,使用与K点数量相同的GPU(比如2个K点,2个GPU)进行计算” 请问这里说的k点的数量是KPOINTS还是IBZKPI中的数量

1

帖子

0

威望

75

eV
积分
76

Level 2 能力者

发表于 Post on 2022-7-20 05:07:46 | 显示全部楼层 Show all
vasp:6.3,GPU:8*A100(nvlink) ,计算稀土金属掺杂256个原子体系,使用GPU速度很快,比单纯cpu快多了。

本版积分规则 Credits rule

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

GMT+8, 2022-8-12 02:32 , Processed in 0.281689 second(s), 34 queries .

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