计算化学公社

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

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

[复制链接 Copy URL]

1

帖子

0

威望

17

eV
积分
18

Level 1 能力者

本帖最后由 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: 52

40

帖子

0

威望

1169

eV
积分
1209

Level 4 (黑子)

2#
发表于 Post on 2021-1-25 15:30:26 | 只看该作者 Only view this author
vasp本来就是cpu更合适

2302

帖子

1

威望

5479

eV
积分
7801

Level 6 (一方通行)

3#
发表于 Post on 2021-1-26 09:28:34 | 只看该作者 Only view this author
#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
为您专属定制的高性能计算解决方案

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

3

帖子

0

威望

143

eV
积分
146

Level 2 能力者

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

3

帖子

0

威望

143

eV
积分
146

Level 2 能力者

5#
发表于 Post on 2021-2-23 14:19:30 | 只看该作者 Only view this author
主要是现在GPU节点配备的CPU也基本上式非常好的CPU,但是一个GPU往往只用上一个CPU核心。所以单CPU节点和GPU节点的运行速度估计不好比较,应该是单CPU核心比单CPU核心+单GPU卡慢很多?

6

帖子

0

威望

121

eV
积分
127

Level 2 能力者

6#
发表于 Post on 2021-3-13 00:06:38 | 只看该作者 Only view this author
试试 NSIM=4

81

帖子

1

威望

220

eV
积分
321

Level 3 能力者

7#
发表于 Post on 2022-2-27 20:51:14 | 只看该作者 Only view this author
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

威望

67

eV
积分
68

Level 2 能力者

8#
发表于 Post on 2022-7-5 13:13:07 | 只看该作者 Only view this author
hgyhgy 发表于 2022-2-27 20:51
我可是十分肯定地说,对于体系比较大的时候,肯定是GPU版本的速度会快很多的(官方说快10倍)。但如果体 ...

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

1

帖子

0

威望

441

eV
积分
442

Level 3 能力者

9#
发表于 Post on 2022-7-20 05:07:46 | 只看该作者 Only view this author
vasp:6.3,GPU:8*A100(nvlink) ,计算稀土金属掺杂256个原子体系,使用GPU速度很快,比单纯cpu快多了。

154

帖子

0

威望

613

eV
积分
767

Level 4 (黑子)

10#
发表于 Post on 2022-9-5 17:58:48 | 只看该作者 Only view this author
感觉GPU跑声子比CPU快好多的样子

2302

帖子

1

威望

5479

eV
积分
7801

Level 6 (一方通行)

11#
发表于 Post on 2022-9-5 22:49:28 | 只看该作者 Only view this author
路过补充一下 A100,约八万人民币一块。
想用GPU加速的,可以看一下预算。

可能价格会跳水,但是也不是一万元一块的。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

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

328

帖子

0

威望

1920

eV
积分
2248

Level 5 (御坂)

12#
发表于 Post on 2022-9-6 07:32:53 | 只看该作者 Only view this author
H100快出来了,A100会降价让道吧。
用vasp最新版去测试哦。版本号是  6.3.x。没买许可的话,难拿到这个版本的代码。

67

帖子

0

威望

1089

eV
积分
1156

Level 4 (黑子)

13#
发表于 Post on 2022-9-6 08:53:51 | 只看该作者 Only view this author
chenhang07 发表于 2022-7-20 05:07
vasp:6.3,GPU:8*A100(nvlink) ,计算稀土金属掺杂256个原子体系,使用GPU速度很快,比单纯cpu快多了。

真豪啊,8个A100的价格完全可以搞8台8375C的双路机器,有这样一套就没必要搞GPU加速了

545

帖子

0

威望

3123

eV
积分
3668

Level 5 (御坂)

14#
发表于 Post on 2022-9-6 09:51:14 | 只看该作者 Only view this author
前两天刚测的,RTX2060,128个水,gamma点跑AIMD,单GPU速度大概是24C的上百倍。当然这里有个重要的因素是VASP用CPU跑大体系实在是慢得太离谱了。

139

帖子

1

威望

1416

eV
积分
1575

Level 5 (御坂)

15#
发表于 Post on 2022-10-19 13:46:54 | 只看该作者 Only view this author
k64_cc 发表于 2022-9-6 09:51
前两天刚测的,RTX2060,128个水,gamma点跑AIMD,单GPU速度大概是24C的上百倍。当然这里有个重要的因素是V ...

您好 请问能否提供一下输入和输出文件?我想做一下对比测试 谢谢!

本版积分规则 Credits rule

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

GMT+8, 2024-11-27 05:00 , Processed in 0.212458 second(s), 31 queries , Gzip On.

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