GROMACS专题

GROMACS 检查点续算与状态精度

从同一水盒实测连续运行、追加续算、分文件续算和GRO重启;给出完整MDP、命令和精度对照。

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

本篇解决一个常见问题:作业到时限了,怎样接着算,并确认接上的是原来的动力学状态?先保留原目录及输出,再使用 CPT 续算。GRO 适合查看结构、传递结构和建模,不适合代替检查点。

真实水盒与检查点续算流程

1. 先准备水盒,再得到同一个生产起点#

在已经分配的单 GPU 任务环境中,资料包的准备命令是:

bash prepare.sh

脚本依次执行 gmx solvate、能量最小化、5 ps NVT,然后从平衡末态的 eq.gro 和 eq.cpt 生成生产 TPR。实际水盒边长 2.5 nm,510 个水分子、1530 个原子。初始构建的主要命令为:

gmx solvate -cs spc216.gro -box 2.5 2.5 2.5 \
  -o start.gro -p topol.top
gmx grompp -f em.mdp -c start.gro -p topol.top -o em.tpr
gmx mdrun -deffnm em -ntmpi 1 -ntomp 2 -nb cpu -pme cpu
gmx grompp -f eq.mdp -c em.gro -p topol.top -o eq.tpr
gmx mdrun -deffnm eq -ntmpi 1 -ntomp 2 -nb gpu -pme gpu
gmx grompp -f md.mdp -c eq.gro -t eq.cpt \
  -p topol.top -o full.tpr
gmx convert-tpr -s full.tpr -nsteps 5000 -o short.tpr

下载包的脚本还显式固定更新、键合计算和绑核方式,完整实际命令见 prepare_case.py。拓扑内容为:

#include "oplsaa.ff/forcefield.itp"
#include "oplsaa.ff/spce.itp"
[ system ]
SPC/E water checkpoint and layout example
[ molecules ]
SOL 510

这里刻意使用短时 NVE 作为续算对照:没有恒温/恒压器的额外状态,方便定位差异。并不代表一般生产计算都应采用本篇截断、时长和 NVE 设置。5 ps 平衡和 20 ps 轨迹不足以证明水的热力学或输运性质收敛;这里仅演示状态衔接与数值路径。

完整生产 md.mdp(20 ps)
integrator = md
dt = 0.002
nsteps = 10000
continuation = yes
tcoupl = no
pcoupl = no
gen-vel = no
comm-mode = Linear
nstcomm = 100
nstenergy = 100
nstcalcenergy = 100
nstlog = 1000
nstxout = 100
nstvout = 100
nstfout = 0
nstxout-compressed = 100
compressed-x-precision = 1000
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = 0.8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = 0.8
DispCorr = no
fourierspacing = 0.12
pme-order = 4
pbc = xyz
constraints = h-bonds
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1

dt=0.002 单位是 ps,即 2 fs;10000 步为 20 ps。continuation=yes、gen-vel=no 保留原速度并避免重新施加初始约束。comm-mode=Linear 每 100 步去除整体平动。TRR 每 100 步写坐标和速度,XTC 同步写压缩坐标。Verlet 列表半径 1.0 nm、固定更新间隔是本组对照的控制条件;正式体系要重新检查截断、缓冲和能量漂移。

完整 5 ps 平衡 eq.mdp
integrator = md
dt = 0.002
nsteps = 2500
continuation = no
tcoupl = v-rescale
tc-grps = System
tau-t = 0.1
ref-t = 300
pcoupl = no
gen-vel = yes
gen-temp = 300
gen-seed = 2612101
ld-seed = 2612102
comm-mode = Linear
nstcomm = 100
nstenergy = 100
nstlog = 1000
nstxout = 0
nstvout = 0
nstfout = 0
nstxout-compressed = 0
cutoff-scheme = Verlet
nstlist = 20
verlet-buffer-tolerance = -1
rlist = 1.0
coulombtype = PME
rcoulomb = 0.8
vdwtype = Cut-off
vdw-modifier = Potential-shift
rvdw = 0.8
DispCorr = no
fourierspacing = 0.12
pme-order = 4
pbc = xyz
constraints = h-bonds
constraint-algorithm = lincs
lincs-order = 4
lincs-iter = 1

2. 连续 20 ps 与 10+10 ps 怎么运行#

资料包在独立目录保存所有分支。在分配好的任务里运行:

bash run.sh cpu-seed
bash run.sh cpu-full
bash run.sh cpu-append

