计算化学公社

标题: [已解决]Gromacs单机GPU双卡占用率低下求助 [打印本页]

作者
Author:
snljty    时间: 2021-9-29 17:15
标题: [已解决]Gromacs单机GPU双卡占用率低下求助
本帖最后由 snljty 于 2021-9-30 14:47 编辑

【更新:已解决。解决方案写在最后了】

配置是双路Intel Xeon Silver 4214R,单路12核24线程,内存8*16GB RECC DDR4四通道,主板X11DAI-N。配NVidia GeForce RTX 3080Ti双卡。操作系统CentOS 7.9,CUDA版本11.4。GCC 5.4.0编译。FFTW是自己编译的3.3.8。
现在同时跑两个任务,各用一块GPU和12核CPU,提交命令如下:
  1. gmx mdrun -pin on -ntmpi 1 -ntomp 12 -bonded cpu -nb gpu -pme gpu -pmefft gpu -gpu_id 0
  2. gmx mdrun -pin on -ntmpi 1 -ntomp 12 -bonded cpu -nb gpu -pme gpu -pmefft gpu -gpu_id 1
复制代码
gmx版本为2019.3,带AVX2编译的fftw和gmx。测试体系为512个乙醇的盒子。
发现占用率极为低下,两张卡都只有10+%的占用率,而且每个任务的CPU占用率也只有600%而不是1200%。
(, 下载次数 Times of downloads: 50)
(, 下载次数 Times of downloads: 59)
(, 下载次数 Times of downloads: 55)
单卡+12核CPU跑一个任务时候,GPU占用率在33%左右,CPU占用率是1200%。
请问大家有什么建议。

更新:感谢大家的建议,已经解决。至少这个版本的gmx内核绑定默认是从0开始。所以如果按我这样提交,两个任务的CPU部分都被塞到同一块CPU了,然后gmx(也可能是别的层面?)发现可用物理核心数不足,就自动把两个任务都降到了半个物理核心数来跑。
正确使用方法是:
  1. gmx mdrun -pin on -pinoffset 0 -ntmpi 1 -ntomp 12 -gpu_id 0 -bonded cpu -nb gpu -pme gpu
  2. gmx mdrun -pin on -pinoffset 24 -ntmpi 1 -ntomp 12 -gpu_id 1 -bonded cpu -nb gpu -pme gpu
复制代码


作者
Author:
abin    时间: 2021-9-29 19:52
gmx 2019.3 编译的时候有没有修改?
修改了啥?
编译用的NVCC啥版本?
作者
Author:
snljty    时间: 2021-9-29 20:06
abin 发表于 2021-9-29 19:52
gmx 2019.3 编译的时候有没有修改?
修改了啥?
编译用的NVCC啥版本?

改了一点,删掉了compute_30的部分,用的http://bbs.keinsci.com/thread-20197-1-1.html里12楼的脚本。CUDA是11.4。抱歉忘了提CUDA版本了。CentOS 7.9
作者
Author:
Entropy.S.I    时间: 2021-9-29 20:54
CPU太烂。2张3080Ti用2颗24核或许能发挥出大部分性能
作者
Author:
snljty    时间: 2021-9-29 21:05
Entropy.S.I 发表于 2021-9-29 20:54
CPU太烂。2张3080Ti用2颗24核或许能发挥出大部分性能

但是我测单卡,分配24核CPU不比12核快,甚至还慢了一点。
作者
Author:
lyj714    时间: 2021-9-29 21:53
本帖最后由 lyj714 于 2021-9-29 22:01 编辑

512个乙醇分子。。。你这体系如果太小的话,GPU基本上没利用率的。跑测试起码10W+的原子试试看
建议以这些测试为基准:https://www.mpibpc.mpg.de/grubmueller/bench
一般测试https://www.mpibpc.mpg.de/15101317/benchMEM.zip就可以

Free energy benchmarks这一部分测试做了没用,gmx2019还不支持FEP的PME部分计算放到GPU上。


作者
Author:
Entropy.S.I    时间: 2021-9-29 22:10
snljty 发表于 2021-9-29 21:05
但是我测单卡,分配24核CPU不比12核快,甚至还慢了一点。

刚没看到512乙醇分子…确实是原子数太少了。3080Ti怎么也得拿20w原子来测吧。我之前测试过2*RTX4000 & 2*5220R,20w原子能到50ns/d,3080Ti由于家境贫寒还没用上,估计能到100吧
作者
Author:
snljty    时间: 2021-9-29 23:14
lyj714 发表于 2021-9-29 21:53
512个乙醇分子。。。你这体系如果太小的话,GPU基本上没利用率的。跑测试起码10W+的原子试试看
建议以这些 ...

谢谢您,我明天去测。不过您看单CPU单卡跑效率还凑合,双CPU双卡分别跑两个任务效率就极低,这个现象怎么解释呢?谢谢
作者
Author:
snljty    时间: 2021-9-29 23:14
Entropy.S.I 发表于 2021-9-29 22:10
刚没看到512乙醇分子…确实是原子数太少了。3080Ti怎么也得拿20w原子来测吧。我之前测试过2*RTX4000 & 2* ...

好的,我用大体系测试一下。
作者
Author:
k64_cc    时间: 2021-9-30 08:42
snljty 发表于 2021-9-29 23:14
谢谢您,我明天去测。不过您看单CPU单卡跑效率还凑合,双CPU双卡分别跑两个任务效率就极低,这个现象怎么 ...

