计算化学公社

标题: 简单谈谈GROMACS模拟重复性的问题 [打印本页]

作者
Author:
lyj714    时间: 2022-6-4 14:26
标题: 简单谈谈GROMACS模拟重复性的问题
本身搞分子模拟的都应该清楚,一般的普通模拟最好进行多次重复,以便于确保一次结果并非偶然得到,就比如五次模拟,能够得到基本一致的结果有4次,那也比只做一次的结果要有意义,很多模拟属性都是统计得到的结果。

本身我用GROMACS也很久了,但是实际上我还是要说一说这个软件,由于现在的动力学都已经普遍支持GPU加速,主要是速度快,谈别的原因我觉得都是扯淡。那么我再来说一说GROMACS模拟的重复性问题,说到如何重复,普遍的观点都是每次用不同的随机数种子进行跑就行了,因为只要随机数种子一变,那么粒子初始速度必然改变,这样重复才有意义,这是99%的人都这么认为的。

但是我要说的并非这个,我最终得到的结论是: 只要GROMACS开GPU加速,即便是用相同随机数并且使用同一个tpr跑多次,那得到的结果也不是一样的。反过来说,只要不用GPU,那就可以100%复现(至少在有限模拟时间内)。我估计这个观点可能有很多人不知道,但是事实就是这样,不信你就测试。我也听到过GPU计算的专家说过,这个问题涉及到的主要是GROMACS的gpu代码用了很多原子操作函数,所以即使初始条件完全一样,结果都会不同。我暂时不清楚其他的主流模拟软件是不是都是这种情况。

既然如此,那么我现在就疑惑如果我们用GPU加速跑多次模拟,最后统计得到的结果或者不同模拟之间的误差是不是还有很好的意义,毕竟用相同随机数相同tpr都跑不出完全一样的结果(既然在非常短的模拟时间内),这并不是精度或者舍入误差导致的,完全是gpu部分导致的这个问题。




作者
Author:
sobereva    时间: 2022-6-4 14:55
不用GPU加速,纯粹的CPU并行计算也会有不可精确重复的问题,下文里提到了
数值误差对计算化学结果重现性的影响
http://sobereva.com/88
mdrun专门有个-reprod选项,可用于确保需要精确重复结果的用户两次跑结果相同

关于“一般的普通模拟最好进行多次重复”这个问题,主要看模拟什么问题。比如模拟水盒子密度,只要每次跑的时间够长而令统计误差比较小,每次跑的结果差异就会小到可以忽略。像这样的情况只需跑一次足够长的轨迹即可。
但对于诸如蛋白质模拟中途出现大幅构象变化这种问题的模拟,出现的现象,以及必然会出现的现象的具体出现的时间点,每次跑都可能不同,而且差异可能显著到不可忽略,这就很有必要多次重复来得到统计结果了。
作者
Author:
lyj714    时间: 2022-6-4 15:00
本帖最后由 lyj714 于 2022-6-4 15:04 编辑
sobereva 发表于 2022-6-4 14:55
不用GPU加速,纯粹的CPU并行计算也会有不可精确重复的问题,下文里提到了
数值误差对计算化学结果重现性的 ...

但是这个主要的问题并不是数值误差,我测试过的就直接表明就是gpu部分的问题,纯cpu至少能够在有限时间内完全可重复,但是gpu的就是即使在几个ps或者fs都是不可能完全重复的,这就是为啥我要说这个问题的原因,因为动力学本身计算公式都是固定的,完全在有限精度范围内我倒是认为可以接受。但ps甚至fs级别都不对头有些接受不了
作者
Author:
lonemen    时间: 2022-6-4 17:27
sobereva 发表于 2022-6-4 14:55
不用GPU加速,纯粹的CPU并行计算也会有不可精确重复的问题,下文里提到了
数值误差对计算化学结果重现性的 ...

