DPDispatcher专题

DPDispatcher 重试、中断与续传

实际演示一次受控失败后的重试、控制程序恢复,以及部分结果已取回后如何继续传输。

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

下载DPDispatcher任务配置与恢复实例包。本包是实际任务工作流,不是只画已有数据的离线脚本:完整运行会执行3个本地CPU小任务,并通过Slurm在P100和V100资源上各运行3个GPU小任务,另有1次受控失败后的重试。

unzip dpdispatcher-config-slurm-recovery-wave252.zip -d dispatcher-practice
cd dispatcher-practice
bash run.sh

请在自己的普通账号与工作目录运行,并确认对应计算资源可用。脚本使用dpgen/0.14.0环境中的DPDispatcher1.1.0,以及LAMMPS30Sep2026;每个调度任务请求1个CPU和1张相应GPU,本地CPU小例使用单线程。计算节点始终由Slurm分配,脚本不会SSH进入计算节点。

CPU版LAMMPS使用Intel oneAPI2024.2/Intel MPI2021.13;GPU版使用GCC13.3/OpenMPI5.0.10/CUDA12.8,为GPU包mixed精度。绘图使用ase/3.29.0环境。脚本自动填写当前账号,不需要修改公共Python或环境模块。

完整流程生成shell/、p100/、v100/、analysis/和figures/。已有输出目录不作为新的练习目录反复运行;需要从头练习时重新解压,已有任务则沿原目录恢复。

1 控制程序退出,计算是否停止#

本包的p100-start用exit_on_submit=True提交后返回,Slurm作业继续存在;p100-resume重新加载原状态并跟踪、取回结果。

cat p100/p100-start-REPORT.json
cat p100/p100-resume-REPORT.json

恢复前后比较作业ID,比只看控制程序是否仍在运行更有用。恢复时保留同一目录、Machine配置和Task定义;如果只是准备重新练习整套流程,另解压一份。

2 一次受控失败与自动重试#

本例V100分支的第一个任务第一次在启动LAMMPS之前主动退出,第二次再执行真实计算。这样可以观察重试行为,不把未完成的第一次当作一次成功的科学计算。

cat v100/local/task-0/attempts.jsonl
cat v100/v100-REPORT.json
cat v100/local/task-0/result.json

machine.json设置retry_count=1,即首次尝试失败后最多再试1次。本例这个任务有2条执行记录,另外两个任务各1次;最终3份科学结果均来自实际完成的LAMMPS单点。

任务脚本中的退出码42与Slurm批处理包装脚本返回的1:0属于不同层次。遇到自己的任务失败时,应先看科学程序日志、任务标准输出和错误输出,再决定是否适合重试;相同错误反复提交并不会修正输入。

实际任务尝试次数及部分结果取回后的恢复

3 已取回一部分文件,如何继续#

本包的transfer_drill.py提供一个只针对本练习目录的受控传输练习:先把原3个P100任务的15份实际输出保存副本,再放回本练习的执行目录。它不会重新运行科学计算。

cat p100/TRANSFER-PARTIAL.json
cat p100/TRANSFER-RESUME-VERIFIED.json

实际在完成5份文件的原生移动后中断,剩余10份仍在执行目录;新控制进程恢复后,15份文件均与最初输出的SHA256一致,并且没有新Slurm作业。

需要单独练习时,在新目录完成p100-start和p100-resume后执行:

python transfer_drill.py prepare
python transfer_drill.py stop
python transfer_drill.py resume

stop是刻意设置的传输暂停点。练习调用真实文件移动接口并在一份结果移动完成后暂停,保留已取回和未取回两部分,随后由原生恢复流程继续。它不是复制几份示意文件来冒充新的计算结果,也不需要删除自己的正式算例来测试。

4 续传与误删恢复不同#

当前LocalContext会把指定输出移到本地。传输尚未结束时,可以沿原状态继续处理仍在执行目录的文件;但已经移到本地、又被自己删除的文件,原执行目录里可能也没有了。

这时需要先从自己保留的备份恢复,不能把重新运行控制程序当作远端必然有副本的保证。clean=False仅保留工作目录,不等于所有已取回输出仍在那里。

ls p100/local/task-0
ls p100/transfer-originals/task-0

transfer-originals是本练习脚本明确创建的副本;正式工作应自行决定结果备份的位置和方式。不要把案例中的传输练习直接套到其他用户或其他项目目录。

5 带入自己的程序#

保持Machine、Resources、Task各司其职,先用一个小任务核对往返文件名和完成条件,再扩大任务列表。重启或重试后,仍需检查科学程序是否真正正常结束、输出是否完整、能量和力是否合理。

本例提供可复现的工作流行为,未把PBS/LSF/云平台的模板配置当作这些平台上的实际任务。使用其他上下文时,按其真实文件传输语义设置保留与备份策略。恢复接口说明见DPDispatcher官方Python API。

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

查看配图

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

100%查看原图 ↗