计算化学公社

标题: 记一次Lammps上GPU加速的折腾 [打印本页]

作者
Author:
Graphite    时间: 2020-7-31 17:18
标题: 记一次Lammps上GPU加速的折腾
本帖最后由 Graphite 于 2025-9-28 21:47 编辑

楼主之前用MD不是很多,一直在用WSL甚至Powershell跑纯CPU的ORCA、Lammps等作业。
最近课题需要用到很多分子模拟的计算,遂决定让我的i5-9300H + GTX 1660Ti笔记本实现GPU加速。
看了一些文献和文章报道的加速效果,以我的一个7000原子的NVT电解质溶液盒子为例,原先WSL 4核约150timestep/s,64核超算节点约1800timestep/s。
大量计算围绕着L-J势和静电作用能,都是GPU占便宜的计算,估算实现加速后达到1200+timestep计算能力,考虑到便利性和成本,期望体验可以和32-64核节点相提并论。

然后就开始折腾。
1、Lammps for Win / 原生Windows驱动、CUDA:不可行,因为Lammps for Win是用跨平台编译器在Linux电脑上编译的,虽然加载了所有包,但gpu包所用的参数是默认的sm_35,对应Kepler架构的一些显卡。网上看到确实有人用Kepler显卡(GTX 770)成功。
2、Lammps for Linux / WSL2 / Win10体验版 / CUDA for WSL2 : 不可行,网上有人成功了,但是我更新了一整天,无论是自动更新还是升级工具,都没能把我的1803版Win10升到2004版,更别提什么WSL2新功能了。而且看新闻说WSL2也有很多坑,故作罢。
3、Lammps for Linux / Deepin第二系统 /  Linux显卡驱动、CUDA:除了Deepin20刚开始要修补各种驱动(网卡、鼠标、蓝牙、显卡),气得我砸键盘以外,其他都正常。注意装最新N卡驱动时莫让他覆盖原有xorg.conf。

结论:新东西虽好,但总是坑多(指WSL2和Deepin20)。

最后是效果对比,数据来自我的电解质溶液盒子,体系特殊,仅供参考。单位timesteps/s,均匀体系+fix balance,多线程负载均衡。

i5-9300H/WSL/mpi -np 4:150
i5-9300H/WSL/mpi -np 8:230
E5v3/Linux/mpi -np 64:1800

i5-9300H/Linux/mpi -np 4 : 250
i5-9300H/Linux/mpi -np 8:275

i5-9300H+GTX 1660Ti/Linux/mpi -np 1 + GPU:1600
i5-9300H+GTX 1660Ti/Linux/mpi -np 2 + GPU:1480
i5-9300H+GTX 1660Ti/Linux/mpi -np 4 + GPU:1290
i5-9300H+GTX 1660Ti/Linux/mpi -np 8 + GPU:700

难道让我说单核天下第一?

五年后更新:

1、WSL2已经非常好用。笔记本没必要刷Linux桌面了。
2、已经解决,必须先正确安装对应版本的openmpi和编译lammps,在pair_style、bond_style等和整体计算负载合适的情况下,是可以做到多核+多卡发挥效能的。

作者
Author:
liuyuje714    时间: 2020-7-31 17:33
可否提供一下输入文件,我想测试一下WSL2。谢谢
作者
Author:
Graphite    时间: 2020-7-31 17:39
liuyuje714 发表于 2020-7-31 17:33
可否提供一下输入文件,我想测试一下WSL2。谢谢

附件

作者
Author:
fhh2626    时间: 2020-7-31 21:52
核数越多越慢是非常正常的现象,现在MD引擎中绝大部分计算都是GPU完成,用多个CPU核心大多数时候的作用就是增加通讯消耗
作者
Author:
风清行    时间: 2020-10-11 10:00
我跟楼主结论一样

作者
Author:
李正义    时间: 2020-10-27 15:59
想请问楼主 这个执行命令是怎么输入的? mpirun -np 4 lmp_mpi.exe  < in.file吗?还是怎样?
作者
Author:
啦啦黑还黑    时间: 2020-10-27 17:11
本帖最后由 啦啦黑还黑 于 2020-10-27 17:15 编辑

直接mpirun -np  4 好像不太行,你看一下是不是这样GPU也并行了,cpu和gpu上都会分4个任务并行,速度会减慢。
要设置1个gpu任务调用多个CPU线程吧?
mpirun -np 4 lmp_machine -sf gpu -pk gpu 1 -in in.script


作者
Author:
Graphite    时间: 2020-10-27 19:21
啦啦黑还黑 发表于 2020-10-27 17:11
直接mpirun -np  4 好像不太行,你看一下是不是这样GPU也并行了,cpu和gpu上都会分4个任务并行,速度会减慢 ...

