问题描述
以 al28h1s-ta015-3co 为例,ABINIT 8.6.3 的 SCF 已在第 27 步收敛(toldfe 1.0d-6),stress tensor 也正常输出,但此后计算卡住约 12 小时,无任何新的输出写入 cohp.out 或 cohp.log。
关键观察:
| 指标 | 状态 |
|---|---|
| Job 25035616 | 运行中(3 节点 sim[24-26],72 MPI tasks),已运行 ~29 小时 |
| SCF 收敛 | 第 27 步收敛,最终 $E_\mathrm{tot} = -59.478622$ Ha |
| cohp.out 最后更新 | 2026-05-18 13:53(距发现问题约 12 小时) |
| cohp_oWFK 文件 | 不存在 |
| cohp_o* / cohp_tmp* | 均不存在 |
| error_cohp | 空文件 |
所有 24 个 COHP 计算均使用相同参数,预计均会遇到同样问题。
原因分析
ABINIT SCF 后处理流程
SCF 收敛后,ABINIT 按如下顺序执行后处理:
- 计算力与应力张量(已完成)
- 计算
prtdos(投影态密度,四面体方法) - 写入 WFK 波函数文件(
prtwf 1)
瓶颈定位:prtdos 3
原始 cohp.in 中设置了 prtdos 3(atom-projected partial DOS,四面体方法)。该计算的复杂度与以下因素成正比:
| 参数 | 本体系取值 | 说明 |
|---|---|---|
| k-point 数 | 72($6\times6\times2$,kptopt 3 全 BZ 无对称性约简) | LOBSTER 要求 |
| nband | 100 | |
| 原子数 | 29(28 Al + 1 吸附原子) | |
| PAW projectors | Al: lmn_size=8, H: lmn_size=5 | |
| 平面波数/k-point | ~66,292 | |
| WFK 预估大小 | ~7.3 GB | ABINIT 输出 |
prtdos 3 需要将所有 $72 \times 100 = 7200$ 个波函数投影到每个原子的 PAW 部分波上,计算量为 $O(n_\mathrm{kpt} \times n_\mathrm{band} \times n_\mathrm{atom} \times n_\mathrm{pw})$。
与 LOBSTER 官方示例的对比
LOBSTER 5 附带的 ABINIT 示例(util/lobster-5/ABINIT/)中 prtdos 的用法:
| 示例 | 原子数 | k-point 网格 | nband | prtdos |
|---|---|---|---|---|
| diamond | 2 | $7\times7\times7$ | 8 | 3 |
| gaas | 2 | $7\times7\times7$ | 13 | 3 |
| ti | 2 | $7\times7\times3$ | 20 | 3 |
| FeNi3 | 4 | $5\times5\times5$ | 60 | 3 |
| carbon-nanotube | 32 | $1\times1\times9$ | 128 | 1 |
| fullerene | 60 | $1\times1\times1$ | 240 | 1 |
规律:小体系(2--4 原子)使用 prtdos 3;大体系(32--60 原子)改用 prtdos 1(total DOS)。本计算的 29 原子 + 72 k-point 组合远超示例中使用 prtdos 3 的体系规模。
核心结论
LOBSTER 不需要 ABINIT 的 DOS 输出。 LOBSTER 从 WFK 文件独立计算 COHP/COOP/DOS。prtdos 设置纯属 ABINIT 侧的附加计算,对 LOBSTER 工作流无任何贡献,却造成了严重的性能瓶颈。
MPI 死锁的可能性
除 prtdos 3 计算量过大外,12 小时完全无输出也符合 MPI 死锁的特征。
MPI 死锁是指多个 MPI 进程互相等待对方发送/接收数据,所有进程均阻塞在通信调用上,程序永远无法继续。典型情况如两个进程都先调用阻塞式 MPI_Recv 等待对方数据,而各自的 MPI_Send 排在 Recv 之后,导致谁都无法先发送。
本计算存在以下触发 MPI 死锁的风险因素:
-
跨节点通信:任务使用 3 个节点(sim[24-26])、72 个 MPI 进程。节点内通信走共享内存,稳定且快速;跨节点通信走网络(InfiniBand/以太网),网络瞬时抖动或某节点响应延迟可能触发边界条件 bug。
-
ABINIT 8.6.3 版本较老(2018 年发布)。老版本中集体通信(
MPI_Allreduce、MPI_Alltoall等)的实现在特定进程数/节点组合下可能存在 bug,这类问题通常在后续版本中逐步修复。 -
post-SCF 并行路径测试不足:SCF 循环是 ABINIT 中最成熟、测试最充分的并行代码路径。而
prtdos 3(投影态密度)属于相对冷门的后处理功能,并行化程度和测试覆盖率均不如 SCF,更容易出现通信逻辑 bug。 -
现象吻合:Job 状态为
R(进程存活),但 12 小时内无任何输出,也未产生任何文件。若仅是计算缓慢,应仍有零星 I/O 活动;完全静默更像是所有进程均阻塞在某个通信调用上。
由于无法 SSH 到计算节点检查进程状态(如通过 strace 确认系统调用是否卡在 poll/recv),无法最终确认是计算缓慢还是死锁。但无论哪种情况,去掉 prtdos 3 都能同时消除这两个风险。
修复措施
取消所有任务
scancel -u w.zhengqing
共取消 24 个任务(11 个运行中 + 13 个排队中)。
修改输入参数
对所有 24 个 cohp.in 执行以下修改:
| 参数 | 修改前 | 修改后 | 原因 |
|---|---|---|---|
prtdos | 3 | 0 | LOBSTER 不需要,消除 post-SCF 瓶颈 |
nstep | 100 | 200 | 提高 SCF 收敛余量 |
修改后的输出控制段:
prtdos 0
prtden 0
prtwf 1清理输出文件
删除所有 calc 子目录中的输出文件(共 102 个),每个目录仅保留 4 个输入文件:
cohp.in--- ABINIT 输入cohp.files--- ABINIT 文件列表lobsterin--- LOBSTER 输入mainsim-cohp.sh--- SLURM 提交脚本
预期效果
修改后,SCF 收敛后 ABINIT 将跳过 prtdos 计算,直接写入 WFK 文件(~7.3 GB)后正常退出。后续由 LOBSTER 读取 WFK 完成 COHP 分析。
References
-
Gonze, X., et al. "The ABINIT project: Impact, environment and recent developments." Computer Physics Communications, vol. 248, 2020, p. 107042. link
-
Nelson, R., et al. "LOBSTER: Local orbital projections, atomic charges, and chemical-bonding analysis from projector-augmented-wave-based density-functional theory." Journal of Computational Chemistry, vol. 41, no. 21, 2020, pp. 1931--1940. link