LAMMPS 专题

LAMMPS Fenix:缩减恢复与分区恢复

比较4到3进程缩减、3加1分区备用接替,并检查恢复后的轨迹、能量与原子力。

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

没有备用进程时能否继续?分区之间需要通信时怎样配置?本篇沿用 备用进程与检查点恢复 的同一套 32 原子模型,比较两条恢复路径,并给出读日志和画图的命令。

1. 准备同一份资料包#

下载完整示例,保存为 example.zip,使用一个新目录:

python3 -m zipfile -e example.zip .
cd lammps-fenix-recovery

不重算也可以先查看完整结果:

bash show-reference.sh
bash plot-results.sh
ls -lh plots/lammps-Fenix-trajectory-force-checks.png

五组轨迹能量、坐标差与全部原子力分量

图中每条轨迹来自实际计算。中图比较六个输出时刻的全部原子坐标;右图比较最后一帧 32 个原子的 96 个力分量与独立最小镜像 LJ 公式。五组能量曲线几乎完全重叠,因此左图会看起来像一条曲线。

2. 无备用进程:4 变 3#

缩减模式的第一行是:

fenix spares 0 restart_file recover.in restart_label resume

4 个进程全部参与前 10 步。一个进程退出后,由剩余 3 个进程重建通信域,读取 checkpoint.10 再分配原子,继续到第 50 步。减少的是 MPI 进程数,原子数仍是 32。

恢复脚本与前一篇相同。能否缩减还取决于软件构建、所用命令和计算方法;不能据此推断固定副本数的算法、任意外部耦合或所有势函数都能在改变进程数后继续。

3. universal:最后一个分区作备用#

输入开头改成:

fenix universal restart_file recover.in restart_label resume

启动参数中的分区布局为:

-n 4 ... -partition 3 1 -in normal.in

第一个分区 3 个进程计算,最后一个分区 1 个进程备用。这里的省略号表示示意参数;实际完整命令已经写在 run-native.py 中,由下面的运行脚本执行。

universal 不再同时写 spares。 最后一个分区全部作为备用。它维护分区之上的 universe 通信域,适用于需要跨分区通信的恢复环境。本例只验证一个活动分区加一个备用分区,不把它等同于 replica-exchange、NEB 等算法的完整容错测试。

当前官方接口中,universal 的备用进程耗尽后不支持继续缩减恢复。不要把本例的单次备用接替当作可以无限次恢复。相关范围见 官方命令说明。

4. 实际运行与读取#

两篇使用同一组脚本、同一个独立环境。推荐在新目录提交:

sbatch job.slurm

若已经处在分配好的兼容 CPU 资源内,也可依次执行:

bash prepare-runtime.sh
bash run.sh
bash plot-results.sh

其中 prepare-runtime.sh 从随包源码构建 GNU 13.3 / C++20 / OpenMPI 5.0.10 ULFM / Fenix 2.0 API 独立程序,包含前篇说明的三文件生命周期兼容调整。源码补丁随包提供,不覆盖公共 LAMMPS。不要换成普通 MPI 程序后照搬恢复命令;需要保持 MPI 库与编译环境一致。

查看缩减模式:

cat work/shrink-recovery/recovered.marker
cat work/shrink-recovery/completed.marker
grep 'Loop time' work/shrink-recovery/native.log
head -n 9 work/shrink-recovery/final.dump

应看到恢复前 4 个、恢复后 3 个活动进程,完成标记为第 50 步,最终原子数 32。

查看分区模式:

cat work/universal-recovery/recovered.marker
cat work/universal-recovery/completed.marker
grep 'Loop time' work/universal-recovery/native.log.0
head -n 9 work/universal-recovery/final.dump

活动分区原生日志名是 native.log.0,恢复前后均 3 个活动进程。native.log 和其他分区日志不能直接当作这条活动轨迹的数据。

5. 怎样判断恢复后的数据可用#

cat fenix-summary.csv
ls -lh work/*/checkpoint.50
ls -lh plots/*.png

本例对比普通运行与三条恢复轨迹的六帧数据:第 0、10、20、30、40、50 步。恢复后每个原子编号、坐标、速度、力、体系能量、温度及压力都有对应输出。

运行方式 活动进程数 中断进程数 完成步数
普通运行 4 → 4 0 50
备用但不中断 3 → 3 0 50
备用接替 3 → 3 1 50
缩减恢复 4 → 3 1 50
universal 备用接替 3 → 3 1 50

本次所有恢复轨迹与普通轨迹的最大坐标差约 1.8×10⁻¹⁶,全部时刻的原子力与独立公式最大差约 7.8×10⁻¹⁵;均为 LJ 单位。改变 MPI 分解可能改变浮点求和顺序,生产体系无需期待逐字节相同,应依据体系和方法设置合理的误差标准。

本例检验的是进程退出、通信域重建和磁盘检查点读回。整节点断电、文件系统不可用、检查点损坏,以及调度器终止整个作业不属于这个单节点流程的演示范围。恢复也会退回最后一个检查点,检查点之后尚未保存的步骤需要重算。

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

查看配图

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

100%查看原图 ↗