CPU缓存带宽。仅用12核带宽比24核全跑要大。
作者
Author:
snljty    时间: 2021-9-30 09:39
k64_cc 发表于 2021-9-30 08:42
CPU缓存带宽。仅用12核带宽比24核全跑要大。

那请问有什么推荐替换的CPU么?谢谢
作者
Author:
snljty    时间: 2021-9-30 11:08
lyj714 发表于 2021-9-29 21:53
512个乙醇分子。。。你这体系如果太小的话,GPU基本上没利用率的。跑测试起码10W+的原子试试看
建议以这些 ...

您好,这个benchMEM好像时间太短,GPU还没调到最优性能就跑完了。我把步数调大了20倍跑的,36核2699 v3的CPU节点跑下来是40 ns/day,4214R单CPU12核+一块3080 Ti是159 ns/day。GPU占用率在59%左右,CPU占用率1200%。双卡各用上面的设置跑相同任务时,每个任务的CPU占用率马上掉到600%,GPU占用率也掉到20%以下。
作者
Author:
喵星大佬    时间: 2021-9-30 11:19
snljty 发表于 2021-9-30 11:08
您好,这个benchMEM好像时间太短,GPU还没调到最优性能就跑完了。我把步数调大了20倍跑的,36核2699 v3的 ...

htop看下每个进程用的cpu编号是不是同一颗上的
作者
Author:
lyj714    时间: 2021-9-30 11:33
snljty 发表于 2021-9-30 11:08
您好,这个benchMEM好像时间太短,GPU还没调到最优性能就跑完了。我把步数调大了20倍跑的,36核2699 v3的 ...

gmx convert-tpr可以设置时间,extend和until选项
还有你说的那个显示的cpu占用率,你要搞清楚那个值是什么意思哦,我估计和超线程无关,你本身物理核心就只有12个,所以-ntomp指定的就是物理核心,所以才导致一个任务设置的12就能用12个,两个任务就算你分别设置了12,但是每一个任务还是只分到了6个,总共12物理核,这个也和你设置了-pin on有关。
至于gpu利用率,原因也可能很多,最主要的原因我觉得还是你用的gmx 2019,该版本没有对这一类gpu和cuda相关的源码进行优化,可能的话你安装最新2021.3版本再做测试对比
作者
Author:
snljty    时间: 2021-9-30 11:57
本帖最后由 snljty 于 2021-9-30 12:02 编辑
lyj714 发表于 2021-9-30 11:33
gmx convert-tpr可以设置时间,extend和until选项
还有你说的那个显示的cpu占用率,你要搞清楚那个值是 ...

我是双路,共24核48线程。-ntomp 12应该是各占12核吧。顺便我确实是用的convert-tpr修改nsteps转换的。谢谢您!
作者
Author:
snljty    时间: 2021-9-30 11:58
lyj714 发表于 2021-9-30 11:33
gmx convert-tpr可以设置时间,extend和until选项
还有你说的那个显示的cpu占用率,你要搞清楚那个值是 ...

2021和2020给我整怕了...好像bug太多,编译还麻烦一点...
作者
Author:
lyj714    时间: 2021-9-30 12:00
本帖最后由 lyj714 于 2021-9-30 12:03 编辑
snljty 发表于 2021-9-30 11:58
2021和2020给我整怕了...好像bug太多,编译还麻烦一点...

2020系列我称它为bug系列,这个不必考虑,2021.3报道的bug比较少,可以测试。编译好像没啥复杂的,你这个gcc版本也不低,直接编译就好了。编译选项gpu只不过换成了-DGMX_GPU=CUDA罢了。
作者
Author:
lyj714    时间: 2021-9-30 12:02
snljty 发表于 2021-9-30 11:57
我是双路,共24核48线程。-ntomp 12应该是各占12核吧。

哦,那估计你两个任务跑到一个cpu上去了。
作者
Author:
snljty    时间: 2021-9-30 13:10
本帖最后由 snljty 于 2021-9-30 14:48 编辑
lyj714 发表于 2021-9-30 12:02
哦,那估计你两个任务跑到一个cpu上去了。
更新:已解决,谢谢您的帮助。


是这样的,发现确实两个任务都被从12核降低到6核然后塞到同一块CPU了。刚新发现把-pin on改成-pin off后问题消失,CPU任务变成两个占用1200%的任务,总占用率50%(开了HT)。GPU双卡各自占用率都能达到58。但是现在没有了内核绑定,线程在虚拟核之间不停切换,不知道会不会造成明显性能影响。请问下一步我应该考虑换更新版本gmx么?2021是之前卢老师说感觉bug比2020还多,2020是我自己有心理阴影...
更新:忘了还有-pinoffset这个选项,我试一下

作者
Author:
snljty    时间: 2021-9-30 13:12
本帖最后由 snljty 于 2021-9-30 14:48 编辑
喵星大佬 发表于 2021-9-30 11:19
htop看下每个进程用的cpu编号是不是同一颗上的
更新:已解决,谢谢您的帮助。


发现确实是两个任务都被从12核降低到6核然后塞到同一个CPU上了。把两个任务的-pin on都改成-pin off后CPU和GPU占用率都正常了。不知道下一步我应该怎么考虑?
更新:忘了还有-pinoffset这个选项,我试一下






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