计算化学公社

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

[GROMACS] 请教以GPU跑MD时,thread无法pin到CPU core上(提示thread pinning disabled)的问题

[复制链接 Copy URL]

18

帖子

0

威望

103

eV
积分
121

Level 2 能力者

本帖最后由 papercup 于 2023-6-4 23:11 编辑

请教各位老师们和各位高手们,如果运行GROMACS以GPU跑MD时,出现以下提示,是否有必要修改,使thread能pin到CPU core上(来进一步提速)呢?
(目前GPU利用率约为70%~80%)
如果有必要,应当如何做出修改呢?

例如,我通过下列命令运行GROMACS跑PROD阶段MD:
  1. Command line:

  2. gmx mdrun -ntmpi 1 -pin on -v -stepout 1000 -s prod.tpr -deffnm prod -c prod.pdb -nb gpu -pme gpu -pmefft gpu -bonded gpu -update gpu
复制代码

程序会出现下述提示:
  1. Using 1 MPI thread

  2. Using 20 OpenMP threads

  3. NOTE: OS CPU limit is lower than logical cpu count, thread pinning disabled.

  4. starting mdrun 'Protein in water'
复制代码

我谷歌了这句话(NOTE: OS CPU limit is lower than logical cpu count, thread pinning disabled.),并没有搜到讨论,于是只好去看看GROMACS提示这句话的源代码:
https://github.com/gromacs/groma ... adaffinity.cpp#L183

注释里写道:
  1. // Don't pin on things that look like containers with shared resources

  2. // where we are limited to only using a fraction of them
复制代码

好像大概是在说,GROMACS发现我好像在一个container里,于是就不把thread给pin到cpu core上了。
以及代码中的判断条件是:hwMaxThreads小于hwTop.machine().logicalProcessors.size()。

我确实是在一个GPU服务器的container里跑MD的,那我是否还有必要把thread给pin到cpu core上呢?如果有必要,应当如何操作呢?
看着代码判断条件的大意,我尝试修改了环境变量:
  1. OMP_THREAD_LIMIT="200"
  2. OMP_NUM_THREADS="200"
复制代码

但并无效果,新的程序提示如下,可以看到因为环境变量的生效,thread数量增大到了128,可是还是没能通过pin的判断条件。
  1. 2023-06-04 22:02:13.300 Using 1 MPI thread

  2. 2023-06-04 22:02:13.300 Using 128 OpenMP threads

  3. 2023-06-04 22:02:13.300 WARNING: Oversubscribing the recommended max load of 20 logical CPUs with 128 threads.

  4. 2023-06-04 22:02:13.300 This will cause considerable performance loss.

  5. 2023-06-04 22:02:13.300 NOTE: OS CPU limit is lower than logical cpu count, thread pinning disabled.
复制代码

虽然现在GPU利用率看上去还可以(约70%~80%),但我还是想把thread给pin到CPU core上,看看是否能进一步提速。
请教各位老师们这是否有必要呢?如有必要又应如何操作呢?



859

帖子

16

威望

5088

eV
积分
6267

Level 6 (一方通行)

小屁孩

2#
发表于 Post on 2023-6-4 23:44:37 | 只看该作者 Only view this author
首先需要在母机上进行设置,让容器可以使用CPU affinity,但我没具体研究过此事。可以提供一个退而求其次的方案:如果接受比较慢的单模拟性能,可以在一块GPU上跑2个模拟来榨干GPU。

另外,发表一点暴论。如果可以不使用容器/虚拟化环境,就不要使用。虚拟化、超融合这些技术对于互联网数据中心应用来说很好用,但并不适合HPC。
- 向着虚无前进 -

2407

帖子

1

威望

5958

eV
积分
8385

Level 6 (一方通行)

3#
发表于 Post on 2023-6-5 07:18:17 | 只看该作者 Only view this author
Entropy.S.I 发表于 2023-6-4 23:44
首先需要在母机上进行设置,让容器可以使用CPU affinity,但我没具体研究过此事。可以提供一个退而求其次的 ...

"另外,发表一点暴论。如果可以不使用容器/虚拟化环境,就不要使用。虚拟化、超融合这些技术对于互联网数据中心应用来说很好用,但并不适合HPC。"

当心华为的openEuler HPC-sig来喷您...
High-Performance Computing for You
为您专属定制的高性能计算解决方案

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

18

帖子

0

威望

103

eV
积分
121

Level 2 能力者

4#
 楼主 Author| 发表于 Post on 2023-6-5 23:49:57 | 只看该作者 Only view this author
Entropy.S.I 发表于 2023-6-4 23:44
首先需要在母机上进行设置,让容器可以使用CPU affinity,但我没具体研究过此事。可以提供一个退而求其次的 ...

非常感谢老师的解答,您的回复对我的帮助很大,原来这是涉及母机设置的问题。

您提到的退而求其次方案,其实蛮适合我当前的问题,因为我正好也会对同一个体系取不同seed重复独立跑多次。
后续我去测试一下,看在我的环境中能否进一步提升GPU利用率。

好奇请教一下,如果我能使用的CPU资源无法改变,仅仅只是同时跑2个MD,也能提升GPU利用率吗?
因为我理解GPU利用率70%~80%还有富余,说明此时(不考虑IO的话)的瓶颈应当是CPU,在已经跑满的CPU上再多运行1个MD,也能改善GPU利用率吗?

859

帖子

16

威望

5088

eV
积分
6267

Level 6 (一方通行)

小屁孩

5#
发表于 Post on 2023-6-6 02:04:20 | 只看该作者 Only view this author
papercup 发表于 2023-6-5 23:49
非常感谢老师的解答,您的回复对我的帮助很大,原来这是涉及母机设置的问题。

您提到的退而求其次方案 ...

GPU加速下,主要瓶颈是CPU单核性能和CPU-GPU通信,CPU多核性能不重要,核用多了很快就出现边际效应了,阅读http://bbs.keinsci.com/thread-33296-1-1.html
- 向着虚无前进 -

18

帖子

0

威望

103

eV
积分
121

Level 2 能力者

6#
 楼主 Author| 发表于 Post on 2023-6-7 15:11:55 | 只看该作者 Only view this author
Entropy.S.I 发表于 2023-6-6 02:04
GPU加速下,主要瓶颈是CPU单核性能和CPU-GPU通信,CPU多核性能不重要,核用多了很快就出现边际效应了,阅 ...

非常感谢老师您的耐心解答!我这就学习一下链接文章,并按文章要点(关掉"-bonded gpu"等)把我的MD protocol再调优一下。

本版积分规则 Credits rule

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

GMT+8, 2025-8-16 19:01 , Processed in 0.153301 second(s), 20 queries , Gzip On.

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