计算化学公社

标题: 请教以GPU跑MD时,thread无法pin到CPU core上(提示thread pinning disabled)的问题 [打印本页]

作者
Author:
papercup    时间: 2023-6-4 23:02
标题: 请教以GPU跑MD时,thread无法pin到CPU core上(提示thread pinning disabled)的问题
本帖最后由 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上,看看是否能进一步提速。
请教各位老师们这是否有必要呢?如有必要又应如何操作呢?




作者
Author:
Entropy.S.I    时间: 2023-6-4 23:44
首先需要在母机上进行设置,让容器可以使用CPU affinity,但我没具体研究过此事。可以提供一个退而求其次的方案:如果接受比较慢的单模拟性能,可以在一块GPU上跑2个模拟来榨干GPU。

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

作者
Author:
abin    时间: 2023-6-5 07:18
Entropy.S.I 发表于 2023-6-4 23:44
首先需要在母机上进行设置,让容器可以使用CPU affinity,但我没具体研究过此事。可以提供一个退而求其次的 ...

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

当心华为的openEuler HPC-sig来喷您...
作者
Author:
papercup    时间: 2023-6-5 23:49
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利用率吗?

作者
Author:
Entropy.S.I    时间: 2023-6-6 02:04
papercup 发表于 2023-6-5 23:49
非常感谢老师的解答,您的回复对我的帮助很大,原来这是涉及母机设置的问题。

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

GPU加速下,主要瓶颈是CPU单核性能和CPU-GPU通信,CPU多核性能不重要,核用多了很快就出现边际效应了,阅读http://bbs.keinsci.com/thread-33296-1-1.html
作者
Author:
papercup    时间: 2023-6-7 15:11
Entropy.S.I 发表于 2023-6-6 02:04
GPU加速下,主要瓶颈是CPU单核性能和CPU-GPU通信,CPU多核性能不重要,核用多了很快就出现边际效应了,阅 ...

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





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