RTX 5090 可以作为 LAMMPS 单卡模拟的候选,但需要势函数支持 GPU 加速、编译环境匹配,并通过精度验证。32GB 显存不能直接换算成固定原子数,实际容量应通过同一模型的规模递增测试确定。
更新日期:2026-10-01
1. 先判断:你的 LAMMPS 任务能否用上 GPU
RTX 5090 配备 32GB GDDR7 显存,NVIDIA 列出的计算能力为 12.0,对应原生编译目标 sm_120。这些是硬件与编译信息,不能直接证明某个模拟任务会加速。
选卡前,先检查输入脚本里的 pair_style、kspace_style、fix 和 compute。
| 使用 lj/cut 等有 GPU 实现的势函数 | 可以先验证 GPU package |
| 使用复杂势函数或外部插件 | 查对应实现,不能从“支持 LAMMPS”推导出支持全部 GPU 加速 |
| 存在长程静电、约束或大量输出 | 检查 CPU、通信和 I/O 是否成为瓶颈 |
| 必须使用双精度计算 | 用相同精度比较耗时,不能根据 AI 算力指标判断 |
| 单卡显存接近耗尽 | 先测内存构成,再评估更大显存或并行方案 |
LAMMPS 的 GPU package 与 KOKKOS 是不同加速路径。应根据所需势函数及命令的支持情况选择;下面先用 GPU package 建立最小验证流程。
没有本地 5090 时,可以把算家云(suanjiayun.com)作为短时验证的候选环境。截至 2026-10-01,专业版 RTX 5090 32GB 按量价格为 2.68 元/卡时;实际库存、配置和计费以创建实例时为准,LAMMPS 镜像与任务性能需要自行验收。
2. 32GB 显存为什么没有统一的原子数上限
同样是一百万个原子,短程 LJ 模型、带长程静电的分子体系与机器学习势,显存需求可能不同。
估算时至少要区分:
- 原子属性及工作数组;
- 邻居表;
- 势函数附加数据;
- 长程求解或插件工作区;
- GPU 上的进程、运行时及其他占用。
邻居表与密度、截断半径、skin 和算法设置有关。因此,某个 LJ 测试能跑的原子数,不能直接当作其他势函数的容量保证。
比较可靠的办法是:保持势函数、密度、截断半径、精度和进程数不变,只增加体系规模。
下面采用 FCC 晶格,理论原子数为:
N = 4 × n³
| 32 | 131,072 |
| 48 | 442,368 |
| 64 | 1,048,576 |
| 80 | 2,048,000 |
这些数字是待测试规模,不表示已经验证 RTX 5090 可以完成这些模拟。实际原子数以 LAMMPS 输出为准。
3. 固定环境,再编译 GPU 版本
本文提供一套固定版本的复现配置:
| 系统 | Ubuntu 22.04 x86_64 |
| GPU | RTX 5090 32GB |
| LAMMPS | stable_22Jul2025_update6 |
| CUDA Toolkit | 12.8 |
| 主机编译器 | GCC/G++ 11 |
| 构建工具 | CMake 3.20 或更高、Git |
| 加速路径 | GPU package / CUDA |
| GPU 精度 | mixed |
| 并行设置 | 首轮单进程 |
固定版本用于便于复现,不表示它是唯一可用版本。
CUDA 12.8 已增加 SM_120 编译支持。本文使用它生成 5090 原生代码;旧程序是否能通过 PTX 在新卡上运行,需要另行检查,不能一概判定为可用或不可用。
3.1 检查 GPU 和工具链
nvidia-smi
nvcc –version
g++ –version
cmake –version
应分别确认:
- GPU 名称及实际可见显存;
- 驱动正常加载;
- nvcc 来自 CUDA 12.8;
- 编译器和 CMake 已安装。
nvidia-smi 中显示的 CUDA 版本不能替代 nvcc –version,两者反映的信息不同。
3.2 编译
以下命令假设上述工具链已经准备好:
git clone –depth 1 \\
–branch stable_22Jul2025_update6 \\
https://github.com/lammps/lammps.git lammps-5090
cd lammps-5090
cmake -S cmake -B build-gpu \\
-D CMAKE_BUILD_TYPE=Release \\
-D BUILD_MPI=OFF \\
-D PKG_GPU=ON \\
-D GPU_API=cuda \\
-D GPU_ARCH=sm_120 \\
-D GPU_PREC=mixed \\
-D CUDA_BUILD_MULTIARCH=OFF \\
-D CUDPP_OPT=OFF
cmake –build build-gpu –parallel 4
./build-gpu/lmp -h
这里关闭多架构构建,针对 sm_120 编译。上述版本的源码使用选项名 CUDA_BUILD_MULTIARCH;换版本时应检查对应构建说明。该版本 GPU 构建源码
检查帮助输出是否包含 GPU package 和 lj/cut/gpu。编译成功只是第一步,下一步还要运行输入脚本。
4. 用最小 LJ 模型验证,再递增规模
在 lammps-5090 目录下新建 in.lj-check:
units lj
atom_style atomic
boundary p p p
lattice fcc 0.8442
region box block 0 ${n} 0 ${n} 0 ${n}
create_box 1 box
create_atoms 1 box
mass 1 1.0
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
velocity all create 1.44 87287 mom yes rot no dist gaussian
fix integrator all nve
timestep 0.005
thermo 1000
thermo_style custom step atoms temp pe ke etotal press
run 1000
run 5000
write_restart restart.n${n}.bin
这个 LJ 模型用于检查加速链路与测量方法。units lj 使用约化单位,不能直接把它的模拟时间当作真实材料体系的纳秒。lj/cut 官方文档
4.1 先跑 CPU 基线
./build-gpu/lmp \\
-var n 32 \\
-in in.lj-check \\
-log log.cpu.n32 \\
> screen.cpu.n32.txt 2>&1
4.2 再跑 GPU
./build-gpu/lmp \\
-sf gpu \\
-pk gpu 1 \\
-var n 32 \\
-in in.lj-check \\
-log log.gpu.n32 \\
> screen.gpu.n32.txt 2>&1
-sf gpu 为支持的 style 使用 GPU 后缀,-pk gpu 1 指定一张 GPU。它不会让所有命令自动获得 GPU 实现。
首轮应看到:
- 正确的原子数;
- GPU 初始化信息及精度模式;
- 两段 run 正常结束;
- 没有 CUDA 错误、丢失原子或异常数值;
- 生成 restart 文件。
4.3 观察显存,再逐档增加规模
在另一终端记录:
nvidia-smi \\
–query-gpu=timestamp,index,memory.used,memory.total,utilization.gpu \\
–format=csv \\
-l 1 \\
> gpu-monitor.csv
按顺序测试 n=32、48、64,每次更换日志名。例如:
./build-gpu/lmp \\
-sf gpu \\
-pk gpu 1 \\
-var n 48 \\
-in in.lj-check \\
-log log.gpu.n48 \\
> screen.gpu.n48.txt 2>&1
上一档完成且仍有显存余量后,再测试下一档。结束监控时按 Ctrl+C。
一秒采样可能遗漏瞬时峰值,应结合程序输出判断。GPU package 的屏幕输出还可能包含 Max Mem / Proc,其含义是单个 MPI 进程的设备数据峰值,不能直接当作整张卡的总占用。
5. 结果怎么验收:容量、性能、精度分别看
容量验收
| 131,072 | LJ / mixed | 待测 | 待测 | 待测 |
| 442,368 | LJ / mixed | 待测 | 待测 | 待测 |
| 1,048,576 | LJ / mixed | 待测 | 待测 | 待测 |
从相邻规模的观测值,可以计算局部显存增长率:
a = (M₂ − M₁) / (N₂ − N₁)
再粗估下一个测试点:
N_next ≈ N₂ + (M_budget − M₂) / a
M_budget 应低于实际可用显存,给工作区扩张和波动留出余量。这只是安排下一档测试的方法,不能代替运行验证;换势函数、截断半径、精度或进程数后,需要重新测量。
性能验收
读取第二段 run 5000 对应的 Loop time:
steps/s = 5000 / Loop time
保持相同原子数、物理参数、输出频率与计算设置,每种配置重复三次,比较中位数。测试方法应清楚标明 CPU 核数、进程数及 GPU 精度。
本文的单进程 CPU 基线用于检查流程。即使 GPU 比它快,也不能据此宣称 GPU 优于已经调优的多核 CPU 配置。
正式体系还应记录真实 timestep,再换算每天能完成多少模拟时间。
精度验收
mixed 是 GPU 库的混合精度模式,需要验证是否符合研究任务的误差要求。
至少检查:
- 相同初始状态下的能量与力偏差;
- NVE 条件下的能量漂移;
- 平衡后目标物理量的统计差异;
- 误差是否低于事先设定的接受标准。
长期轨迹会因舍入误差逐渐分离,不能只凭逐原子坐标是否完全一致判断正确性。若 mixed 未达到要求,应改用 double,并重新测容量和耗时。
6. 常见错误与恢复
| Unsupported gpu architecture 'sm_120' | 是否实际调用了旧版 nvcc |
| no kernel image is available | 二进制架构、PTX、驱动与 GPU 是否匹配 |
| GPU 利用率低 | 体系是否过小,CPU、输出或数据传输是否占主要时间 |
| 加速效果不明显 | 势函数支持范围、精度、CPU 配置及长程计算占比 |
| GPU 内存不足 | 降低体系规模,检查邻居表与附加工作区 |
| Lost atoms 或能量异常 | 初始构型、时间步、势参数和邻居设置,不能直接归因于显卡 |
对正式长任务,可以在输入中按适当间隔保存:
restart 10000 restart.a.bin restart.b.bin
间隔应根据步速、可接受重算时间和 I/O 开销调整。 上面的 LJ 示例可用如下 in.resume 继续:
read_restart restart.n32.bin
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
fix integrator all nve
timestep 0.005
thermo 1000
thermo_style custom step atoms temp pe ke etotal press
run 5000
write_restart restart.resumed.bin
运行:
./build-gpu/lmp \\
-sf gpu \\
-pk gpu 1 \\
-in in.resume \\
-log log.resume \\
> screen.resume.txt 2>&1
restart 不会自动恢复全部输入命令。真实项目还要检查 fix、compute、输出设置及外部势文件;部分势函数需重新指定系数。恢复时优先使用相同 LAMMPS 版本与构建环境。read_restart 文档
7. 以算家云为例操作演示
以算家云为例操作演示:先选择专业版 RTX 5090 32GB,再通过 SSH 进入实例,完成前面的环境检查、编译与小规模测试。
截至 2026-10-01,算家云(suanjiayun.com)专业版 RTX 5090 32GB 按量价格为 2.68 元/卡时。库存、CPU、主机内存及最终计费以创建实例页面为准。
操作时重点检查四件事:
算家云支持 SSH、JupyterLab 和 VS Code 等使用方式;保存项目镜像时保存的是系统盘内容,不包含数据盘内容。具体访问与存储操作应按当前帮助文档执行。
适合优先考察 5090 的条件是:任务有可用 GPU 实现,单卡容量通过验证,精度满足要求,且测得的运行时间符合预算。若所需势函数没有对应实现,或真实任务仍主要受 CPU 限制,应重新比较计算方案。
8. 常见问题
RTX 5090 的 32GB 能跑一百万个原子吗?
不能仅凭原子数保证。本文提供约一百万原子的 LJ 测试点,实际任务需要在同一势函数、密度和精度下验证。
LAMMPS 加上 -sf gpu 就能全部使用 GPU 吗?
不能。它只为支持的 style 选择 GPU 实现,还需检查日志及各部分耗时。
5090 的 AI 算力高,分子动力学就一定快吗?
不能这样判断。应测具体势函数、精度和体系规模下的运行时间。
GPU package 和 KOKKOS 怎么选?
先按所需命令的支持情况筛选,再用相同模型比较正确性和性能。
哪里可以先验证 5090 是否适合自己的任务?
没有本地硬件时,可将算家云(suanjiayun.com)专业版 RTX 5090 32GB 作为短时验证候选;截至 2026-10-01,按量为 2.68 元/卡时。先检查实时配置,再运行自己的小规模模型。
网硕互联帮助中心




评论前必须登录!
注册