计算化学公社

标题: lammps GPU加速4090不如纯cpu8核 [打印本页]

作者
Author:
docshen777    时间: 2024-6-27 13:38
标题: lammps GPU加速4090不如纯cpu8核
我按照http://bbs.keinsci.com/thread-36559-1-1.html编译了GPU版本的lammps,编译过程无报错,使用无报错,但速度非常慢,10000原子的reaxff体系2秒走不了一步,而我纯cpu8核都能更快。

显卡4090,按理说加速应该很明显,请问这会是什么问题呢。

作者
Author:
BangbooCat    时间: 2024-6-30 15:58
使用kokkos GPU加速的话只能是双精度运行,检查一下你的cpu运行是否是双精度的
作者
Author:
docshen777    时间: 2024-7-1 08:21
BangbooCat 发表于 2024-6-30 15:58
使用kokkos GPU加速的话只能是双精度运行,检查一下你的cpu运行是否是双精度的

请问如何检查这一步?
作者
Author:
低调的板凳    时间: 2024-7-1 10:52
docshen777 发表于 2024-7-1 08:21
请问如何检查这一步?

运行时实际nvidia-smi显示的占用是什么情况的
作者
Author:
docshen777    时间: 2024-7-1 18:40
低调的板凳 发表于 2024-7-1 10:52
运行时实际nvidia-smi显示的占用是什么情况的

功耗70W/450W,占用率20-30%,下面进程有一个lmp,类型是C
作者
Author:
Graphite    时间: 2024-7-2 21:58
reaxff用4090是效果不好,但不至于这么慢
1、是否使用了多进程,导致互抢资源
2、neigh搜索接邻列表的频率是否过于频繁、neigh的延展半径和control file中bond搜索半径是否太长
3、制作reax/c/bonds、reax/c/species的输出频次是否过于频繁(特别是它们有时还会覆盖neigh频率的设置)
4、体系的密度是否很大
我没用过4090跑reaxff,用tesla V100跑1-1.5 g/ml的有机物,一般每秒>80万原子步是有的,3080的速度远不及tesla V100,但也是有每秒小几十万原子步。
作者
Author:
docshen777    时间: 2024-7-3 09:35
Graphite 发表于 2024-7-2 21:58
reaxff用4090是效果不好,但不至于这么慢
1、是否使用了多进程,导致互抢资源
2、neigh搜索接邻列表的频 ...

谢谢老师的回复。关于您的意见,我有一些疑问:
1. 多进程是指谁的多进程,mpi还是threads
2. 的确很频繁,为了精度设置的每一步
3. 由于第二点,应该不是覆盖了的问题
4. 密度大概是1.7g/cm3的样子。

我把输入文件上传了,能否劳烦您帮我跑一下,给我一个参照,谢谢您。

作者
Author:
Graphite    时间: 2024-7-3 15:14
本帖最后由 Graphite 于 2024-7-3 15:59 编辑
docshen777 发表于 2024-7-3 09:35
谢谢老师的回复。关于您的意见,我有一些疑问:
1. 多进程是指谁的多进程,mpi还是threads
2. 的确很频 ...

现版本LAMMPS用reaxff最省事方案是单核单线程(LAMMPS和kokkos自身机制问题,不多讨论),一个程序最小循环中,主要完成以下3种任务:
1、纯CPU的neighbor search,频率高了很耗时
2、GPU为主的受力计算、动力学走步
3、纯CPU的各类文件输出、reax/c/bonds、reax/c/species,一般耗时

由于单核单线程情况下CPU性能孱弱,性能调优的重点在于:
1、neighbor search频率稍慢,半径(其实是相对于control file里面的键级计算半径的延展搬家)稍短——这里我们简称neigh设置激进,反之为保守。激进在于”原子对周围环境感知降低”。
2、任务1和任务3的频率尽可能同步,比如N步一次neighbor search,2N步一次reax/c/species,10N步一次文件输出。

关于精度和反应性问题:
1、主要影响因素是时间积分步长,通俗的说步子太大了,容易瞬时不平衡、lose atom
2、neigh性能激进时,会有一定影响,如果neigh频率大于100步,可能造成”原子对周围环境感知不足“,抑制反应性,影响精度;但如果小于10步以下、或半径过长,也没什么必要。

我修改了下in文件,在autodl租的v100上跑了5 ps,用了三分半钟,大概47步/秒,2 ns/day,考虑到密度比较高,速度还是可以的。运行指令是lmp -in test_1.in -k on g 1 -sf kk -pk kokkos neigh half newton on,用的单核单进程单线程,GPU负载75%左右。

根本问题是时间积分步长到1.0 fs,太长了,迫使必须用非常保守的策略做neigh以避免lose atom。然而,即使1.0 fs勉勉强强能跑,得到的结果也会比较”破碎“、精度差——步子太大了。
修改了时间积分步长为0.5 fs——因为温度不高所以先设了0.5 fs(其实也不是很精细,有要求或温度高得下到0.25 fs以下)
修改了neigh半径到2.0,neigh频率到100——步长降下来、温度不高,neigh设置可以更加激进。
修改了各类输出频率到100,reax/c/species为100 5 500。

