LAMMPS 专题

LAMMPS GPU加速使用指南

从GPU包与KOKKOS开始,选择版本、势函数与提交方式。

更新于 2026-10-19约 10 分钟阅读按任务与环境选择适用配置
阅读本篇目录

鸢算科技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. 后续阅读#

本页依据本集群已安装程序、公共模板及2026-10-16交付的实测记录编写。上游在线手册会更新,其中后续新增选项或编译要求不自动适用于本集群2025版本;具体支持以所选模块的帮助、匹配版本文档和实际短试算为准。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。