请教社长,MD重复跑的操作,是要从em,eq,prod等从头再依次来一遍吗?
作者
Author:
enthalpy    时间: 2022-6-4 20:27
除了计算的数值误差外,很多控温控压的方式也会引入随机的东西。所以看开发MD软件的文献,人家为了确认MD数值计算没有问题都是比较NVE系综下模拟得到能量。
作者
Author:
k64_cc    时间: 2022-6-4 21:43
本帖最后由 k64_cc 于 2022-6-4 21:45 编辑
lyj714 发表于 2022-6-4 15:00
但是这个主要的问题并不是数值误差,我测试过的就直接表明就是gpu部分的问题,纯cpu至少能够在有限时间内 ...

讨论GPU的可重复性,需要比较模拟得到的物理性质的统计误差。比较ps/fs长度的轨迹没什么意义,就算是个水,物理性质也得>100 ps才能拿到有统计意义的结果。
作者
Author:
lyj714    时间: 2022-6-4 21:55
本帖最后由 lyj714 于 2022-6-4 22:00 编辑
k64_cc 发表于 2022-6-4 21:43
讨论GPU的可重复性,需要比较模拟得到的物理性质的统计误差。比较ps/fs长度的轨迹没什么意义,就算是个水 ...

我知道属性研究肯定是要长时间统计结果,我这里只不过是单纯讨论的GPU计算问题,并非什么属于研究。我只是单纯想为什么就短时间都不可重复而开的此贴,不然我没必要发帖了。正如你上一楼所述,即使用NVE,关掉一切杂七杂八的东西,全部只用cutoff都无法重复。
作者
Author:
sobereva    时间: 2022-6-5 06:53
lonemen 发表于 2022-6-4 17:27
请教社长,MD重复跑的操作,是要从em,eq,prod等从头再依次来一遍吗?

不用
通常MD用不同的随机初速度就可以
作者
Author:
lonemen    时间: 2022-6-5 12:00
sobereva 发表于 2022-6-5 06:53
不用
通常MD用不同的随机初速度就可以

好的,谢谢社长!请问随机初速度,是在mdp里面设置的吗?
作者
Author:
sobereva    时间: 2022-6-5 12:00
lonemen 发表于 2022-6-5 12:00
好的,谢谢社长!请问随机初速度,是在mdp里面设置的吗?

gen-vel设yes就是,每次grompp时都会随机产生初速度
作者
Author:
lonemen    时间: 2022-6-5 12:04
sobereva 发表于 2022-6-5 12:00
gen-vel设yes就是,每次grompp时都会随机产生初速度

啊啊,社长辛苦了,秒回啊。那请问随机数gen_seed,是否也要跟上一次的模拟不同才行?谢谢!
作者
Author:
sobereva    时间: 2022-6-5 12:30
lonemen 发表于 2022-6-5 12:04
啊啊,社长辛苦了,秒回啊。那请问随机数gen_seed,是否也要跟上一次的模拟不同才行?谢谢!

一般就用默认的-1就行了,是随机数
作者
Author:
lonemen    时间: 2022-6-5 13:12
sobereva 发表于 2022-6-5 12:30
一般就用默认的-1就行了,是随机数

好的,谢谢社长指点。理解更深入了一步
作者
Author:
laoman    时间: 2022-6-5 15:47
很久没测试gromacs的GPU版了,之前是觉得它的GPU加速不如Amber和Desmond,后俩可以只用一个CPU线程,剩下的计算全在GPU上,不过同一个体系跑几次的差异也确实挺大,除非遇到比较稳定的体系……
作者
Author:
HZW    时间: 2022-6-5 23:20
laoman 发表于 2022-6-5 15:47
很久没测试gromacs的GPU版了,之前是觉得它的GPU加速不如Amber和Desmond,后俩可以只用一个CPU线程,剩下的 ...

openMM也是,针对GPU服务器默认只能用单核CPU,其它计算全放在GPU上。之前我还特意问了peastman教授,给我的回复是:关于环境变量中设置CPU线程的是针对CPU服务器的。
作者
Author:
BobXu    时间: 2023-10-30 19:31
sob老师说的太好了,我偶然一个MD的结果特别符合我预期,然后我用产物生成前的结果,重复一遍。然而,始终跑不出来那一次跑的结果,后面重复了好几次都没跑出来漂亮的结果




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