当然,这个只是性能调优,neigh相关的设置毕竟涉及到”原子对周围环境的感知“,和reaxff的反应性、模拟的结果有一定关系,并且和时间步长相互影响(时间步长稍短时,可以稍激进)所以还需要自己权衡。
neigh频率10-100步是一个不错的区间,太快了CPU调用太频繁。neigh半径方面,只要模拟不lose atom,稍微有点余量即可,neigh频率越快,半径可以越短。control file里面的bond半径一般默认值足够。
文件输出频率看需求权衡,主要是bonds.out、lammpstrj之类文本文件体积容易动辄几个G。

简而言之,上中下三策:
1、激进策略:温度不高/本身反应性不强/模拟已经大差不差开始堆时间,步长0.25-0.5,neigh频率50-100,半径1.5-2.0
2、温和策略:步长0.2-0.25,neigh频率20-50,半径2.0-2.5
3、保守策略:温度很高/反应性强/不平衡性强/初始结构不太好稍微跑会儿放松下,步长0.1,neigh频率10、半径>=3.0
如果保守策略也跑不了,那90%概率是初始结构不好、力场不适配、条件偏极端(>3000K、外力冲击),一般来说3000 K或10 km/s MSST冲击使含能材料爆炸,保守策略也是能正确跑的。

(, 下载次数 Times of downloads: 95)






作者
Author:
docshen777    时间: 2024-7-3 19:00
Graphite 发表于 2024-7-3 15:14
现版本LAMMPS用reaxff最省事方案是单核单线程(LAMMPS和kokkos自身机制问题,不多讨论),一个程序最小循环 ...

感谢大佬,仔细阅读了您的回复,学到了很多。受教了!

感谢您百忙中帮忙测试调优!
作者
Author:
docshen777    时间: 2024-7-3 19:14
Graphite 发表于 2024-7-3 15:14
现版本LAMMPS用reaxff最省事方案是单核单线程(LAMMPS和kokkos自身机制问题,不多讨论),一个程序最小循环 ...

大佬您好!抱歉再次打扰。我按照温和策略修改了输入文件。但步长是0.5fs。Neigh半径2,频率50。

运行了一下,4090显卡wsl2-ubuntu20.04+lammps-Aug2023

运行指令为lmp -in test_1.in -k on g 1 -sf kk -pk kokkos neigh half newton on

仍然非常慢,20步需要数分钟的时间,监控nvidia-smi的结果如附件的图。

GPU的占用率极低,能耗也上不去。这应该不是代码的原因吧?但我编译lammps+kokkos包的过程和运行过程均未报错。这是为什么呢?

作者
Author:
Graphite    时间: 2024-7-3 20:30
docshen777 发表于 2024-7-3 19:14
大佬您好!抱歉再次打扰。我按照温和策略修改了输入文件。但步长是0.5fs。Neigh半径2,频率50。

运行 ...

不排除安装方式、资源调用、WSL环境配置的问题,你要不先上autodl租个卡折腾下?
作者
Author:
docshen777    时间: 2024-7-4 11:00
Graphite 发表于 2024-7-3 20:30
不排除安装方式、资源调用、WSL环境配置的问题,你要不先上autodl租个卡折腾下?

那我装个虚拟机试试,组里的机子,不方便装双系统
作者
Author:
c00jsw00    时间: 2024-8-7 11:31
兄臺 我記得我好幾年前有試過https://github.com/msu-sparta/PuReMD
這一個reaxFF MD code 效能還不錯
作者
Author:
Huschein    时间: 2024-8-8 02:08
cool 虽然我不用lammps,不过我可以从AMBER的角度给你一些建议

我觉得也是楼上说的问题,有时候amber的PMEMD.CUDA性能会比PMEMD.CUDA.MPI性能要更高,主要就是GPU算的快,CPU在MPI通信中消耗了不必要的时间,造成GPU可能在等CPU的问题,所以你nvidia-smi的时候看起来GPU负载不高。所以我觉得你的这个case可能和CPU的任务相关比较大
作者
Author:
梁慷    时间: 6 day ago
docshen777 发表于 2024-7-4 11:00
那我装个虚拟机试试,组里的机子,不方便装双系统

兄弟你最后怎么解决这个问题的呀,我现在安装了GPU版本lammps,速度也是比CPU的慢了好多倍。测试了好多次一直解决不了

作者
Author:
熊啊熊    时间: 6 day ago
梁慷 发表于 2026-2-10 13:34
兄弟你最后怎么解决这个问题的呀,我现在安装了GPU版本lammps,速度也是比CPU的慢了好多倍。测试了好多次 ...

要跑reaxff这样的吃双精度的任务还是推荐V100这样的计算卡,消费级显卡的双精度算力太感人,适合单精度任务特别是跑gromacs。
作者
Author:
梁慷    时间: 6 day ago
熊啊熊 发表于 2026-2-10 14:14
要跑reaxff这样的吃双精度的任务还是推荐V100这样的计算卡,消费级显卡的双精度算力太感人,适合单精度任 ...

我是编译的GPU-lammps跑聚合物体系的分子动力学模拟,速度40分钟才跑1000步。下面是我的指令:mpirun -np 2 $LAMMPS_DIR/bin/lmp_mpi -sf gpu -pk gpu 2 neigh yes -in in.lammps
我感觉好像是编译的问题,但是都编译三次了,也没报错,要是还不行,我就用CPU得了,感觉GPU太折腾了。





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