DeePMD-kit 是深度学习分子动力学(Deep Potential Molecular Dynamics,DeePMD)方法的开源实现,由王涵团队与 DeepModeling 社区共同开发。它用神经网络拟合第一性原理(DFT)计算得到的体系能量与原子力,得到一个可在分子动力学模拟中直接调用的「深度势能模型」:精度接近 DFT,速度接近经典力场,可将可模拟体系从数百原子、百皮秒量级扩展到数十万原子、纳秒量级。工具覆盖完整链路:dpdata 数据转换 → dp train 训练 → dp freeze 冻结 → dp compress 压缩 → LAMMPS/GROMACS/OpenMM 等引擎产线模拟,并配合 model deviation 与 DP-GEN 实现多模型误差估计与主动学习。本文从安装、训练、部署到选型逐一给出可执行的操作指南,所有命令与配置基于官方文档整理。
掌握 DeePMD-kit,你就能把量子化学精度接入大规模分子动力学产线,这是 AI for Science 方向计算材料、电池与药物研发岗位的核心技能之一。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 DeePMD-kit:第一性原理太慢、经典力场不准 → 神经网络势
第一性原理分子动力学(AIMD)每一步都要重复求解电子结构方程,DFT 计算 100–1000 原子体系单步耗时在秒到分钟级别,一天只能推进几皮秒,而研究相变、离子输运、化学反应通常需要数百皮秒以上的轨迹,算力成本极高。经典力场(如 LJ、EAM、CHARMM)虽然快,但把原子间相互作用固定为经验函数形式,无法描述化学键断裂、极化变化、电荷转移等过程,体系一旦发生反应或相变就失效。
DeePMD 用神经网络把「原子局部环境 → 原子能量/力」的映射学习出来。训练数据来自 DFT,因此精度由 DFT 决定;推理只是一串矩阵乘法,速度与经典力场同量级,在 GPU 上可模拟数十万原子达到纳秒级,比 AIMD 快约三个数量级。神经网络势天然可微,能同时输出能量、力与应力,满足 NPT、NVE 等系综需求。
与 MACE 等学术型 Python 势能工具相比,DeePMD-kit 更像一条「生产管线」:自带数据转换、训练、冻结、压缩与 LAMMPS/GROMACS/OpenMM/ABACUS 多引擎接口,二十分钟可以从零跑通全流程;代价是底层后端切换(v2 用 TensorFlow、v3 用 PyTorch)会带来版本迁移成本。
安装与环境配置:4 步就绪
1. 创建 conda 环境。DeepModeling 官方 conda 频道提供 CPU/GPU 预编译包,GPU 版使用 https://conda.deepmodeling.com 频道,CPU 版使用 .org 频道。GPU 机器请先确认驱动对应的 CUDA 版本。
2. 安装 LAMMPS 与 dpdata。官方频道提供内置 pair_style deepmd 的预编译 LAMMPS;dpdata 用于把 DFT 输出转换为训练数据。v3 走 pip 路线时先装好匹配 CUDA 的 PyTorch。
3. 验证安装。dp --version 能输出版本号即为成功;dp train -h 可查看训练命令帮助。GPU 可用性可用 nvidia-smi 确认。
4. 项目规划。训练需要的数据是「构型 + 对应的 DFT 能量与原子力」,可来自 VASP、ABACUS、QE、CP2K 等,也可直接用社区公开数据集。
# conda 安装(推荐,官方频道预编译)conda create -n deepmd deepmd-kit --channel https://conda.deepmodeling.orgconda activate deepmd# 安装内置 pair_style deepmd 的 LAMMPS 与数据转换工具conda install lammps --channel https://conda.deepmodeling.orgpip install dpdata# 验证dp --version
快速上手:10 分钟跑通「数据→训练→冻结→MD」
最小可用流程的思路是:把一批带 DFT 能量/力的构型转成 DeepMD 数据格式,写一个 input.json 描述神经网络结构,训练后用 dp freeze 冻结成推理图模型 graph.pb,最后在 LAMMPS 中加载它跑分子动力学。以下以 VASP 输出(OUTCAR)为例:
1. 数据准备。用 dpdata 读取 OUTCAR,随机划分训练集与验证集,输出为 data/train、data/valid 两个 npy 目录。数据量建议至少数百条构型(水体系官方示例常用 5000+ 帧)。
2. 写 input.json。核心是 model 部分:type_map 列出元素(顺序即元素类型编号),descriptor 用 se_e2_a 描述符(把每个原子的近邻环境编码为网络输入),sel 按元素顺序给出截止半径内近邻原子数上限,fitting_net 是拟合原子能量的神经网络。
3. 训练。dp train input.json,日志写入当前目录 log 下。能量/力的损失权重通过 loss 控制:start_pref_f 取 1000、limit_pref_f 取 1,表示训练初期重点拟合力。
4. 冻结与验证。dp freeze -o graph.pb 输出推理图;dp test 在验证集上输出能量/力 RMSE(均方根误差)。水体系典型 f_rmse 在 0.1 eV/Å 量级。
5. 压缩(可选)。dp compress input.json 压缩嵌入网络,大体系推理提速明显,精度损失通常很小。
6. 跑 MD。LAMMPS 中写 pair_style deepmd graph.pb 即可。pair_coeff 第二行的作用是把 LAMMPS 原子类型映射到 type_map 中的元素。
进阶技巧:用不同随机种子训练 3–4 个模型,dp test -m graph.0.pb graph.1.pb graph.2.pb ... 计算 model deviation(多个模型预测力的标准差),这是官方推荐的误差估计手段;超大体系可改用 se_atten 注意力描述符,训练成本可控且长程精度更好。
# 数据转换:用 dpdata 将 VASP 的 OUTCAR 转为 DeePMD 格式import dpdata, numpy as npsys = dpdata.LabeledSystem("OUTCAR", fmt="vasp/outcar")idx = np.random.choice(sys.get_nframes(), 6000, replace=False)sys.sub_system(idx).to_deepmd_npy("data/train")
{ "model": { "type_map": ["H", "O"], "descriptor": { "type": "se_e2_a", "sel": [6, 12], "rcut": 6.0, "rcut_smth": 0.5 }, "fitting_net": { "neuron": [240, 240, 240] } }, "learning_rate": { "type": "exp", "decay_steps": 5000, "value": 0.001 }, "loss": { "type": "ener", "start_pref_e": 0.02, "limit_pref_e": 1, "start_pref_f": 1000, "limit_pref_f": 1 }, "training": { "training_data": { "systems": ["data/train"] }, "validation_data": { "systems": ["data/valid"] }, "numb_steps": 100000, "batch_size": 4 }}
# 训练 → 冻结 → 压缩 → 验证dp train input.jsondp freeze -o graph.pbdp compress input.jsondp test -m graph.pb -s data/valid -n 100 # 输出 e_rmse / f_rmse
units metalatom_style atomicboundary p p pread_data water.lmppair_style deepmd graph.pbpair_coeff * * graph.pb H Otimestep 0.0005fix 1 all nvt temp 300 300 0.1run 10000
核心能力详解:5 大支柱
支柱一·端到端训练管线。从 DFT 原始输出(VASP、ABACUS、QE、CP2K、Gaussian 等 50+ 格式)到可部署图模型,官方工具链全部打通:dpdata 负责格式转换与数据划分,dp train 支持训练/验证集分离、学习率衰减、随机种子复现,dp freeze 把 TensorFlow/PyTorch 训练产物冻结为单一 graph.pb,dp compress 再做推理优化。单一 input.json 控制全部超参数,便于版本管理。
支柱二·描述符与拟合网络。描述符(descriptor)把原子局部环境编码为神经网络输入特征。se_e2_a 是两体嵌入平滑描述符,是默认与最常用的选择;se_e3 支持三体环境;se_atten 引入注意力机制,适合大体系与长程相互作用;hybrid 可混合多种描述符。拟合网络(fitting_net)除能量(可同时输出力与应力)外,还支持偶极矩、极化率等性质,可用于光谱性质预测。
支柱三·多引擎生产接口。同一份 graph.pb 可直接被 LAMMPS(pair_style deepmd)、GROMACS、OpenMM、ABACUS、ASE 调用,无需改模型、无需导出其他格式。LAMMPS 配合内置 pair_style 即可跑 NVT/NPT/NVE,该接口由官方随 LAMMPS 发布维护。
支柱四·不确定度与主动学习。model deviation 用多个独立训练模型对同一构型预测力的标准差来量化「模型有多不确定」。当偏差超过阈值时说明构型超出训练分布,需补充 DFT 数据。DP-GEN 把「采样 → 标注 → 训练」自动化,可在无人干预下迭代构建高可靠势能模型,这是 DeePMD 方法在工业落地中最受认可的部分。
支柱五·v3 的 PyTorch 后端与 DP Compiler。v3 将训练后端从 TensorFlow 切换为 PyTorch,训练 API 与分布式扩展能力提升;DP Compiler 可把冻结模型编译为独立 C++ 代码,部署时不再依赖任何深度学习框架运行时,适合嵌入大规模产线。
生产部署与监控:从上线到运维
LAMMPS 产线部署。最直接的部署方式是 conda 安装官方频道预编译 LAMMPS(内置 pair_style deepmd),在生产机上执行 dp test -m graph.pb -s 验证集 -n 100 复核模型精度,确认 f_rmse 达标后即可接入批量 MD 作业。大体系建议先 dp compress,再把压缩模型路径写入 LAMMPS 输入。多 GPU 可并行跑多个副本或分区块采样,注意 LAMMPS 的 MPI 划分与 deepmd 的 GPU 卡绑定(如 CUDA_VISIBLE_DEVICES)。
编译接入部署。v3 的 DP Compiler 面向高吞吐场景:把训练好的模型编译成 C++ 源码,与 LAMMPS 或自研模拟器静态链接,去掉 Python 与 PyTorch 运行时,单机推理开销与启动时间显著下降,适合大规模参数扫描与高通量筛选作业。
可观测性。训练阶段盯 dp test 输出的 e_rmse/f_rmse,而非只盯训练 loss;运行阶段用 2–4 个独立模型对轨迹定期计算 model deviation,max_devi_f 超过预设阈值(通常在 0.1–0.3 eV/Å 量级)时标记构型并触发 DFT 补算。DP-GEN 流水线可将这一闭环自动化,并记录每轮数据分布变化,形成势模型的可追溯版本记录。
<p class="para-label">避坑清单:</p>
<ul class="dash-list"><li>外推风险:DP 是插值模型,训练数据未覆盖的化学环境会给出无物理意义结果,务必用多模型 model deviation 监控运行轨迹。</li><li>版本与依赖:v2 基于 TensorFlow 2、v3 基于 PyTorch,GPU 安装必须匹配 CUDA 版本;v3 对 input.json 部分字段有调整,升级后先做回归测试。</li><li>sel 参数:descriptor 的 sel 是近邻原子数上限,取得小于实际配位数会漏邻居,导致力预测错误,按体系配位数合理配置并用 dp test 复核。</li><li>损失权重:start_pref_f 初值 1000 是官方默认,随意调小会导致力拟合不足,MD 轨迹在几十步内发散。</li></ul>
| 维度 | DeePMD-kit | MACE | NequIP | SchNetPack |
|---|---|---|---|---|
| 定位 | 生产级 DP 势训练与 MD 产线集成 | 等变图神经网络势(前沿精度) | 等变消息传递神经势 | 通用 ML 势 PyTorch 工具包 |
| 训练后端 | v3 为 PyTorch(v2 为 TF2) | PyTorch | PyTorch | PyTorch |
| 模型架构 | se_e2_a / se_atten 嵌入描述符 | MACE 等变消息传递 | E3 等变卷积 | 连续滤波卷积 |
| 数据效率 | 大样本稳健,工业验证多 | 小样本表现突出 | 小样本表现突出 | 中等 |
| MD 集成 | LAMMPS/GROMACS/OpenMM/ABACUS/ASE | LAMMPS/ASE | ASE 为主 | ASE/OpenMM |
| 生产部署 | freeze/compress 图模型;v3 DP Compiler | 需 PyTorch 运行时 | 需 PyTorch 运行时 | 需 PyTorch 运行时 |
| License | LGPL-3.0 | MIT | MIT | MIT |
| 适合谁 | 材料/化学生产团队、MD 产线 | 小数据高精度科研团队 | 方法学研究 | 快速原型与教学 |
选型建议:需要跑大规模产线 MD、要求 LAMMPS 无缝衔接、希望一条命令完成冻结与压缩部署,选 DeePMD-kit;小数据集上追求精度上限、做方法学研究,优先试 MACE 或 NequIP;想快速做势函数原型并复用通用 PyTorch 生态,选 SchNetPack。
版本迭代
DeePMD-kit 从 2017 年发布以来经历了三个主要阶段——v0/v1 确立「数据→训练→冻结→LAMMPS」标准工作流;v2 重构后端为 TensorFlow 2,补齐注意力描述符、偶极/极化率拟合与 GROMACS/OpenMM 接口;v3 以 PyTorch 重写训练后端并引入 DP Compiler 编译部署。以下版本与日期按官方 Release 记录整理(截至训练数据,可能已有更新版本)。
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| v1.0.0 | 2020 | 首个稳定版 | 确立 dp train/freeze/test 命令与 LAMMPS 接口标准流程,软件论文发表于 Comput. Phys. Commun. |
| v2.0.0 | 2021 | 后端迁移至 TensorFlow 2 | 训练/推理管线重构,新增 se_atten 注意力描述符,支持偶极矩、极化率拟合 |
| v2.2.0 | 2023 | 效率与生态扩展 | 引入 type embedding 与混合描述符,新增 GROMACS/OpenMM/ASE 接口,混合精度支持 |
| v2.2.9 | 2024 | 稳定维护版 | 数值稳定性修复、CUDA 兼容与打包更新,大量生产环境沿用此线 |
| v3.0.0 | 2025 | PyTorch 后端重构 | 训练后端由 TF 切换为 PyTorch,新增 DP Compiler 编译部署,分布式训练能力提升 |
该领域没有类似 MMLU 的公开榜单,版本间的核心差异在工程架构而非精度基准——官方论文与文档公布的典型水平是 DP 模型相对 DFT 的能量 RMSE 约 1 meV/atom、原子力约 0.1 eV/Å 量级(如水的 DPMD 模型,Phys. Rev. Lett. 120, 143001 (2018)),这一精度量级在 v2→v3 中保持稳定。选型建议:新项目直接用 v3 起步;已有成熟 v2.2.x 生产链路的团队不必急于迁移,待回归测试通过后再升级。
AI 应用场景
电池材料离子输运模拟
阶段:势能面学习 / 材料模拟
解决的问题:锂离子在固态电解质中的迁移需要纳秒级轨迹与 DFT 级精度,AIMD 一步 1–2 分钟、只能跑几百皮秒,无法统计离子扩散系数;经典力场又无法刻画 Li+ 迁移中的极化效应。
具体案例:对石榴石型电解质(如 Li7La3Zr2O12)的 DFT 数据进行 DP 训练后,在 LAMMPS 中跑 NVT 轨迹计算 Li+ 均方位移与电导率,模拟规模从 AIMD 的数百原子/百皮秒提升至数万原子/纳秒,时间成本下降约三个数量级,电导率预测与实验同量级。
含能材料分解与催化反应机理模拟
阶段:反应动力学 / 断键成键建模
解决的问题:高能材料热分解涉及化学键断裂,经典力场无法描述反应路径;DFT-MD 又因高温、大体系而算不动。
具体案例:对炸药分子及其分解产物的 DFT 反应轨迹构建 DP 势,在高温 NVE 下模拟毫秒?—实际为纳秒尺度历程?—的分解路径,可统计首键断裂时间与产物分布,反应势垒误差控制在几十 meV 量级,支撑配方筛选,单条轨迹成本仅为 DFT-MD 的千分之一。
主动学习自动化构建可迁移势(DP-GEN)
阶段:主动学习 / 数据集迭代
解决的问题:人工挑选训练数据容易漏掉相空间的高风险区域,导致势模型在界面、缺陷等关键环境失效。
具体案例:DP-GEN 自动循环执行「分子动力学采样 → 多模型 model deviation 筛选 → DFT 补标 → 重训练」,把原先工程师数周的势构建迭代压缩到小时级;该方法已用于高熵合金、氧化物等多组元体系的势构建,产出模型的适用范围(化学环境覆盖)显著大于人工选样。
常见误区
误区我手里有几千条 DFT 构型,全部丢进去训练,模型一定更准。
正解覆盖度比数量更重要。DP 是插值模型,若大部分数据来自相近的化学环境,冗余样本边际收益很低;而训练数据未覆盖的区域(如新的键长、高价态、断键构型)仍会预测失真。官方推荐配合 model deviation 检查数据空缺,用 DP-GEN 主动采样补充「模型最不确定」的构型,性价比远高于盲目加数据。
为何常见:直观上数据越多越好是机器学习的一般直觉,但分子动力学对「分布外」极为敏感,人们容易忽略势能面的高维稀疏性。
误区只要把势训练好,不同温度、压强、组分都能直接拿来算。
正解神经网络势没有物理约束,超出训练数据分布后会给出无物理意义的结果。官方工作流要求用多个独立模型的 model deviation 监控:当 max_devi_f 超过阈值(通常在 0.1–0.3 eV/Å 量级)时,说明当前构型超出势的适用域,需要补充 DFT 数据重新训练。迁移到新工况前,必须在目标状态附近采样验证。
为何常见:经典力场具有解析形式、可推测外推行为,而神经网络势的「记忆区间」不直观,新手容易把拟合能力当作泛化能力。
误区v2 写的 input.json 和 dp 命令,装好 v3 后原样照跑就行。
正解v3 将训练后端从 TensorFlow 切换为 PyTorch,部分配置字段、输出日志格式与命令行为有调整,属于后端级重构而非小版本延续。官方提供升级说明,但本质上是需要回归测试的迁移:升级后先在测试集上对比 v2/v3 的 e_rmse、f_rmse 与 MD 轨迹一致性,再切换生产任务。
为何常见:版本号「3.0」容易让人以为是 2.x 的延续,而包名相同(deepmd-kit)也掩盖了底层依赖差异。
误区训练损失降到很小,模型一定能复现 DFT 的动力学行为。
正解训练 loss 是能量、力损失的加权平均,权重由 start_pref 控制;loss 低只代表在训练集上拟合好,不能代表长程动力学稳定与分布外可靠。官方实践是先 dp test 看验证集 f_rmse(通常应在 0.1 eV/Å 量级,视体系而定),再跑 100 ps 以上 MD 检查能量漂移与构型合理性,最后用 model deviation 评估适用边界。
为何常见:深度学习中 loss 是唯一优化目标,但在势函数场景下「拟合误差小」与「动力学可迁移」之间还有很长的验证距离。
面试题
Q1. 训练 DeePMD-kit 势能模型时,标准配置文件通常命名为什么?
- A.input.json← 正确答案
- B.config.yaml
- C.settings.ini
- D.setup.toml
答案:A。DeePMD-kit 所有官方示例与文档均以 input.json 为训练配置文件,包含 model、learning_rate、loss、training 四大部分;修改后运行 dp train input.json 启动训练。其他文件名无法被默认命令识别。
Q2. 训练完成后通过 dp freeze 得到的部署模型文件是什么?
- A.graph.pb← 正确答案
- B.best.pth
- C.frozen.ckpt
- D.model.h5
答案:A。dp freeze 将训练好的权重打包为推理图模型 graph.pb(默认输出名),它是后续 LAMMPS pair_style deepmd、dp test、dp compress 的统一输入文件;best.pth 等是其他框架习惯的命名。
Q3. 以下哪些软件可以直接调用 DeePMD 训练好的势模型进行模拟?
- A.LAMMPS← 正确答案
- B.GROMACS← 正确答案
- C.ABACUS← 正确答案
- D.VMD
答案:ABC。LAMMPS 通过 pair_style deepmd 直接加载 graph.pb;GROMACS、ABACUS 均提供 DeePMD 接口;VMD 是轨迹可视化与渲染工具,不执行分子动力学模拟。
Q4. DeePMD-kit v3 相比 v2 最核心的技术变化是什么?
- A.训练后端由 TensorFlow 切换为 PyTorch← 正确答案
- B.取消了对 LAMMPS 的接口支持
- C.彻底移除了能量与力的训练功能
- D.改用 Fortran 语言重写核心计算
答案:A。v3 的核心变化是用 PyTorch 重写训练后端,并推出 DP Compiler 编译部署能力;LAMMPS 接口与能量/力训练能力均保留。B、C、D 与官方发布说明相反,均不成立。
Q5. 下列哪些性质可以通过 DeePMD-kit 的 fitting_net 进行拟合?
- A.体系能量(ener)← 正确答案
- B.偶极矩(dipole)← 正确答案
- C.极化率(polar)← 正确答案
- D.电子波函数相因子
答案:ABC。官方 fitting_net 支持能量(同时输出原子力与应力)、偶极矩、极化率等可观测性质;波函数相因子不在 DeepMD 势函数的输出范围内。
Q6. 判断训练好的 DP 模型对某个新构型的预测是否可信(是否处于适用域),官方推荐的做法是?
- A.比较多个独立模型的 model deviation← 正确答案
- B.观察训练 loss 是否降到足够小
- C.增大 rcut 之后重新做预测
- D.降低体系温度再试算一次
答案:A。单个模型无法给出不确定度,model deviation(多个独立模型预测力的标准差)是官方主动学习流程的核心判据;偏差超过阈值即认为构型超出训练分布。loss 只反映训练集拟合,不能用于判断新构型的可信度。
Q7. input.json 中 descriptor 的 "sel" 取 [6, 12] 表示什么?
- A.H、O 两种元素截止半径内的最大近邻原子数← 正确答案
- B.嵌入网络与拟合网络的隐藏层宽度
- C.训练集与验证集的构型数量
- D.rcut 与 rcut_smth 之间的插值点数
答案:A。sel 为按 type_map 元素顺序排列的近邻原子数上限列表,[6, 12] 对应 H 最多取 6 个近邻、O 最多 12 个。设置小于实际配位数会截断邻居导致力预测错误,应结合体系配位数确定。
Q8. 关于 dp compress 压缩模型,下列说法正确的是?
- A.可降低模型推理开销← 正确答案
- B.精度损失通常很小← 正确答案
- C.只在 v2 版本中可用
- D.对大体系 MD 提速明显← 正确答案
答案:ABD。dp compress 通过精简嵌入网络参数减少推理计算量,压缩后精度损失通常很小,大体系单步 MD 提速明显;v3 同样支持压缩能力,「只在 v2 可用」表述错误。
Q9. dpdata 包在 DeePMD 工作流中的主要作用是?
- A.将 DFT 计算输出转为 DeePMD 数据← 正确答案
- B.负责深度势模型的训练
- C.生成 MD 轨迹文件
- D.可视化原子结构文件
答案:A。dpdata 负责把 VASP、ABACUS、QE、Gaussian 等 50+ 种第一性原理输出格式统一转换为 DeePMD 所需的 npy 数据集并支持训练/验证集划分;模型训练由 dp train 完成,轨迹生成与可视化由 MD 引擎和 VMD 等完成。
Q10. LAMMPS 中加载 DeePMD 势模型需要设置哪种 pair_style?
- A.pair_style deepmd graph.pb← 正确答案
- B.pair_style lj/cut 势阱
- C.pair_style eam/alloy
- D.pair_style meam/spline
答案:A。pair_style deepmd 后跟模型文件路径即可加载图模型,配合 pair_coeff 完成元素类型映射;其余选项均为经典力场形式,无法加载神经网络势。
参考来源
- webpageDeepModeling 官网社区生态与项目入口