就是这个指令,我正文没说清楚,不好意思。
使用4核时,NVIDIA工具显示GPU上也是4个任务。但速度就是不如单核快
lammps算完后显示的时间报告中,正常应是pair类型计算最耗时,但4核时,显示comm损耗很大。
作者
Author:
WB1040720479    时间: 2020-11-9 21:27
请问一下,我能用mpiexec -localonly 12 lmp_mpi -in in.meamc.lmp -sf gpu -pk gpu 1这个命令是不是就代表我的GPU安装成了。可是我看网上教程https://blog.csdn.net/qq_42110789/article/details/106337848 在输出中有显示你的GPU型号,请问这是咋回事呀?
作者
Author:
大懒猫王浩    时间: 2021-4-25 15:23
本帖最后由 大懒猫王浩 于 2021-4-25 15:25 编辑

发表一下我的测试结果,CPU核为6132   显卡为GPU V100
首先是lammps自带的melt例子,4000原子,lj/cut/gpu
==> debug_10mpi_1GPU.txt <==
Total wall time: 0:18:06
==> debug_10mpi_2GPU.txt <==
Total wall time: 0:09:10
==> debug_10mpi_noGPU.txt <==
Total wall time: 0:04:17
==> debug_1mpi_1GPU.txt <==
Total wall time: 0:01:59
==> debug_2mpi_1GPU.txt <==
Total wall time: 0:05:08
==> debug_2mpi_2GPU.txt <==
Total wall time: 0:02:06
==> debug_3mpi_1GPU.txt <==
Total wall time: 0:06:36
==> debug_4mpi_2GPU.txt <==
Total wall time: 0:04:48
单核单GPU反而是最快的,

后面有群友希望测试更大体系。。就换了eam,构建了10万多个原子的Cu体系。测试结果如下。
==> gpu2l_10mpi_1GPU/slurm-9003096.out <==
Total wall time: 0:04:55
==> gpu2l_10mpi_2GPU/slurm-9003097.out <==
Total wall time: 0:02:41
==> gpu2l_1mpi_1GPU/slurm-9003098.out <==
Total wall time: 0:05:22
==> gpu2l_20mpi_0GPU/slurm-9003074.out <==
Total wall time: 0:09:18
==> gpu2l_20mpi_1GPU/slurm-9003099.out <==
Total wall time: 0:08:08
==> gpu2l_20mpi_2GPU/slurm-9003100.out <==
Total wall time: 0:04:22
==> gpu2l_2mpi_1GPU/slurm-9003101.out <==
Total wall time: 0:03:54
==> gpu2l_2mpi_2GPU/slurm-9003102.out <==
Total wall time: 0:02:35
==> gpu2l_3mpi_1GPU/slurm-9003129.out <==
Total wall time: 0:03:42
==> gpu2l_4mpi_1GPU/slurm-9003128.out <==
Total wall time: 0:03:36
==> gpu2l_4mpi_2GPU/slurm-9003103.out <==
Total wall time: 0:02:19
==> gpu2l_5mpi_1GPU/slurm-9003126.out <==
Total wall time: 0:04:16
感觉也就几倍的加速,,,并没有让我十分惊艳的样子,适合跑核少GPU加速的任务。。。

