LAMMPS GPU加速使用指南
从GPU包与KOKKOS开始,选择版本、势函数与提交方式。
阅读本篇目录
鸢算科技HPC集群 · 更新于2026-10-17
本文介绍LAMMPS如何利用GPU、如何选择GPU包或KOKKOS,以及如何在本集群提交单卡和多卡任务。适合已经有LAMMPS输入文件、希望将CPU计算迁移到GPU的用户。性能曲线、详细调参、准确性和显存另有专题,文末给出阅读入口。
1. LAMMPS的GPU加速在计算什么#
LAMMPS是面向原子、分子及相关粒子模型的模拟程序。本集群的GPU实测覆盖Cu金属的EAM势、Si的Tersoff势,以及包含长程静电和SHAKE约束的SPC/E水。GPU加速是否有效,取决于输入中实际使用的算法是否存在加速实现,以及这些算法占用了多少计算时间。
一次分子动力学计算包含邻居搜索、相互作用力计算、长程静电、时间积分、约束、MPI通信和输出等环节。将某个环节移到GPU,并不意味着整个程序的每一步都在GPU上执行。CPU仍负责部分工作,多卡还会增加区域边界上的通信。
例如,短程势的力计算可能适合GPU并行;包含长程静电的体系还要考虑PPPM、FFT和通信。大量逐步输出或未加速的分析命令,也可能成为主要开销。判断加速效果,应比较同一科学输入的实际耗时,而不是只看GPU利用率。加速包比较、性能测量
2. GPU包和KOKKOS有什么区别#
本集群分别编译了两种GPU实现,使用时选择相应模块和提交脚本。
| 项目 | GPU包 | KOKKOS的CUDA后端 |
|---|---|---|
| 常见style后缀 | /gpu |
/kk |
| 启用形式 | -sf gpu -pk gpu G |
-k on g G -sf kk |
| 本集群通用构建的精度 | mixed | double |
| 起始MPI布局 | 可从每卡1MPI开始,再比较每卡2或4MPI | 从每卡1MPI开始 |
| 优化侧重点 | 调整GPU计算与CPU端工作、进程共享 | 尽量采用兼容的KOKKOS计算路径,减少主机与设备之间的数据同步 |
| 选择依据 | 输入的style支持、目标规模、耗时和数值检查 | 同左,不能仅凭名称判定更快 |
这里G表示每节点使用的GPU数量,不是MPI进程总数。GPU包允许多个MPI进程共享一张GPU;KOKKOS通常先按一进程一卡配置。两种实现的最佳布局可能不同。GPU包说明、KOKKOS说明
GPU包的mixed配置表示部分力计算使用单精度、力累加使用双精度,不是整个模拟全部使用单精度。KOKKOS通用构建采用double,但两者都需要检查具体模型的能量、力和积分表现。精度是当前程序的构建配置,不能通过在任意输入文件中增加一个通用precision参数来切换。
GPU包的PPPM只有部分计算可卸载,FFT仍在CPU上;因此长程静电体系要同时考虑CPU布局。KOKKOS是否有优势,也取决于输入是否能持续使用设备上的数据。实际选择见参数指南。
3. 本集群可以选择哪些程序#
本集群提供通用 LAMMPS 29Aug2024 Update4 和 22Jul2025 Update6,两个版本均分别部署CPU、P100/V100 GPU包和KOKKOS程序。本文及配套专题的CPU/GPU性能实测采用2025 Update6。
| 版本 | 平台 | 实现与精度 | 模块 |
|---|---|---|---|
| 29Aug2024 Update4 | 8173m | CPU | lammps/29Aug2024_update4-8173m |
| 29Aug2024 Update4 | P100 | GPU包,mixed | lammps/29Aug2024_update4-p100-gpu |
| 29Aug2024 Update4 | P100 | KOKKOS,double | lammps/29Aug2024_update4-p100-kokkos |
| 29Aug2024 Update4 | V100 | GPU包,mixed | lammps/29Aug2024_update4-v100-gpu |
| 29Aug2024 Update4 | V100 | KOKKOS,double | lammps/29Aug2024_update4-v100-kokkos |
| 22Jul2025 Update6 | 8173m | CPU;用作CPU性能和数值参考 | lammps/22Jul2025_update6-8173m |
| 22Jul2025 Update6 | P100 | GPU包,mixed | lammps/22Jul2025_update6-p100-gpu |
| 22Jul2025 Update6 | P100 | KOKKOS,double | lammps/22Jul2025_update6-p100-kokkos |
| 22Jul2025 Update6 | V100 | GPU包,mixed | lammps/22Jul2025_update6-v100-gpu |
| 22Jul2025 Update6 | V100 | KOKKOS,double | lammps/22Jul2025_update6-v100-kokkos |
两个版本的通用GPU程序均使用GCC13.3、独立Open MPI5.0.10、CUDA12.8、MKL2024.2及匹配的PLUMED2.9.4;2024 Update4配套Kokkos4.3.1,2025 Update6配套Kokkos4.6.2。两版CPU程序采用oneAPI2024.2和Intel MPI。模块负责加载匹配的依赖,用户提交时不需要手动拼接编译器、MPI和动态库路径。
P100程序针对sm_60,V100针对sm_70,请选择与申请节点相符的构建。V10016GB/32GB共用对应的V100程序,但分区、显存和账户权限不同;本轮性能测试使用V10016GB,不能直接把结果当成32GB节点实测。其他通用版本和DeePMD配套程序见集群指南。
机器学习势需要另选配套程序#
pair_style deepmd使用对应DeePMD后端及模型;它的GPU计算不能简单等同于GPU包的/gpu算法。使用deepmd/kk还需要已编入该接口的配套构建、支持的后端及模型。不要给所有DeePMD输入统一添加-sf kk。
本集群为不同DeePMD版本提供独立LAMMPS模块和脚本。先确认模型与对应版本、后端、类型映射兼容,再选择deepmd、classic或deepmd-kk模式。本组Cu、Si和水的经典势测试不代表DeePMD或其他机器学习势的性能。
4. 怎样判断自己的输入能否使用GPU#
先查看输入中的pair_style,再检查kspace_style、fix和compute。本轮已安装程序的帮助清单包含以下实现示例:
| 原始style | GPU包实现 | KOKKOS实现 |
|---|---|---|
eam/alloy |
eam/alloy/gpu |
eam/alloy/kk |
tersoff |
tersoff/gpu |
tersoff/kk |
lj/cut/coul/long |
lj/cut/coul/long/gpu |
lj/cut/coul/long/kk |
pppm |
pppm/gpu |
pppm/kk |
在已获分配的计算环境中,加载目标模块后可查看当前二进制实际编入的style:
lmp -h > lammps-help.txt
grep -E 'eam/alloy|tersoff|lj/cut/coul/long|pppm' lammps-help.txt
有些GPU程序的启动检查需要计算节点上的GPU;不要在login01直接启动生产模拟。帮助清单能确认编译支持,完整输入是否兼容仍需短试算。命令行帮助
使用-sf gpu或-sf kk后,LAMMPS会优先选择可用的对应后缀实现;没有对应后缀的命令可能保留原实现。因此“命令能运行”不证明全部计算已卸载。输入中显式指定的后缀、suffix off、package、Newton设置或混合势,也需要检查是否与所选路线相符。后缀规则
5. 怎样提交第一个GPU作业#
在自己的算例目录准备好in.lammps及其引用的结构、势文件或模型,然后运行:
yskit copy
选择用户类型、LAMMPS版本、节点及GPU/KOKKOS构建。若使用通用Update6,请选择与本节模块对应的通用模板。
例如,核时用户提交P100单卡GPU包任务:
cp -i /public/slurm_scripts/hs_user/lammps/22Jul2025_update6/p100/gpu/sub_22Jul2025_update6_p100_gpu.sh .
# 检查脚本中的INPUT、分区、MPI数、线程数和GPU数后提交
sbatch sub_22Jul2025_update6_p100_gpu.sh
该模板默认1MPI、1CPU线程、1张P100,读取当前目录的in.lammps。其运行命令为:
mpirun -np "$SLURM_NTASKS" lmp -sf gpu -pk gpu "$SLURM_NTASKS" -in in.lammps
这里GPU数暂时等于MPI数,适用于一进程一卡。V100 KOKKOS的相应通用模板使用-k on g ... -sf kk,并保留gpu/aware off。本轮另有使用已验收MPI配置的GPU-aware示例;修改通信路径时应按相应示例整体核对,不能只替换MPI环境。
套餐用户保留自己获授权的tc_user模板和分区。Slurm负责分配可见GPU,不手动覆盖CUDA_VISIBLE_DEVICES为整机卡号。
6. 从一张卡改成多张卡#
对于上述单节点、一进程一卡通用模板,GPU数、MPI数和启动参数需要对应一致:
| GPU数 | --ntasks |
--cpus-per-task |
--gres中的数量 |
-pk gpu或-k on g的数量 |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 |
| 2 | 2 | 1 | 2 | 2 |
| 4 | 4 | 1 | 4 | 4 |
| 8 | 8 | 1 | 8 | 8 |
例如P100双卡,把自己复制的脚本改为:
#SBATCH --ntasks=2
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:p100-16g:2
GPU包:MPI数可以多于GPU数#
如果比较“四张GPU、八个MPI进程”,资源应申请4GPU和8CPU,启动参数的GPU数仍为4。不能继续使用-pk gpu "$SLURM_NTASKS",否则会请求8张卡。可参考本指南配套的四卡八MPI示例,其命令分别读取:
mpirun -np "$SLURM_NTASKS" lmp \
-sf gpu -pk gpu "$SLURM_GPUS_ON_NODE" -in in.lammps
该写法用于单节点作业。MPI进程数乘每进程CPU数不得超过获分配CPU,并应符合节点物理核数。每卡更多MPI有时能改善CPU端工作,也可能增加同步和显存开销;不同势、规模的结果见参数专题。
KOKKOS:先按一进程一卡配置#
先从1、2、4、8张卡分别对应1、2、4、8个MPI进程开始。neigh half/full及newton on/off必须符合具体style要求;本轮Tersoff采用通过验收的half/on,不能直接套用其他势的设置。GPU包的pair Newton要求与此不同,两个路线的输入不能只改启动后缀就认定兼容。
跨节点还涉及网络、MPI和区域分解,本轮文档未提供跨节点性能结论。8173m的CPU对照按整节点56CPU配置;GPU节点上的MPI数量则按实际任务和分配资源选择。
7. 什么情况下GPU更值得使用#
本集群对三类模型、六档规模、CPU56核及P100/V100单、双、四、八卡进行了对照,主矩阵取得304组有效结果。以下现象来自这些特定输入,不作为任意势函数的固定原子数阈值。
| 情况 | 已有测试支持的选择思路 |
|---|---|
| 几千原子的较小体系 | CPU56核在本轮最小Cu和Si体系的计算段最快;先比较CPU与单卡 |
| 原子数增大、力计算占比高 | 单卡可能已有明显收益,再比较双卡、四卡和八卡 |
| 包含PPPM的水等体系 | 比较完整GPU/KOKKOS路径;CPU端长程工作可能限制GPU包收益 |
| 单个任务已经很小 | 增加GPU可能使通信和同步占比上升;多卡未必更快 |
| 希望降低费用 | 比较完整运行核时;最快配置不一定最省核时 |
| 显存接近上限 | 检查邻居表、局部原子和长程网格,多卡不能保证显存按卡数均分 |
例如本轮Si/Tersoff的32,768原子体系中,已测候选的计算段最快为V100单卡KOKKOS;最小4,096原子体系则为CPU56核。这个例子说明资源选择需要结合规模与算法,不能机械地把所有任务都提交到八卡。完整条件、时间图和核时图见性能与核时指南。
性能比较固定势、结构、截断、时间步、系综和输出频率,预热后使用相同步数比较正式段Loop time。长轨迹还可以比较相同物理条件下的ns/day。完整运行墙钟时间另计初始化和输出,不能把它与正式计算段耗时混用。性能测量说明
8. 如何确认确实用上了GPU,而且结果可信#
保存Slurm的%j.out和log.lammps,检查实际版本、GPU/KOKKOS初始化信息、MPI数、模拟步数及正常结束。GPU包的部分GPU计时只写到屏幕输出,单看log.lammps可能不完整。可以结合被分配显卡的监测信息判断是否有持续工作,但利用率低本身不能证明GPU没有启用。输出说明
首次迁移输入,先在同一构型上比较CPU与GPU的能量、力和压力,再做适当的短时积分检查。长时间逐原子轨迹可能因舍入、归约顺序和动力学敏感性而分离;应结合物理任务比较守恒量、温压、分布和统计误差。本轮54项同构型检查通过,具体阈值与结果见准确性专题;它不替代用户力场的物理验证。
9. 后续阅读#
- 性能与核时消耗:按模型、规模和卡数看耗时及预算。
- GPU包与KOKKOS参数选择:MPI/线程、邻居表、Newton与PPPM分工。
- CPU与GPU计算准确性:能量、力、压力、NVE与统计边界。
- GPU显存与体系规模:原子数、邻居数、网格和进程布局。
- 完整文档索引、数据表和图片。
本页依据本集群已安装程序、公共模板及2026-10-16交付的实测记录编写。上游在线手册会更新,其中后续新增选项或编译要求不自动适用于本集群2025版本;具体支持以所选模块的帮助、匹配版本文档和实际短试算为准。