计算化学公社

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

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

[复制链接 Copy URL]

1

帖子

0

威望

17

eV
积分
18

Level 1 能力者

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 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: 54

2407

帖子

1

威望

5958

eV
积分
8385

Level 6 (一方通行)

23#
发表于 Post on 2024-11-26 09:11:33 | 只看该作者 Only view this author
ljb874722957 发表于 2024-11-26 00:12
你好,有100纯GPU运算的吗?我发现我编译的时候cpu也占内存。

“你好,有100纯GPU运算的吗?我发现我编译的时候cpu也占内存。”

第一句, 因为我不懂VASP, 不晓得, 无法提供. 也许咨询VASP开发者比较好.


第二句, 我没读明白, 你想说什么? 无法回复.
High-Performance Computing for You
为您专属定制的高性能计算解决方案

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

42

帖子

0

威望

336

eV
积分
378

Level 3 能力者

22#
发表于 Post on 2024-11-26 00:12:22 | 只看该作者 Only view this author
abin 发表于 2021-1-26 09:28
#SBATCH -N 1 以下申请的资源请局限在一个节点,猜测是36个核心的机器
#SBATCH -n 6 分成六组,  
#SBATC ...

你好,有100纯GPU运算的吗?我发现我编译的时候cpu也占内存。

42

帖子

0

威望

336

eV
积分
378

Level 3 能力者

21#
发表于 Post on 2024-11-19 11:11:35 | 只看该作者 Only view this author
大懒猫王浩 发表于 2021-2-23 14:19
主要是现在GPU节点配备的CPU也基本上式非常好的CPU,但是一个GPU往往只用上一个CPU核心。所以单CPU节点和GP ...

你好老师,最近想用到gpu编译,是只能一个gpu用上一个cpu核心吗?不想浪费cpu多核心的算力

2407

帖子

1

威望

5958

eV
积分
8385

Level 6 (一方通行)

20#
发表于 Post on 2024-9-14 20:00:55 | 只看该作者 Only view this author
ddddnight 发表于 2024-4-21 21:50
请问怎么双精度跑vasp,我4090跑vasp比48和的7763CPU跑慢好多

你这句表述就有问题。

多数积分计算需要双精度,这是程序或者部分routine 自己决定的。

不是你怎么设定,就可以让程序跑在双精度模式。

一般而言,消费级的GPU,由于双精度运算性能弱,
对于严重依赖双精度积分计算的程序,
GPU能带来的加速不太明显,或者说,性价比不高。

也许,代码重构了,会有更好的表现。

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

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

229

帖子

0

威望

1279

eV
积分
1508

Level 5 (御坂)

19#
发表于 Post on 2024-4-21 21:50:00 | 只看该作者 Only view this author
请问怎么双精度跑vasp,我4090跑vasp比48和的7763CPU跑慢好多

6

帖子

0

威望

39

eV
积分
45

Level 2 能力者

18#
发表于 Post on 2023-5-9 13:04:23 | 只看该作者 Only view this author
gog 发表于 2022-12-18 08:43
用游戏显卡,跑经典分子动力学非常有优势。游戏卡的双精度计算核心,被砍了又砍,算第一性原理是,用的是 ...

嗯,是的。明显的鸡肋。

356

帖子

0

威望

2255

eV
积分
2611

Level 5 (御坂)

17#
发表于 Post on 2022-12-18 08:43:47 | 只看该作者 Only view this author
houziyy 发表于 2022-12-17 20:49
我也来加入讨论一下。配置是AMD_epyc_7532【32 core, 128 GB内存】+ RTX3080 【10 GB显存】,系统Ubuntu22. ...

用游戏显卡,跑经典分子动力学非常有优势。游戏卡的双精度计算核心,被砍了又砍,算第一性原理是,用的是游戏显卡的鸡肋功能。

6

帖子

0

威望

39

eV
积分
45

Level 2 能力者

16#
发表于 Post on 2022-12-17 20:49:53 | 只看该作者 Only view this author
我也来加入讨论一下。配置是AMD_epyc_7532【32 core, 128 GB内存】+ RTX3080 【10 GB显存】,系统Ubuntu22.10/窗口x11/NVIDIA-SMI 515.86.01
vasp_cpu版本:6.3.2+openmpi_4.1.4+fftw3.39+openblas0.3.20+scalapack-openmpi2.2.1,编译文件makefile.include.gnu_omp
vasp_gpu版本:6.3.2+nvhpc_22.5_(自带cuda11.7和openmpi3.1.5)+fftw3.3.8,编译文件makefile.include.nvhpc_omp

体系1:140Fe+10Si原子,普通aimd(ncore=2, ALGO=veryfast, ENCUT=400, EDIFF=1.E-4,TEBEG=300),都用的vasp_gam,分别跑30步
vasp_cpu | 20 cores | 823s
vasp_gpu | -np 1     | 1171.283s

体系2:Liquid Si - MLFF,vasp官网的机器学习文件,64Si原子 (NCORE=2), NSW=5000, 都用的vasp_gam
vasp_cpu | 6 cores | 801s
vasp_cpu | 10 cores| 436s
vasp_cpu | 20 cores| 377s
vasp_cpu | 30 cores| 335s
vasp_gpu | -np 1    | 1550s/1531/1693 (跑了三次)

总的来说,vasp_gpu版本可能在算大体系的时候会展现出优势,原子数小的时候,确实水平比cpu弱了很多。后面我再试试大体系吧,内存别爆炸就行。64atom的Si用了gpu1.2G显存吧。我再试试更大的体系。

139

帖子

1

威望

1430

eV
积分
1589

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 ...

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

553

帖子

0

威望

3324

eV
积分
3877

Level 5 (御坂)

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

70

帖子

0

威望

1289

eV
积分
1359

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加速了

356

帖子

0

威望

2255

eV
积分
2611

Level 5 (御坂)

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

2407

帖子

1

威望

5958

eV
积分
8385

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

154

帖子

0

威望

639

eV
积分
793

Level 4 (黑子)

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

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

GMT+8, 2025-8-17 00:28 , Processed in 0.779162 second(s), 30 queries , Gzip On.

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