作者
Author:
Ruanruan    时间: 2021-6-8 11:21
请问我使用GPU加速会报错
ERROR: Could not find/initialize a specified accelerator device (src/GPU/gpu_extra.h:35)
Last command: package gpu 1
网上也没找到解决方案
作者
Author:
Graphite    时间: 2021-6-21 09:39
Ruanruan 发表于 2021-6-8 11:21
请问我使用GPU加速会报错
ERROR: Could not find/initialize a specified accelerator device (src/GPU/gp ...

找不到GPU的话,一般是nvidia驱动或者cuda问题。这个问题曾经困扰过我很久,我有一台机器按照标准的方式安装后,每次开机需要先以root运行cuda的deviceQuery工具,无论是做MD还是运行别的cuda加速程序都是如此,原理不明。
作者
Author:
2111901111    时间: 2021-10-8 20:44
请问一下,运行多体势的in文件时候数显错误ERROR: Must not use GPU neighbor lists with hybrid pair style. 这是什么原因?
作者
Author:
lc123    时间: 2021-11-22 20:03
请问一下,运行时出现这种报错是怎么回事呢
ERROR: Unable to initialize accelerator for use (../gpu_extra.h:45)
Last command: package gpu 1
Cuda driver error 4 in call at file 'geryon/nvd_device.h' in line 135.

作者
Author:
adong    时间: 2022-1-8 00:19
啦啦黑还黑 发表于 2020-10-27 17:11
直接mpirun -np  4 好像不太行,你看一下是不是这样GPU也并行了,cpu和gpu上都会分4个任务并行,速度会减慢 ...

刘老师,您说的用这个指令,lammps程序是否能实现对应的效果呢?在Gromacs可以实现调用多个CPU+一个GPU任务,但是我看网上使用GPU加速lammps,所用指令都是您说的这个,但是都出现使用几个线程,GPU就会出现几个GPU任务
作者
Author:
tangzi_via    时间: 2022-9-23 20:16
Cuda driver error 1 in call at file '/software/install/lammps-29Oct20/lib/gpu/geryon/nvd_kernel.h' in line 364.
请问一下大家我用lammps中的dpd/gpu进行就计算的时候出现了这个错误应该怎么解决,我用lmp_mpi -h检查了安装了gpu的
但是我把dpd/gpu换成dpd就可以进行计算,不知道这个问题是我cuda出问题了吗还是gpu没有装上?求指点
作者
Author:
duanyu16    时间: 2023-3-3 16:36
我在使用cpu单核加GPU加速进行计算时,会出现运算后期运行内存不断增长的现象,使用cpu4核+1gpu就不会出现这种情况;然而在使用CPU4核+2GPU时也会出现运行内存爆炸的情况,更改成cpu10核+2gpu就会改善,不知道大家遇到过没有。
作者
Author:
kaier    时间: 2023-6-19 15:49
lc123 发表于 2021-11-22 20:03
请问一下,运行时出现这种报错是怎么回事呢
ERROR: Unable to initialize accelerator for use (../gpu_ex ...

你试一下把cpu线程调少一些
作者
Author:
cuijie    时间: 2023-11-30 18:27
Graphite 发表于 2021-6-21 09:39
找不到GPU的话,一般是nvidia驱动或者cuda问题。这个问题曾经困扰过我很久,我有一台机器按照标准的方式 ...

佬,我是amd的gpu 6700xt,我也是这个问题,您知道怎么解决吗
作者
Author:
yuzc    时间: 2025-9-28 16:12
补充说明一下,正好最近在做LAMMPS-GPU效率的相关测试。
1. 感知上从2018年开始,LAMMPS与GROMACS在GPU加速这一块的差距被拉大了,GROMACS现在在做一般任务时显著快于LAMMPS。
这其中的原因主要在于目前的GROMACS能够把大多数操作放到GPU上去做,包括但不限于-pme, -pmefft, -nb, -bonded, -update。但是lammps里从bond到dihedral并没有很多函数可以放到GPU上去计算,neighborlist更新也没有明显地看到放到GPU计算的关键词(lmp -h > test.txt,检索关键字neigh 或 modify,没看到相应gpu加速关键词)。
2. 在有双精度特化的计算卡(如A100, V100, A30等)时候,请优先选择KOKKOS搭配GPU加速,这是因为有一部分成键势是KOKKOS PACKAGE支持的(如bond_style harmonic/kk, angle_style harmonic/kk),但仍然有很多不支持,如gaff对应的proper和improper二面角。
3. 在GPU PACKAGE下,单卡+多核效率需要测试。正如前面所说,一部分更新是放到CPU计算的,需要同时测MPI+OMP的数量。 根据体系是不一样的,这主要在于哪些部分可以放到GPU上计算。哪些需要多核CPU。像我目前的体系竟然是这个最快:mpirun -n 4 lmp -sf gpu -pk gpu 1 opm 2 <input.in>output.out
4. 正是因为KOKKOS的一些成键势能是不支持的,所以有时KOKKOS GPU会更慢。
作者
Author:
Graphite    时间: 2025-9-28 21:54
yuzc 发表于 2025-9-28 16:12
补充说明一下,正好最近在做LAMMPS-GPU效率的相关测试。
1. 感知上从2018年开始,LAMMPS与GROMACS在GPU加 ...

好久了,难得。

确实是对bond_style、pair_style等的具体类型、体系各部分的负载非常敏感,每类体系需要分别优化。neigh相关也没有什么gpu的说法。

gromacs的设计理念现在有点是效率优先,专注当一个经典体系的载货卡车了,gromacs的集中性、一致性也更强。lammps是越来越大、也越来越散。

不过我个人还是更喜欢lammps,也还在坚持用lammps,尽管lammps的学习成本从来都不低,但掌握了道道,也有种见招拆招的乐趣。
作者
Author:
tayzor    时间: 2025-12-26 21:16
fhh2626 发表于 2020-7-31 21:52
核数越多越慢是非常正常的现象,现在MD引擎中绝大部分计算都是GPU完成,用多个CPU核心大多数时候的作用就是 ...

如何选择最快计算所需核数呢,是不是一半最好,比如100线程,我只用50线程来计算
作者
Author:
fhh2626    时间: 2025-12-27 16:35
tayzor 发表于 2025-12-26 21:16
如何选择最快计算所需核数呢,是不是一半最好,比如100线程,我只用50线程来计算

不是,这个只能实际测试。像NAMD的平衡模拟,一般就是用单个CPU核心最快




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