-
Notifications
You must be signed in to change notification settings - Fork 648
v3.2.0b0 #5499
Highlights
DPA4/SeZM
We are excited to introduce DPA4/SeZM in DeePMD-kit, bringing the next generation of high-accuracy, high-efficiency machine-learning interatomic potentials to the Deep Modeling community.
DPA4 is designed for the era of Large Atomistic Models (LAMs): it pushes the accuracy-cost frontier by combining strong SE(3)-equivariant modeling power with dramatically reduced training cost. Built around an EMFA SO(2)-equivariant convolution, DPA4 uses edge-conditioned low-rank equivariant products, multi-focus nonlinear message updates, and envelope-gated attention to deliver excellent accuracy without relying on oversized models or massive training budgets.
In benchmark results reported in the DPA4 paper, DPA4-Pro achieves the best Combined Performance Score on Matbench Discovery, while compact DPA4 variants outperform much larger baselines with far fewer parameters and substantially lower training compute. On SPICE-MACE-OFF, DPA4 also sets a new accuracy-cost Pareto frontier for molecular energy and force prediction.
image
Highlights
- New DPA4/SeZM descriptor for the PyTorch backend of DeePMD-kit.
- State-of-the-art performance on Matbench Discovery and SPICE-MACE-OFF benchmarks.
- Much lower training cost compared with previous leading equivariant models.
- Compiler-friendly training path with native support for
torch.compile, enabling up to about 3x wall-clock speedup in reported settings. - Efficient SO(2)-equivariant design in local edge frames, reducing the cost of equivariant angular computation.
- Lebedev-grid projection to preserve SO(3) equivariance through nonlinear operations.
- Native ZBL short-range repulsion support, improving robustness for close-contact and extreme configurations.
DPA4 shows that top-tier accuracy no longer has to come with top-tier compute cost. With this release, DeePMD-kit makes the new DPA4/SeZM architecture available to researchers and developers who want to train accurate, efficient, and physically consistent interatomic potentials for materials, molecules, and future large atomistic model pretraining.
Learn more in the paper: DPA4: Pushing the Accuracy-Cost Frontier of Interatomic Potentials with EMFA SO(2) Convolution.
New features in models and training strategies
- DPA3 now supports
add_chg_spin_ebd,sequential_update,use_default_pf, and decoupling ofcharge_spinfrom fparam, improving its handling of charge and spin information. - The property fitting network now supports element-type-wise bias.
- New loss-related features include force L2 norm loss, MAE loss, and support for three-value Huber delta.
- The PyTorch backend now includes full validation support, including validation on LMDB-format datasets. Training stability and optimization are also improved through the addition of EMA shadow models, the WSD learning-rate scheduler, and updates to the HybridMuon optimizer. LMDB support was added to the pt/dpmodel data pipeline, including a new LMDB dataloader and max/filter modes.
Beta: The exportable PyTorch backend (pt_expt)
An exportable PyTorch backend (pt_expt) is added based on the Array API, torch.export, and torch.compile. The usage of the Array API makes it accessible to almost all models. The old PyTorch backend will be deprecated in the future, since TorchScript has been deprecated by the PyTorch team. Try the new backend using dp --pt-expt train input.json.
The exportable PyTorch backend received a major expansion in this release, covering new model types, training workflows, evaluation interfaces, data handling, and deployment support. It now supports Linear Energy Model, DeepSpin, multi-task training, missing losses for spin/DOS/tensor/property tasks, and new evaluation APIs such as eval_typeebd, eval_descriptor, and eval_fitting_last_layer. The backend also adds support for dp compress, dp finetune, dp change-bias, .pt training checkpoints in DeepEval, LMDB datasets, pluggable neighbor-list strategies, and efficient O(N) vesin neighbor lists for Python/ASE inference. In addition, .pt2 AOTInductor-based C/C++ inference is now available for DPA1/DPA2/DPA3 models, with improved export/loading tests and multi-rank LAMMPS support for GNN models. Together, these changes make pt_expt much closer to a complete experimental PyTorch backend for training, evaluation, deployment, and production MD workflows.
Beta: Model training in the JAX backend
The JAX backend now supports model training. In the previous versions, it only supported inference. Same as the exportable PyTorch backend, the JAX backend is built on the Array API, making it accessible to almost all models. Try JAX training using dp --jax train input.json.
Agent Skills
Official Agent Skills for DeePMD-kit are now available in the skills directory, introduced as part of this work. Installing these skills empowers your agents to seamlessly interact with DeePMD-kit, enabling them to train Deep Potential models and execute molecular dynamics simulations.
What's Changed
Breaking Changes
- breaking(gmx): remove in-tree GROMACS patch integration by @njzjz-bot in breaking(gmx): remove in-tree GROMACS patch integration #5377
New Features
- feat(dp, pt): add force l2 norm loss & mae loss by @iProzd in feat(dp, pt): add force l2 norm loss & mae loss #5294
- feat(pt_expt): add linear energy model by @wanghan-iapcm in feat(pt_expt): add linear energy model #5317
- feat(pt_expt): implement DeepSpin model in pt_expt backend by @wanghan-iapcm in feat(pt_expt): implement DeepSpin model in pt_expt backend #5293
- feat(pt_expt): add dp compress support for pt_expt backend by @wanghan-iapcm in feat(pt_expt): add dp compress support for pt_expt backend #5323
- feat(pt_expt): add dp finetune support by @wanghan-iapcm in feat(pt_expt): add dp finetune support #5331
- feat(c++,pt-expt): add .pt2 (AOTInductor) C/C++ inference with DPA1/DPA2/DPA3 support by @wanghan-iapcm in feat(c++,pt-expt): add .pt2 (AOTInductor) C/C++ inference with DPA1/DPA2/DPA3 support #5298
- feat(pt_expt): add dp change-bias support by @wanghan-iapcm in feat(pt_expt): add dp change-bias support #5330
- feat(c++,pt-expt): add DeepPotModelDevi C++ tests for .pt2 backend by @wanghan-iapcm in feat(c++,pt-expt): add DeepPotModelDevi C++ tests for .pt2 backend #5342
- feat(pt_expt): add missing losses (spin, DOS, tensor, property) by @wanghan-iapcm in feat(pt_expt): add missing losses (spin, DOS, tensor, property) #5345
- feat: add WSD LR Scheduler by @OutisLi in feat: add WSD LR Scheduler #5326
- feat(property): Support element type-wise bias in property fitting by @Chengqian-Zhang in feat(property): Support element type-wise bias in property fitting #5322
- feat(loss): support three-value huber delta by @OutisLi in feat(loss): support three-value huber delta #5329
- feat(pd): add add_chg_spin_ebd parameter to DescrptDPA3 by @HydrogenSulfate in feat(pd): add add_chg_spin_ebd parameter to DescrptDPA3 #5333
- test(pt_expt): add .pt2 (AOTInductor) unit tests and bug fixes by @wanghan-iapcm in test(pt_expt): add .pt2 (AOTInductor) unit tests and bug fixes #5334
- feat(pt/dpmodel): add lmdb dataloader by @iProzd in feat(pt/dpmodel): add lmdb dataloader #5283
- feat(pt_expt): add DeepSpin support for pt_expt backend by @wanghan-iapcm in feat(pt_expt): add DeepSpin support for pt_expt backend #5370
- feat(pt_expt): add eval_typeebd, eval_descriptor, eval_fitting_last_layer by @wanghan-iapcm in feat(pt_expt): add eval_typeebd, eval_descriptor, eval_fitting_last_layer #5391
- feat(pt_expt): multi-task training support by @wanghan-iapcm in feat(pt_expt): multi-task training support #5397
- feat(pt_expt): add LMDB dataset support by @wanghan-iapcm in feat(pt_expt): add LMDB dataset support #5408
- feat(pt): add full validation by @OutisLi in feat(pt): add full validation #5336
- feat(pt): full validation support lmdb format by @OutisLi in feat(pt): full validation support lmdb format #5419
- feat(pt/dpmodel): add max and filter mode for lmdb by @OutisLi in feat(pt/dpmodel): add max and filter mode for lmdb #5413
- feat(pt_expt): support .pt training checkpoints in DeepEval by @wanghan-iapcm in feat(pt_expt): support .pt training checkpoints in DeepEval #5423
- feat(pt_expt): make model.json optional in .pt2/.pte loading by @OutisLi in feat(pt_expt): make model.json optional in .pt2/.pte loading #5416
- feat(pt): add ema shadow model by @OutisLi in feat(pt): add ema shadow model #5420
- feat(pt/dpmodel): add sequential_update for dpa3 by @iProzd in feat(pt/dpmodel): add sequential_update for dpa3 #5355
- feat(pt/dpmodel): add use_default_pf by @iProzd in feat(pt/dpmodel): add use_default_pf #5356
- feat(dpa3): decouple charge_spin from fparam by @iProzd in feat(dpa3): decouple charge_spin from fparam #5431
- feat(jax): add training by @njzjz-bot in feat(jax): add training #5460
- feat(pt): Add DPA4/SeZM descriptor & model 🎉🎉🎉 by @OutisLi in feat(pt): Add DPA4/SeZM descriptor & model 🎉🎉🎉 #5448
- feat(pt_expt): pluggable NeighborList strategy + O(N) vesin neighbor list for Python/ASE inference by @wanghan-iapcm in feat(pt_expt): pluggable NeighborList strategy + O(N) vesin neighbor list for Python/ASE inference #5491
- feat(pt_expt): multi-rank LAMMPS support for GNN models (DPA3 / DPA2 / spin) by @wanghan-iapcm in feat(pt_expt): multi-rank LAMMPS support for GNN models (DPA3 / DPA2 / spin) #5430
- feat(train): show finish time in ETA logs by @OutisLi in feat(train): show finish time in ETA logs #5328
- feat(pt_expt): enhance per-module export tests + fix nframes symbol collision by @wanghan-iapcm in feat(pt_expt): enhance per-module export tests + fix nframes symbol collision #5367
- feat(pt): optimze HybridMuon by borrowing some ideas from deepseek v4 paper by @OutisLi in feat(pt): optimze HybridMuon by borrowing some ideas from deepseek v4 paper #5424
- chore(skills): import DeePMD-kit agent skills by @njzjz-bot in chore(skills): import DeePMD-kit agent skills #5437
Enhancement
- refactor: extract shared tabulate math, remove pt_expt→pt dependency by @wanghan-iapcm in refactor: extract shared tabulate math, remove pt_expt→pt dependency #5339
- refactor(pt_expt): use model API for inference, consistent file naming by @wanghan-iapcm in refactor(pt_expt): use model API for inference, consistent file naming #5354
- refactor: use Array API-compatible tabulate math by @njzjz-bot in refactor: use Array API-compatible tabulate math #5366
- perf(test): reduce redundant .pt2 compilations in GPU CI by @wanghan-iapcm in perf(test): reduce redundant .pt2 compilations in GPU CI #5379
- perf(pt2): optimize .pt2 C++ inference path by @wanghan-iapcm in perf(pt2): optimize .pt2 C++ inference path #5407
- perf(pt): optimize HybridMuon optimizer by @OutisLi in perf(pt): optimize HybridMuon optimizer #5412
- build(jax): split pinned cpu and gpu groups by @njzjz-bot in build(jax): split pinned cpu and gpu groups #5436
- set default timeout for pytest by @link89 in set default timeout for pytest #5265
- chore: add DPA-3.3-1M by @anyangml in chore: add DPA-3.3-1M #5489
Documentation
- docs: restructure and clarify learning-rate.md documentation by @OutisLi in docs: restructure and clarify learning-rate.md documentation #5276
- docs(argcheck): fix typos and wording in doc strings by @njzjz-bot in docs(argcheck): fix typos and wording in doc strings #5369
- docs: fix spelling typos in documentation by @njzjz-bot in docs: fix spelling typos in documentation #5387
- docs(discussions): add lightweight q-and-a discussion template by @njzjz-bot in docs(discussions): add lightweight q-and-a discussion template #5385
- docs: Update JAX backend documentation on training support by @njzjz in docs: Update JAX backend documentation on training support #5482
Build and release
- build(deps-dev): bump torch from 2.10.0 to 2.11.0 by @dependabot[bot] in build(deps-dev): bump torch from 2.10.0 to 2.11.0 #5347
- build(deps): bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in build(deps): bump actions/deploy-pages from 4 to 5 #5346
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in [pre-commit.ci] pre-commit autoupdate #5357
- build(deps): bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in build(deps): bump codecov/codecov-action from 5 to 6 #5363
- build(pyproject): adopt PEP 639 license metadata by @njzjz-bot in build(pyproject): adopt PEP 639 license metadata #5380
- CI: Update OS version in Read the Docs configuration by @njzjz in CI: Update OS version in Read the Docs configuration #5392
- build(deps): bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in build(deps): bump softprops/action-gh-release from 2 to 3 #5399
- build(deps): bump actions/upload-pages-artifact from 4 to 5 by @dependabot[bot] in build(deps): bump actions/upload-pages-artifact from 4 to 5 #5398
- ci: make Codecov upload non-blocking by @njzjz-bot in ci: make Codecov upload non-blocking #5421
- CI(deps): Update jax (cpu) version to 0.10.0 in pyproject.toml by @njzjz in CI(deps): Update jax (cpu) version to 0.10.0 in pyproject.toml #5442
- build(deps): bump @tootallnate/once from 2.0.0 to 2.0.1 in /source/nodejs in the npm_and_yarn group across 1 directory by @dependabot[bot] in build(deps): bump @tootallnate/once from 2.0.0 to 2.0.1 in /source/nodejs in the npm_and_yarn group across 1 directory #5453
Bug fixings
- fix(tests): move shared test mixins to tests.common to fix DeviceContext leak by @wanghan-iapcm in fix(tests): move shared test mixins to tests.common to fix DeviceContext leak #5344
- fix(pt): use strict=False when loading .pt checkpoints for inference by @wanghan-iapcm in fix(pt): use strict=False when loading .pt checkpoints for inference #5353
- fix(pt): fix NaN Hessian in DPA2 and DPA3 by @njzjz in fix(pt): fix NaN Hessian in DPA2 and DPA3 #5351
- fix: missing log in multitask training by @iProzd in fix: missing log in multitask training #5382
- fix(pt): remove meaningless error raising by @OutisLi in fix(pt): remove meaningless error raising #5411
- fix(pt): typo in epoch training by @OutisLi in fix(pt): typo in epoch training #5410
- fix(pt_expt): respect model default_fparam in data requirement by @wanghan-iapcm in fix(pt_expt): respect model default_fparam in data requirement #5417
- fix(pt): fsdp unavailable in older version of pytorch (≦2.5) by @OutisLi in fix(pt): fsdp unavailable in older version of pytorch (≦2.5) #5415
- Fix: Square atom_norm in non-Huber energy and virial loss calculations. by @anyangml in Fix: Square atom_norm in non-Huber energy and virial loss calculations. #5332
- fix(pt): recognize AOTInductor-wrapped CUDA OOM in AutoBatchSize by @OutisLi in fix(pt): recognize AOTInductor-wrapped CUDA OOM in AutoBatchSize #5418
- fix(dpmodel): align NativeLayer bias/idt init with pt MLPLayer by @wanghan-iapcm in fix(dpmodel): align NativeLayer bias/idt init with pt MLPLayer #5428
- fix(pt): replace in-place nlist masking to enable CUDA graph capture by @wanghan-iapcm in fix(pt): replace in-place nlist masking to enable CUDA graph capture #5433
- fix(pt): base LambdaLR on configured start_lr by @OutisLi in fix(pt): base LambdaLR on configured start_lr #5434
- fix(pt): Treat cuBLAS allocation failures as PyTorch OOM during auto bs by @OutisLi in fix(pt): Treat cuBLAS allocation failures as PyTorch OOM during auto bs #5443
- fix(pt_expt): fail-fast on .pt2 GNN inference without LAMMPS atom-map by @wanghan-iapcm in fix(pt_expt): fail-fast on .pt2 GNN inference without LAMMPS atom-map #5450
- fix(test): tear down LAMMPS before MPI.Finalize() in mpirun test runners by @wanghan-iapcm in fix(test): tear down LAMMPS before MPI.Finalize() in mpirun test runners #5455
- fix(pt_expt): let deepmd.pt import errors propagate in comm op check by @wanghan-iapcm in fix(pt_expt): let deepmd.pt import errors propagate in comm op check #5474
- fix(pt_expt): Fix compiled ckpt load key mismatch by @anyangml in fix(pt_expt): Fix compiled ckpt load key mismatch #5468
- fix: fake border op import by @anyangml in fix: fake border op import #5451
- perf(pt_expt): share compiled forward_lower across multi-task shared-fitting tasks by @anyangml in perf(pt_expt): share compiled forward_lower across multi-task shared-fitting tasks #5457
- fix: dpa4 compile aliasing collision by @anyangml in fix: dpa4 compile aliasing collision #5483
- fix(pt): clone inference coords before enabling grad by @njzjz-bot in fix(pt): clone inference coords before enabling grad #5476
- fix: miscalculation of num_steps when using num_epoch and lmdb by @OutisLi in fix: miscalculation of num_steps when using num_epoch and lmdb #5488
- fix(c++,pt-expt): substitute default_fparam in .pt2 compute by @wanghan-iapcm in fix(c++,pt-expt): substitute default_fparam in .pt2 compute #5343
- fix(cmake): install DeePMD config for C library builds by @njzjz-bot in fix(cmake): install DeePMD config for C library builds #5475
- fix(cc): handle nloc==0 in DeepSpinPTExpt with phantom-atom padding by @wanghan-iapcm in fix(cc): handle nloc==0 in DeepSpinPTExpt with phantom-atom padding #5485
- fix(pt/pd): fix incompatibility between AutoBatchSize and eval hooks by @njzjz in fix(pt/pd): fix incompatibility between AutoBatchSize and eval hooks #5181
- Fix: dptest label mismatch by @anyangml in Fix: dptest label mismatch #5082
Other Changes
- test(pt-expt): add .pte and .pt2 tests for dp convert-backend by @wanghan-iapcm in test(pt-expt): add .pte and .pt2 tests for dp convert-backend #5384
- test(consistent): curate DPA3 descriptor matrix by @njzjz-bot in test(consistent): curate DPA3 descriptor matrix #5390
- test(lmp): avoid duplicate pb conversions in tests by @njzjz-bot in test(lmp): avoid duplicate pb conversions in tests #5400
- test(infer): swap se_e2_a fixture to deeppot_sea (type_one_side=True) by @wanghan-iapcm in test(infer): swap se_e2_a fixture to deeppot_sea (type_one_side=True) #5445
- test(infer,lmp): drop stale DPA2 .pth fixtures, repoint tests to deeppot_dpa2 by @wanghan-iapcm in test(infer,lmp): drop stale DPA2 .pth fixtures, repoint tests to deeppot_dpa2 #5446
- test(pt_expt): shrink change-bias water dataset to 5 frames by @wanghan-iapcm in test(pt_expt): shrink change-bias water dataset to 5 frames #5467
- test(universal): replace Cartesian product with curated matrices for descriptor test by @iProzd in test(universal): replace Cartesian product with curated matrices for descriptor test #5459
- Chore: update DPA-2.4-7M ckpt by @anyangml in Chore: update DPA-2.4-7M ckpt #5496
- test(consistent): replace Cartesian product with curated matrices for descriptor tests by @njzjz-bot in test(consistent): replace Cartesian product with curated matrices for descriptor tests #5378
Full Changelog: v3.1.3...v3.2.0b0
This discussion was created from the release v3.2.0b0.
All reactions
-
🎉 1 -
🚀 1