Troubleshooting(常见问题与排查)#
Status: active
Audience: Users / Developers / Infra
Last-Updated: 2026-06-10
1. 目的与范围#
本页用于快速定位 DP-EVA 在 Train/Infer/Feature/Collect/Analysis 过程中出现的问题,给出“先看哪里、再排什么”的最短路径。
2. 相关方#
使用者:运行工作流、收集日志与复现问题
开发者:维护错误提示、输入校验与日志锚点
平台维护:处理 Slurm 队列与 DeepMD 环境问题
3. 总体排查顺序(强制建议)#
确认当前工作目录与配置文件路径(相对路径解析是否正确)
定位对应工作流的日志文件(Train/Infer/Feature/Collect)
判断是否出现完成标记(见 3.1)
若失败来自外部命令(
dp/Slurm),先定位外部命令报错,再回到配置与输入数据
3.1 任务完成锚点#
DP-EVA 以统一完成标记作为应用层完成锚点:
DPEVA_TAG: WORKFLOW_FINISHED
没有该标记时,优先认为任务“未成功结束”,需要继续追踪日志中的异常堆栈或外部命令错误输出。
3.2 选择重跑方式#
先保存错误日志,确认旧进程或 Slurm 作业已结束,再决定是否重用输出目录。
--force 或移动目录都不会取消仍在运行的作业。Quickstart 的默认重新开始方式见
入门指南。
场景 |
当前支持的做法 |
|---|---|
想从头重做小型示例 |
备份整个示例工作目录,从第一阶段重新运行 |
Feature/Infer 中断,清单仍为未终结且非 |
配置、输入、运行代码证据一致时,可指定原 |
Feature/Infer 已记录 |
不能 resume;排除原因后,用原 |
Slurm 清单为 |
先查调度器状态与作业日志,不能把 CLI 返回当作计算完成;当前不支持 scheduler resume,重新提交前确认旧作业结束 |
Train 或 Collect 失败 |
没有统一的 |
保留成功阶段时,只复用已确认成功且与当前配置、输入匹配的产物。沿
feature → train → infer → collect 的示例操作时,实际依赖还需分别核对:
更换候选池要重建对应描述符和推理结果;更换训练数据或训练模型后应重新训练、
推理,再采集。更换 Feature 基座模型则需要重建描述符。不要仅凭目录存在判断
上游已成功,也不要从未结束的 Slurm 作业输出中启动下游阶段。
4. 环境类问题#
4.1 dp: command not found#
症状:
作业日志出现
dp: command not found
原因:
DeepMD-kit 环境未加载或未写入
PATH
处理:
Local:在当前 shell 环境中先
dp --version验证Slurm:将环境加载写入
submission.env_setup(不要依赖交互式 shell)
4.2 DeepMD 版本不匹配/行为差异#
症状:
dp命令存在但输出/参数行为与预期不一致
处理:
记录
dp --version输出与运行环境信息(CUDA/驱动)若为集群,建议固定模块版本或 Conda 环境版本
5. 数据类问题(dpdata / Multi DataPool)#
5.1 dpdata 目录结构不符合预期#
症状:
Feature/Infer/Collect 报“找不到系统/空数据/系统数为 0”
处理:
检查数据目录是否包含
type.raw/type_map.raw与set.000/*.npyMulti DataPool 场景确认目录层级为:
Pool/System/set.000
5.2 type_map 不一致导致元素映射错误#
症状:
推理结果异常(能量/力量级明显不对)
部分 system 加载失败
处理:
确认训练集与候选池在
type_map.raw的元素顺序一致Analysis 的
type_map必须与训练/数据一致
5.3 deepmd/lmdb 输入无法加载或被拒绝#
症状:
load_systems报DatasetLoadError,提示 "Reading 'deepmd/lmdb' requires dpdata>=1.1"Feature 的
eval-desc/embed在提交前报 "cannot consume a DeepMD LMDB dataset"dpeva infer在解析旧 LMDB 明细时可能报缺少frame_nlocs/frame_system_idsClean 在 LMDB 缺少
frame_system_ids/system_info时会拒绝猜测原始 system 划分
处理:
先跑
dpeva doctor --json:dpdata.lmdb检查为ok表示当前环境可读 LMDB; 为unavailable时升级到dpdata>=1.1(预置环境需重建或补装)数据路径按 deepmd-kit 的判定规则识别:目录名以
.lmdb结尾,或目录内含data.mdbLMDB 不保存目录级体系身份,读回结果按组成分组;需要逐 system 统计或
target_systems=筛选时,改用同一数据集的deepmd/npy/npy/mixed副本dp eval-desc/dp embed上游不支持 LMDB;Feature 工作流请指向 npy/mixed 副本, 或使用进程内DescriptorGenerator路径。上游跟踪 issue: deepmodeling/deepmd-kit#6034。 2026-10-22 复核mastercommita78bdfe8,issue 仍 open,尚无实现 PR。训练(
dp train)支持 LMDB,但training_data.systems必须是单个 LMDB 路径; 不要把多个 LMDB 放在一个容器目录里让 DP-EVA 展开。SAI 200-step execution A/B(JobID1893783)已证明两条训练路径均可完成并写出 checkpoint;短程 lcurve 受随机采样影响,不能据此声称训练曲线逐位等价。dp test自报的聚合指标在 LMDB 上有效;带frame_nlocs/frame_system_ids的 LMDB 可由dpeva infer/analysis解析逐帧明细。缺失元数据时 parser 会 fail-loud,不会猜测归属test + deepmd/lmdb已由 DeepMD 3.2.0 CPU contract 与 SAI npy↔lmdb A/B 证据晋级 supported。DeepMD-kit 3.2.0 的 mixed-nloc-d输出可能只有首个[nloc=...]header;parser 仅在总行数与帧索引完全一致时按组序归属,否则 报错。clean在 LMDB 带frame_system_ids元数据时可用;缺失时请补齐元数据或使用 npy/mixed 副本。同一 source system 内 atom count 不同的混合帧仍会被clean拒绝合并;同 atom count、不同组成的 mixed 帧会保留real_atom_types。
6. 作业与调度类问题(Slurm)#
6.1 sbatch 提交失败#
症状:
sbatch: error: ...
处理:
检查
partition/qos/account是否符合策略GPU/CPU 资源字段是否与分区匹配
检查提交目录权限与配额
6.2 长时间 pending#
处理:
使用
squeue -j <jobid>查看原因(资源不足/策略限制)适当降低资源申请(缩短 walltime、减少 GPU/CPU)
6.3 日志不落盘/找不到日志文件#
处理:
以提交目录为准确认
.out位置(建议固定work_dir并在其中提交)对照
docs/source/guides/slurm.md的常见日志命名约定
7. 数值类问题(NaN/Inf/聚类不收敛)#
7.1 UQ 分布异常或全 NaN/Inf#
处理:
优先检查推理输出是否完整(
results.*.out是否存在)检查是否存在失败模型(某个模型推理输出缺失会影响方差/UQ)
若输入数据包含异常结构(box/coord 形状不一致),先修复数据
7.2 聚类不收敛或采样结果为空#
处理:
检查
sampler_type与参数组是否匹配(direct vs 2-direct)降低
direct_n_clusters或调整阈值相关参数若候选池数量过少或被联合采样去重,采样数少于目标是预期行为
8. 变更记录#
2026-02-18:补齐 Troubleshooting 的结构化排查路径与四类常见问题处理建议。