cpu-seed 跑到 10 ps,cpu-full 连续跑到 20 ps,cpu-append 复制种子输出并用完整 TPR 续到 20 ps,原种子目录保留。CPU 对照使用同一可执行程序、相同线程数、-reprod、固定 PME 配置。实际追加的核心命令是:

gmx mdrun -deffnm md -cpi checkpoint10.cpt -append \
  -ntmpi 1 -ntomp 1 -nb cpu -pme cpu -reprod \
  -bonded cpu -update cpu -pin off -notunepme

md.tpr 已替换为 20 ps 的 TPR;checkpoint10.cpt 是独立保留的 10 ps 检查点。对于自己的原目录,延长总时长更直接:

cp md.cpt checkpoint-backup.cpt
gmx convert-tpr -s md.tpr -extend 10 -o extended.tpr
gmx mdrun -s extended.tpr -deffnm md -cpi md.cpt -append

最后一条仍须放在正常任务脚本中,并沿用原任务资源和加速选项。-extend 10 是增加 10 ps,不是把终点设置为 10 ps;也可以用 -until 指定最终时间。

3. 怎样确认续上了#

gmx dump -cp work/cpu-seed/md.cpt | head -35
gmx dump -cp work/cpu-append/md.cpt | head -35
gmx check -f work/cpu-append/md.trr

本例种子 step=5000, t=10,续算末态 step=10000, t=20,原子数都是 1530。追加后的 TRR 有 101 帧,时间 0–20 ps、间隔 0.2 ps。

独立读取原始 TRR 后,CPU 连续运行与追加续算的每一帧坐标、速度均完全相同。这个结论只属于本次固定 CPU 条件;改变线程数、MPI 规约、二进制程序、硬件或使用 GPU,不能要求逐位一致。

连续计算与不同续算分支的实际坐标和速度差异

4. 为什么不要拿 GRO 代替 CPT#

资料包保留 cpu-gro-restart 作为精度对照:将 10 ps 的 GRO 作为新 TPR 输入,设置 init-step=5000、nsteps=5000,没有传入 -t checkpoint10.cpt。这是一条新的动力学轨迹,时间标签衔接并不等于状态精确衔接。

GRO 通常只保存小数点后三位 nm 坐标、四位 nm/ps 速度。本例首次状态相对检查点的坐标差不超过约 0.0005 nm、速度差约 0.00005 nm/ps,随后随动力学放大。由于 continuation=yes 跳过初始约束投影,四舍五入后的首帧 O–H 长度还会偏离刚性几何约 0.0014 nm;后续 SETTLE 步才重新满足刚性约束。

GRO初始几何精度及实际温度轨迹

不要用重新生成速度来“修复续算”。CPT 还保存积分器、耦合器、能量历史等状态,GRO 不包含这些信息。保存检查点的同时也保留旧输出,才能继续安全追加。

TRR 中本例 leapfrog 积分器的速度为半步速度;不要直接拿一帧 TRR 速度计算的动能去要求等于原生 EDR 的整步动能。资料包用 EDR 的势能、动能、总能量和温度互相核对,同时独立比较相同时间的 TRR 状态。

官方说明:长任务、检查点与可复现性。

下载完整输入、实际检查点/轨迹、CSV和绘图脚本。资料包是本专题自己的 510 分子 SPC/E 水盒;与旧篇 884 分子 TIP3P 水盒不是同一个体系,不要互相混用 TPR、CPT 或拓扑。

解压进入资料包目录,先查看已经完成的结果:

bash analyze.sh

参考图片在 reference/figures,数据表在 reference/analysis。需要重新计算整套实例时,在新解压目录执行:

bash submit.sh
squeue -u "$USER"

脚本生成独立作业文件:先建模/平衡,再运行连续段和种子段;续算依赖相应种子作业成功,最后处理 work 目录。每个任务按实际秩数、线程数和 GPU 数申请资源;CPU 路径对照也申请 P100 任务资源,只让该任务的 CPU 核计算。没有覆盖既有工作目录的选项。单独复跑某个例子前,先确保前置任务已完成,且已通过调度分配足够资源。

环境为 GROMACS 2026.4,GNU 13.3、FFTW 3.3.10、CUDA 12.8,混合精度。单进程/线程版本使用 gromacs/2026.4-p100-threadmpi;真实 MPI 版本使用 gromacs/2026.4-p100-mpi-plumed,Open MPI 5.0.10,支持 GPU-aware MPI。本专题没有施加 PLUMED 偏置。CPU 路径结果由 P100 计算节点的 CPU 核获得,不是 Intel Xeon 8173M 性能测量。

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

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