ATAT 专题

ATAT MPI任务分发:dispatch与splitjob

实际分发六个EMT能量任务,理解调度进程、工作进程和结果检查。

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

本篇在同一个Slurm作业中演示atat-dispatch和splitjob:两者都处理六个真实的FCC Cu EMT能量任务,但分配工作的方式不同。下载完整实例包。EMT是经验势模型,这些结果不作为DFT能量。

1 解压并提交#

mkdir ATAT-MPI
python3 -m zipfile -e atat-MPI-tools-*.zip ATAT-MPI
cd ATAT-MPI
bash run.sh

run.sh提交一个3进程Slurm作业并等待结束。实例调用ATAT3.52的OpenMPI5.0.10工具;ATAT基于GCC13.3,实际能量工作项使用ASE3.29.0。输出都放在new-work,重复运行请使用新的解压目录。

这是CPU MPI工具示例。包内脚本使用V10016G分区资源、3个CPU进程和1张GPU的申请,工具本身在CPU上运行,不会因为申请了GPU就变成GPU加速程序。使用CPU分区时,需要按自己可用资源同时调整分区和GPU请求;保留Slurm正常的权限与计费处理。

2 看每个工具执行了什么#

cat new-work/dispatch.jobs
cat new-work/splitjob.jobs
cat new-work/dispatch.log
cat new-work/splitjob.log

每个.jobs文件中有六行命令,逐项计算a=3.492、3.528、3.564、3.600、3.636和3.672 Å的四原子常规FCC Cu胞。一行是一个独立工作项,不是MPI进程数。不要在任务清单中插入空行,原生程序会把空命令当作结束。

作业内由脚本实际执行的核心命令为:

atat-dispatch dispatch.jobs
mpirun --bind-to core -np 3 splitjob splitjob.jobs

atat-dispatch的0号进程负责发任务,1、2号进程取任务并执行。因此本例3个MPI进程中有2个工作进程,任务耗时不同时适合动态取下一项。

splitjob的全部3个进程都执行工作,按照清单行号对3取模分配:0号执行任务0、3,1号执行1、4,2号执行2、5。这个方式简单,但各工作项耗时差别很大时,可能需要等待较慢的进程。

实际工作分配与能量结果

图中的进程编号来自每个实际工作项记录的MPI环境,两种分发方式得到相同的六个能量;动态分发中某个任务具体落到1号还是2号,可能随运行时机变化。

3 看结果是否齐全#

ls new-work/dispatch/*.json
ls new-work/splitjob/*.json
cat new-work/RESULT.json

每个目录应有任务0–5六个结果。流程会核对每个编号只出现一次、所属作业、实际进程、晶胞体积和独立能量结果。

原生分发程序不一定把每条内部shell命令的错误传到最外层退出码。不要只看MPI结束或作业显示COMPLETED;还要检查期待的结果文件和相应数值。本例的最终检查发现缺项会停止,而不是拿所附参考文件补齐。

ATAT的MPI包装器单独选择OpenMPI运行环境;不要给这些程序另外加载IntelMPI。atat-vasp调用CPU VASP的IntelMPI入口属于另一条工作流,不能把两种MPI可执行文件直接混用。

下一篇并行枚举结构与串行对照使用同一个作业已经生成的结果。

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

查看配图

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

100%查看原图 ↗