From 5146353b1581391940d88b5e4795612644e09b5d Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:17:28 +0800 Subject: [PATCH 01/17] docs: refresh project landing pages Highlight pretrained models and the current DeePMD-kit feature set with Markdown-first repository and documentation landing pages. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 305 ++++++++++++++++++++++++++++++++++---------------- doc/index.rst | 262 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 449 insertions(+), 118 deletions(-) diff --git a/README.md b/README.md index a07db0cf9c..6e77544e4c 100644 --- a/README.md +++ b/README.md @@ -1,123 +1,232 @@ -[DeePMD-kit logo](./doc/logo.md) - -______________________________________________________________________ +[![DeePMD-kit logo](./doc/_static/logo.svg)][documentation] # DeePMD-kit -[![GitHub release](https://img.shields.io/github/release/deepmodeling/deepmd-kit.svg?maxAge=86400)](https://github.com/deepmodeling/deepmd-kit/releases) -[![offline packages](https://img.shields.io/github/downloads/deepmodeling/deepmd-kit/total?label=offline%20packages)](https://github.com/deepmodeling/deepmd-kit/releases) -[![conda-forge](https://img.shields.io/conda/dn/conda-forge/deepmd-kit?color=red&label=conda-forge&logo=conda-forge)](https://anaconda.org/conda-forge/deepmd-kit) -[![pip install](https://img.shields.io/pypi/dm/deepmd-kit?label=pip%20install)](https://pypi.org/project/deepmd-kit) -[![docker pull](https://img.shields.io/docker/pulls/deepmodeling/deepmd-kit)](https://hub.docker.com/r/deepmodeling/deepmd-kit) -[![Documentation Status](https://readthedocs.org/projects/deepmd/badge/)](https://deepmd.readthedocs.io/) - -## About DeePMD-kit - -DeePMD-kit is a package written in Python/C++, designed to minimize the effort required to build deep learning-based model of interatomic potential energy and force field and to perform molecular dynamics (MD). This brings new hopes to addressing the accuracy-versus-efficiency dilemma in molecular simulations. Applications of DeePMD-kit span from finite molecules to extended systems and from metallic systems to chemically bonded systems. - -For more information, check the [documentation](https://deepmd.readthedocs.io/). - -### Highlighted features - -- **interfaced with multiple backends**, including TensorFlow, PyTorch, JAX, and Paddle, the most popular deep learning frameworks, making the training process highly automatic and efficient. -- **interfaced with high-performance classical MD and quantum (path-integral) MD packages**, including LAMMPS, i-PI, AMBER, CP2K, GROMACS, OpenMM, and ABACUS. -- **implements the Deep Potential series models**, which have been successfully applied to finite and extended systems, including organic molecules, metals, semiconductors, insulators, etc. -- **implements MPI and GPU supports**, making it highly efficient for high-performance parallel and distributed computing. -- **highly modularized**, easy to adapt to different descriptors for deep learning-based potential energy models. -- **adapts pre-trained DPA models to downstream atomistic property prediction tasks with DPA-ADAPT**, a new Python API and CLI that supports frozen-descriptor scikit-learn heads, frozen property-head training, full end-to-end fine-tuning, and multi-task fine-tuning with an auxiliary force-field task. DPA-ADAPT trains on `deepmd/npy` systems and provides conversion pipelines for SMILES tables and structure or calculation files handled through dpdata. See the [DPA-ADAPT guide](doc/dpa_adapt/overview.md) and supported [input formats](doc/dpa_adapt/input_formats.md). - -### License and credits - -The project DeePMD-kit is licensed under [GNU LGPLv3.0](./LICENSE). -If you use this code in any future publications, please cite the following publications for general purpose: - -- Han Wang, Linfeng Zhang, Jiequn Han, and Weinan E. "DeePMD-kit: A deep learning package for many-body potential energy representation and molecular dynamics." Computer Physics Communications 228 (2018): 178-184. - [![doi:10.1016/j.cpc.2018.03.016](https://img.shields.io/badge/DOI-10.1016%2Fj.cpc.2018.03.016-blue)](https://doi.org/10.1016/j.cpc.2018.03.016) - [![Citations](https://citations.njzjz.win/10.1016/j.cpc.2018.03.016)](https://badge.dimensions.ai/details/doi/10.1016/j.cpc.2018.03.016) -- Jinzhe Zeng, Duo Zhang, Denghui Lu, Pinghui Mo, Zeyu Li, Yixiao Chen, Marián Rynik, Li'ang Huang, Ziyao Li, Shaochen Shi, Yingze Wang, Haotian Ye, Ping Tuo, Jiabin Yang, Ye Ding, Yifan Li, Davide Tisi, Qiyu Zeng, Han Bao, Yu Xia, Jiameng Huang, Koki Muraoka, Yibo Wang, Junhan Chang, Fengbo Yuan, Sigbjørn Løland Bore, Chun Cai, Yinnian Lin, Bo Wang, Jiayan Xu, Jia-Xin Zhu, Chenxing Luo, Yuzhi Zhang, Rhys E. A. Goodall, Wenshuo Liang, Anurag Kumar Singh, Sikai Yao, Jingchao Zhang, Renata Wentzcovitch, Jiequn Han, Jie Liu, Weile Jia, Darrin M. York, Weinan E, Roberto Car, Linfeng Zhang, Han Wang. "DeePMD-kit v2: A software package for deep potential models." J. Chem. Phys. 159 (2023): 054801. - [![doi:10.1063/5.0155600](https://img.shields.io/badge/DOI-10.1063%2F5.0155600-blue)](https://doi.org/10.1063/5.0155600) - [![Citations](https://citations.njzjz.win/10.1063/5.0155600)](https://badge.dimensions.ai/details/doi/10.1063/5.0155600) -- Jinzhe Zeng, Duo Zhang, Anyang Peng, Xiangyu Zhang, Sensen He, Yan Wang, Xinzijian Liu, Hangrui Bi, Yifan Li, Chun Cai, Chengqian Zhang, Yiming Du, Jia-Xin Zhu, Pinghui Mo, Zhengtao Huang, Qiyu Zeng, Shaochen Shi, Xuejian Qin, Zhaoxi Yu, Chenxing Luo, Ye Ding, Yun-Pei Liu, Ruosong Shi, Zhenyu Wang, Sigbjørn Løland Bore, Junhan Chang, Zhe Deng, Zhaohan Ding, Siyuan Han, Wanrun Jiang, Guolin Ke, Zhaoqing Liu, Denghui Lu, Koki Muraoka, Hananeh Oliaei, Anurag Kumar Singh, Haohui Que, Weihong Xu, Zhangmancang Xu, Yong-Bin Zhuang, Jiayu Dai, Timothy J. Giese, Weile Jia, Ben Xu, Darrin M. York, Linfeng Zhang, Han Wang. "DeePMD-kit v3: A Multiple-Backend Framework for Machine Learning Potentials." J. Chem. Theory Comput. 21 (2025): 4375-4385. - [![doi:10.1021/acs.jctc.5c00340](https://img.shields.io/badge/DOI-10.1021%2Facs.jctc.5c00340-blue)](https://doi.org/10.1021/acs.jctc.5c00340) - [![Citations](https://citations.njzjz.win/10.1021/acs.jctc.5c00340)](https://badge.dimensions.ai/details/doi/10.1021/acs.jctc.5c00340) - -In addition, please follow [the bib file](CITATIONS.bib) to cite the methods you used. - -### Highlights in major versions +### From first-principles data to scalable molecular dynamics—through one open framework + +[![GitHub release](https://img.shields.io/github/v/release/deepmodeling/deepmd-kit)][releases] +[![PyPI](https://img.shields.io/pypi/v/deepmd-kit)](https://pypi.org/project/deepmd-kit/) +[![conda-forge](https://img.shields.io/conda/vn/conda-forge/deepmd-kit)](https://anaconda.org/conda-forge/deepmd-kit) +[![Documentation](https://img.shields.io/badge/docs-latest-4c72ff)][documentation] +[![License](https://img.shields.io/badge/license-LGPL--3.0--or--later-00a98f)](./LICENSE) + +[**Documentation**][documentation] · [**Quick start**][quick-start] · +[**Model guide**][model-guide] · [**Tutorials**][tutorials] · +[**Examples**](./examples) · [**Releases**][releases] + +> [!IMPORTANT] +> DeePMD-kit turns quantum-mechanical reference data into fast, scalable +> interatomic potentials. It combines modern Deep Potential architectures, +> multiple machine-learning backends, adaptation workflows, and +> simulation-ready deployment in one open-source toolkit. + +Use DeePMD-kit across molecular and materials science—from finite molecules and +covalent systems to periodic solids and metals—and scale from laptop +experiments to distributed training and MPI-parallel molecular dynamics. + +## ⚡ Why DeePMD-kit + +| | Advantage | What it unlocks | +| --- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA-1, DPA-2, DPA-3, and DPA-4/SeZM][model-guide] for attention, message passing, large atomic models, and SO(3)-equivariant learning. | +| 🧲 | **More than energy and force** | Model virials, Hessians, spin and magnetic forces, dipoles, polarizabilities, electronic density of states, atomic populations, and arbitrary intensive or extensive properties. | +| 🧬 | **Foundation-model workflows** | Download [pretrained DPA models][pretrained], run [multi-task learning][multi-task], fine-tune full models or LoRA adapters, extract embeddings, or adapt models to downstream properties with [DPA-ADAPT]. | +| 🔄 | **Backend flexibility** | Train or run supported models with [TensorFlow, PyTorch, JAX, or Paddle][backends], with backend-aware model formats and conversion paths for compatible architectures. | +| 🚀 | **Performance from training to MD** | Use CPUs, CUDA GPUs, ROCm source builds, distributed training, model compression, compiled DPA-4 paths, AOTInductor `.pt2` export, and MPI-enabled simulation. | +| 🔌 | **Deploy where science happens** | Use the CLI, Python, C, C++, or Node.js, then connect models to LAMMPS, i-PI, ASE, GROMACS, JAX MD, nvalchemi, OpenMM, Amber, CP2K, ABACUS, and more. | +| 🧩 | **Open and extensible** | Compose hybrid potentials, add analytical ZBL or long-range corrections, create custom models and operators, or connect external GNNs such as MACE and NequIP through plugins. | + +> [!TIP] +> On supported descriptors and workloads, [model compression][compression] can +> deliver more than **10× inference speedup** and reduce memory usage by as much +> as **20×**. Actual gains depend on the model, system, and hardware. + +Backend and interface support varies by model and feature. The +[web documentation][documentation] marks compatibility and limitations on each +feature page. + +## 🧭 One workflow, from data to dynamics + +```mermaid +flowchart LR + A["Reference data"] --> B["Train or adapt"] + B --> C["Test, compress, export"] + C --> D["Python and native APIs"] + C --> E["Molecular dynamics"] +``` -#### Initial version +1. **Prepare data** in DeePMD's NumPy format or convert structures and + trajectories with [dpdata][data]. +1. **Choose a model** from DeepPot-SE, attention-based DPA models, large atomic + models, or equivariant message-passing architectures. +1. **Train and adapt** with single-task, multi-task, fine-tuning, LoRA, or + DPA-ADAPT workflows. +1. **Validate and export** with [`dp test`][testing], [`dp freeze`][freeze], + backend conversion, embedding extraction, and supported compression paths. +1. **Run simulation** through Python or native APIs, or load the model into a + supported molecular-dynamics engine. -The goal of Deep Potential is to employ deep learning techniques and realize an inter-atomic potential energy model that is general, accurate, computationally efficient and scalable. The key component is to respect the extensive and symmetry-invariant properties of a potential energy model by assigning a local reference frame and a local environment to each atom. Each environment contains a finite number of atoms, whose local coordinates are arranged in a symmetry-preserving way. These local coordinates are then transformed, through a sub-network, to so-called _atomic energy_. Summing up all the atomic energies gives the potential energy of the system. +## 🚀 Start in minutes -The initial proof of concept is in the [Deep Potential][1] paper, which employed an approach that was devised to train the neural network model with the potential energy only. With typical _ab initio_ molecular dynamics (AIMD) datasets this is insufficient to reproduce the trajectories. The Deep Potential Molecular Dynamics ([DeePMD][2]) model overcomes this limitation. In addition, the learning process in DeePMD improves significantly over the Deep Potential method thanks to the introduction of a flexible family of loss functions. The NN potential constructed in this way reproduces accurately the AIMD trajectories, both classical and quantum (path integral), in extended and finite systems, at a cost that scales linearly with system size and is always several orders of magnitude lower than that of equivalent AIMD simulations. +DeePMD-kit requires Python 3.10 or later. The fastest installation path is: -Although highly efficient, the original Deep Potential model satisfies the extensive and symmetry-invariant properties of a potential energy model at the price of introducing discontinuities in the model. This has negligible influence on a trajectory from canonical sampling but might not be sufficient for calculations of dynamical and mechanical properties. These points motivated us to develop the Deep Potential-Smooth Edition ([DeepPot-SE][3]) model, which replaces the non-smooth local frame with a smooth and adaptive embedding network. DeepPot-SE shows great ability in modeling many kinds of systems that are of interest in the fields of physics, chemistry, biology, and materials science. +```bash +curl -fsSL https://dp1s.deepmodeling.com | bash +dp --version +dp -h +``` -In addition to building up potential energy models, DeePMD-kit can also be used to build up coarse-grained models. In these models, the quantity that we want to parameterize is the free energy, or the coarse-grained potential, of the coarse-grained particles. See the [DeePCG paper][4] for more details. +The [installation guide][installation] covers pip, conda-forge, containers, +offline packages, GPU builds, LAMMPS, i-PI, and source installation. -#### v1 +### Train a first model -- Code refactor to make it highly modularized. -- GPU support for descriptors. +Clone the examples and start with the compact water system: -#### v2 +```bash +git clone https://github.com/deepmodeling/deepmd-kit.git +cd deepmd-kit/examples/water/se_e2_a -- Model compression. Accelerate the efficiency of model inference 4-15 times. -- New descriptors. Including `se_e2_r`, `se_e3`, and `se_atten` (DPA-1). -- Hybridization of descriptors. Hybrid descriptor constructed from the concatenation of several descriptors. -- Atom type embedding. Enable atom-type embedding to decline training complexity and refine performance. -- Training and inference of the dipole (vector) and polarizability (matrix). -- Split of training and validation dataset. -- Optimized training on GPUs, including CUDA and ROCm. -- Non-von-Neumann. -- C API to interface with the third-party packages. +# TensorFlow backend +dp train input.json -See [our v2 paper](https://doi.org/10.1063/5.0155600) for details of all features until v2.2.3. +# Or PyTorch +dp --pt train input_torch.json +``` -#### v3 +Ready-to-run inputs include: -- Multiple backends supported. Add PyTorch and JAX backends. -- The DPA2 and DPA3 models. -- Plugin mechanisms for external models. +- [DPA-3 water training](./examples/water/dpa3/input_torch.json) +- [DPA-4/SeZM water training](./examples/water/dpa4/input.json) +- [PyTorch multi-task training](./examples/water_multi_task/pytorch_example/input_torch.json) +- [DPA-ADAPT property prediction](./examples/dpa_adapt/README.md) -See [our v3 paper](https://doi.org/10.1021/acs.jctc.5c00340) for details of all features until v3.0. +For a guided end-to-end example, open the [web quick-start notebook][quick-start]. -## Install and use DeePMD-kit +### Start from a pretrained DPA model -Just copy and paste in 1s, and let it run. +Built-in models can be downloaded explicitly: -```sh -curl -fsSL https://dp1s.deepmodeling.com | bash +```bash +dp pretrained download DPA-3.2-5M ``` -Please read the [online documentation](https://deepmd.readthedocs.io/) for details and alternative installation methods. +They can also be resolved and cached automatically by Python: -Then, read on for a brief overview of the usage of DeePMD-kit. You may start with the first step: +```python +from deepmd.infer import DeepPot -```sh -dp +potential = DeepPot("DPA-3.2-5M") ``` -## Code structure - -The code is organized as follows: - -- `examples`: examples. -- `deepmd`: DeePMD-kit python modules. -- `dpa_adapt`: DPA-ADAPT package for adapting pre-trained DPA models; see the [guide](doc/dpa_adapt/overview.md) and [input formats](doc/dpa_adapt/input_formats.md). -- `source/lib`: source code of the core library. -- `source/op`: Operator (OP) implementation. -- `source/api_cc`: source code of DeePMD-kit C++ API. -- `source/api_c`: source code of the C API. -- `source/nodejs`: source code of the Node.js API. -- `source/ipi`: source code of i-PI client. -- `source/lmp`: source code of LAMMPS module. - -# Contributing - -See [DeePMD-kit Contributing Guide](CONTRIBUTING.md) to become a contributor! 🤓 - -[1]: https://arxiv.org/abs/1707.01478 -[2]: https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.120.143001 -[3]: https://arxiv.org/abs/1805.09003 -[4]: https://aip.scitation.org/doi/full/10.1063/1.5027645 +## 🧠 Choose a model family + +| Family | A strong starting point when you need | +| ---------------- | ------------------------------------------------------------------------------------------------------------------ | +| **DeepPot-SE** | An efficient, established baseline with broad backend and deployment support. | +| **DPA-1** | Attention-based local representations and type embedding. | +| **DPA-2** | Multi-task pretraining, shared representations, and smooth conservative potentials. | +| **DPA-3** | Message passing over line-graph representations and broad chemical coverage. | +| **DPA-4 / SeZM** | SO(3)-equivariant learning, LoRA fine-tuning, optional ZBL bridging, spin support, and compiled `.pt2` deployment. | + +Use the [model guide][model-guide] to compare supported backends, targets, data +formats, precision, compression, and deployment constraints. + +## 🔬 Go beyond conventional force fields + +| Goal | DeePMD-kit capabilities | +| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| **Potential-energy surfaces** | Energy, atomic forces, virials, Hessians, hybrid descriptors, pair tables, and linear model combinations | +| **Magnetic systems** | Spin-aware descriptors, atomic and magnetic forces, and spin-capable molecular dynamics | +| **Electronic and response properties** | Dipoles, polarizabilities, density of states, atomic charge populations, and custom property heads | +| **Long- and short-range physics** | DPLR electrostatics, DPRc range correction for QM/MM, and analytical ZBL bridging | +| **Representation learning** | Per-atom descriptors, fitting-network features, structural embeddings, clustering, and downstream auxiliary models | + +Explore the complete set of [models and physical targets][model-guide] in the +web documentation. + +## 🔌 Deploy into the scientific ecosystem + +### Inference interfaces + +- [Python][python-inference] +- [C and C++][native-inference] +- [Node.js][node-inference] +- [Model embedding export][embeddings] + +### Simulation and workflow integrations + +- [LAMMPS], [i-PI][ipi], [ASE], [GROMACS], + [JAX MD][jax-md], and [nvalchemi] +- Ecosystem integrations for OpenMM, Amber, CP2K, ABACUS, DP-GEN, and MLatom +- External MACE and NequIP models through the DeePMD-GNN plugin + +See the [integration hub][integrations] for maintained interfaces, third-party +projects, supported scope, and installation guidance. + +The native C and C++ interfaces load machine-learning backends as runtime +plugins. Applications can therefore open the backend required by a model +without directly linking every framework. + +> [!NOTE] +> Working with an AI coding or scientific agent? DeePMD-kit ships +> [official Agent Skills][agent-skills] for model selection, training, +> fine-tuning, Python inference, and LAMMPS workflows. + +## 📚 Documentation and community + +- Read the [full web documentation][documentation]. +- Follow hands-on material in the [DeepModeling tutorials][tutorials]. +- Browse [examples](./examples) for training, inference, and integrations. +- Ask questions or report problems in [GitHub Issues](https://github.com/deepmodeling/deepmd-kit/issues). +- Join development through the [contributing guide](./CONTRIBUTING.md). + +## Citation + +If DeePMD-kit contributes to published work, cite the general software paper +that matches the version used and the method-specific papers listed in +[CITATIONS.bib](./CITATIONS.bib): + +- Wang et al., “DeePMD-kit: A deep learning package for many-body potential + energy representation and molecular dynamics,” *Computer Physics + Communications* 228 (2018), 178–184. + [DOI: 10.1016/j.cpc.2018.03.016](https://doi.org/10.1016/j.cpc.2018.03.016) +- Zeng et al., “DeePMD-kit v2: A software package for Deep Potential models,” + *The Journal of Chemical Physics* 159 (2023), 054801. + [DOI: 10.1063/5.0155600](https://doi.org/10.1063/5.0155600) +- Zeng et al., “DeePMD-kit v3: A Multiple-Backend Framework for Machine + Learning Potentials,” *Journal of Chemical Theory and Computation* 21 + (2025), 4375–4385. + [DOI: 10.1021/acs.jctc.5c00340](https://doi.org/10.1021/acs.jctc.5c00340) + +## License + +DeePMD-kit is licensed under the +[GNU Lesser General Public License v3.0 or later](./LICENSE). + +[agent-skills]: https://docs.deepmodeling.com/projects/deepmd/en/latest/agent-skills.html +[ase]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/ase.html +[backends]: https://docs.deepmodeling.com/projects/deepmd/en/latest/backend.html +[compression]: https://docs.deepmodeling.com/projects/deepmd/en/latest/freeze/compress.html +[data]: https://docs.deepmodeling.com/projects/deepmd/en/latest/data/dpdata.html +[documentation]: https://docs.deepmodeling.com/projects/deepmd/en/latest/ +[dpa-adapt]: https://docs.deepmodeling.com/projects/deepmd/en/latest/dpa_adapt/overview.html +[embeddings]: https://docs.deepmodeling.com/projects/deepmd/en/latest/inference/embedding.html +[freeze]: https://docs.deepmodeling.com/projects/deepmd/en/latest/freeze/freeze.html +[gromacs]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/gromacs.html +[installation]: https://docs.deepmodeling.com/projects/deepmd/en/latest/install/easy-install.html +[integrations]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/index.html +[ipi]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/ipi.html +[jax-md]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/jaxmd.html +[lammps]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/lammps-command.html +[model-guide]: https://docs.deepmodeling.com/projects/deepmd/en/latest/model/index.html +[multi-task]: https://docs.deepmodeling.com/projects/deepmd/en/latest/train/multi-task-training.html +[native-inference]: https://docs.deepmodeling.com/projects/deepmd/en/latest/inference/cxx.html +[node-inference]: https://docs.deepmodeling.com/projects/deepmd/en/latest/inference/nodejs.html +[nvalchemi]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/nvalchemi.html +[pretrained]: https://docs.deepmodeling.com/projects/deepmd/en/latest/model/pretrained.html +[python-inference]: https://docs.deepmodeling.com/projects/deepmd/en/latest/inference/python.html +[quick-start]: https://docs.deepmodeling.com/projects/deepmd/en/latest/getting-started/quick_start.html +[releases]: https://github.com/deepmodeling/deepmd-kit/releases +[testing]: https://docs.deepmodeling.com/projects/deepmd/en/latest/test/test.html +[tutorials]: https://tutorials.deepmodeling.com/ diff --git a/doc/index.rst b/doc/index.rst index 6e698be273..de11560963 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,30 +1,249 @@ -.. deepmd-kit documentation master file, created by - sphinx-quickstart on Sat Nov 21 18:36:24 2020. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. +=========== +DeePMD-kit +=========== -========================== -DeePMD-kit's documentation -========================== +.. rst-class:: lead -DeePMD-kit is a package written in Python/C++, designed to minimize the effort required to build deep learning-based models of interatomic potential energy and force field and to perform molecular dynamics (MD). This brings new hopes to addressing the accuracy-versus-efficiency dilemma in molecular simulations. Applications of DeePMD-kit span from finite molecules to extended systems and from metallic systems to chemically bonded systems. + From first-principles data to scalable molecular dynamics—through one open + framework. -.. Important:: +DeePMD-kit turns quantum-mechanical reference data into fast, scalable +interatomic potentials. It combines modern Deep Potential architectures, +multiple machine-learning backends, adaptation workflows, and +simulation-ready deployment in one open-source toolkit. - The project DeePMD-kit is licensed under `GNU LGPLv3.0 `_. - If you use this code in any future publications, please cite the following publications for general purpose: +Use it across molecular and materials science—from finite molecules and +covalent systems to periodic solids and metals—and scale from laptop +experiments to distributed training and MPI-parallel molecular dynamics. - - Han Wang, Linfeng Zhang, Jiequn Han, and Weinan E. "DeePMD-kit: A deep learning package for many-body potential energy representation and molecular dynamics." Computer Physics Communications 228 (2018): 178-184. - - Jinzhe Zeng, Duo Zhang, Denghui Lu, Pinghui Mo, Zeyu Li, Yixiao Chen, Marián Rynik, Li'ang Huang, Ziyao Li, Shaochen Shi, Yingze Wang, Haotian Ye, Ping Tuo, Jiabin Yang, Ye Ding, Yifan Li, Davide Tisi, Qiyu Zeng, Han Bao, Yu Xia, Jiameng Huang, Koki Muraoka, Yibo Wang, Junhan Chang, Fengbo Yuan, Sigbjørn Løland Bore, Chun Cai, Yinnian Lin, Bo Wang, Jiayan Xu, Jia-Xin Zhu, Chenxing Luo, Yuzhi Zhang, Rhys E. A. Goodall, Wenshuo Liang, Anurag Kumar Singh, Sikai Yao, Jingchao Zhang, Renata Wentzcovitch, Jiequn Han, Jie Liu, Weile Jia, Darrin M. York, Weinan E, Roberto Car, Linfeng Zhang, Han Wang. "DeePMD-kit v2: A software package for Deep Potential models." J. Chem. Phys., 159, 054801 (2023). - - Jinzhe Zeng, Duo Zhang, Anyang Peng, Xiangyu Zhang, Sensen He, Yan Wang, Xinzijian Liu, Hangrui Bi, Yifan Li, Chun Cai, Chengqian Zhang, Yiming Du, Jia-Xin Zhu, Pinghui Mo, Zhengtao Huang, Qiyu Zeng, Shaochen Shi, Xuejian Qin, Zhaoxi Yu, Chenxing Luo, Ye Ding, Yun-Pei Liu, Ruosong Shi, Zhenyu Wang, Sigbjørn Løland Bore, Junhan Chang, Zhe Deng, Zhaohan Ding, Siyuan Han, Wanrun Jiang, Guolin Ke, Zhaoqing Liu, Denghui Lu, Koki Muraoka, Hananeh Oliaei, Anurag Kumar Singh, Haohui Que, Weihong Xu, Zhangmancang Xu, Yong-Bin Zhuang, Jiayu Dai, Timothy J. Giese, Weile Jia, Ben Xu, Darrin M. York, Linfeng Zhang, Han Wang. "DeePMD-kit v3: A Multiple-Backend Framework for Machine Learning Potentials." J. Chem. Theory Comput. 21 (2025): 4375-4385. +Choose your path +================ - In addition, please follow :ref:`this page ` to cite the methods you used. +.. grid:: 1 2 2 4 + :gutter: 3 + + .. grid-item-card:: 🚀 Install and start + :link: getting-started/index + :link-type: doc + :shadow: md + + Install DeePMD-kit, prepare a small dataset, and train your first model. + + .. grid-item-card:: 🧠 Choose a model + :link: model/index + :link-type: doc + :shadow: md + + Compare DeepPot-SE, DPA-1, DPA-2, DPA-3, DPA-4/SeZM, and specialized + physics models. + + .. grid-item-card:: 🧬 Train and adapt + :link: train/index + :link-type: doc + :shadow: md + + Run single-task or multi-task training, fine-tuning, LoRA, and + pretrained-model workflows. + + .. grid-item-card:: 🔌 Deploy and integrate + :link: third-party/index + :link-type: doc + :shadow: md + + Move models into Python, native APIs, LAMMPS, i-PI, ASE, GROMACS, and + the wider simulation ecosystem. + +Why DeePMD-kit +============== + +.. grid:: 1 2 2 3 + :gutter: 3 + + .. grid-item-card:: Modern potential architectures + :shadow: sm + + Use efficient DeepPot-SE descriptors, attention-based DPA models, large + atomic models, and SO(3)-equivariant DPA-4/SeZM. + + .. grid-item-card:: Broad physical targets + :shadow: sm + + Learn energies, forces, virials, Hessians, spin, dipoles, + polarizabilities, density of states, atomic populations, and custom + properties. + + .. grid-item-card:: Foundation-model workflows + :shadow: sm + + Download built-in DPA models, share representations across tasks, + fine-tune full models or LoRA adapters, and use DPA-ADAPT for downstream + prediction. + + .. grid-item-card:: Multi-backend framework + :link: backend + :link-type: doc + :shadow: sm + + Work with TensorFlow, PyTorch, JAX, or Paddle and use backend-aware model + formats, conversion, and runtime plugins. + + .. grid-item-card:: Performance at scale + :shadow: sm + + Run on CPUs and GPUs, distribute training, compress supported models, + export compiled ``.pt2`` artifacts, and drive MPI-parallel simulations. + + .. grid-item-card:: Open scientific ecosystem + :link: third-party/index + :link-type: doc + :shadow: sm + + Connect to simulation engines, workflow tools, native applications, and + external GNN models through documented interfaces and plugins. + +.. tip:: + + On supported descriptors and workloads, :doc:`model compression + ` can deliver more than **10× inference speedup** and + reduce memory usage by as much as **20×**. Actual gains depend on the model, + system, and hardware. + +From data to dynamics +===================== + +.. grid:: 1 2 3 5 + :gutter: 2 + + .. grid-item-card:: 1 · Prepare + :link: data/index + :link-type: doc + + Convert reference structures and labels into DeePMD data. + + .. grid-item-card:: 2 · Model + :link: model/index + :link-type: doc + + Select a descriptor, physical target, and backend. + + .. grid-item-card:: 3 · Train + :link: train/index + :link-type: doc + + Train from scratch or adapt a pretrained model. + + .. grid-item-card:: 4 · Validate + :link: test/index + :link-type: doc + + Test accuracy, inspect deviation, freeze, and compress. + + .. grid-item-card:: 5 · Simulate + :link: inference/index + :link-type: doc + + Run inference directly or deploy into molecular dynamics. + +Choose a model family +===================== + +.. list-table:: + :header-rows: 1 + :widths: 24 76 + + * - Family + - A strong starting point when you need + * - :doc:`DeepPot-SE ` + - An efficient, established baseline with broad backend and deployment + support. + * - :doc:`DPA-1 ` + - Attention-based local representations and type embedding. + * - :doc:`DPA-2 ` + - Multi-task pretraining, shared representations, and smooth conservative + potentials. + * - :doc:`DPA-3 ` + - Message passing over line-graph representations and broad chemical + coverage. + * - :doc:`DPA-4 / SeZM ` + - SO(3)-equivariant learning, LoRA fine-tuning, optional ZBL bridging, + spin support, and compiled ``.pt2`` deployment. + +More than conventional force fields +=================================== + +.. grid:: 1 2 2 3 + :gutter: 3 + + .. grid-item-card:: 🧲 Spin and magnetism + :link: model/train-energy-spin + :link-type: doc + + Train spin-aware potentials with atomic and magnetic force targets. + + .. grid-item-card:: ⚛️ Long- and short-range physics + :link: model/dplr + :link-type: doc + + Combine learned local interactions with DPLR electrostatics, DPRc range + correction, pair tables, or analytical ZBL bridging. + + .. grid-item-card:: 📊 Properties and embeddings + :link: inference/embedding + :link-type: doc + + Predict electronic or structural properties and export learned + representations for analysis or downstream models. + +New and noteworthy +================== + +.. grid:: 1 2 2 4 + :gutter: 3 + + .. grid-item-card:: DPA-4 / SeZM + :link: model/dpa4 + :link-type: doc + :shadow: sm + + Equivariant message passing, LoRA, ZBL, spin, compiled inference, and + LAMMPS deployment. + + .. grid-item-card:: Pretrained DPA models + :link: model/pretrained + :link-type: doc + :shadow: sm + + Resolve built-in model names directly or download checkpoints to a local + cache. + + .. grid-item-card:: DPA-ADAPT + :link: dpa_adapt/index + :link-type: doc + :shadow: sm + + Adapt pretrained DPA representations to downstream atomistic property + tasks. + + .. grid-item-card:: Official Agent Skills + :link: agent-skills + :link-type: doc + :shadow: sm + + Give AI agents reproducible guidance for training, fine-tuning, + inference, and LAMMPS workflows. + +.. important:: + + DeePMD-kit is licensed under the :doc:`GNU LGPL-3.0-or-later `. + If you use DeePMD-kit in published work, follow the + :doc:`citation guide ` for the software version and methods used. .. _getting-started: .. toctree:: :maxdepth: 3 :caption: Getting Started + :hidden: getting-started/index @@ -32,8 +251,8 @@ DeePMD-kit is a package written in Python/C++, designed to minimize the effort r .. toctree:: :maxdepth: 3 - :numbered: - :caption: Advanced + :caption: User Guide + :hidden: backend install/index @@ -51,12 +270,12 @@ DeePMD-kit is a package written in Python/C++, designed to minimize the effort r env troubleshooting/index - .. _tutorial: .. toctree:: :maxdepth: 2 - :caption: Tutorial + :caption: Tutorials and Publications + :hidden: Tutorials Publications @@ -66,6 +285,7 @@ DeePMD-kit is a package written in Python/C++, designed to minimize the effort r .. toctree:: :maxdepth: 5 :caption: Developer Guide + :hidden: development/cmake development/create-a-model-tf @@ -79,17 +299,19 @@ DeePMD-kit is a package written in Python/C++, designed to minimize the effort r api_c/api_c api_core/api_core - .. _project-details: .. toctree:: :maxdepth: 3 :caption: Project Details + :hidden: license credits logo +Indices +------- * :ref:`genindex` * :ref:`modindex` From b2cfa3731fd39bfed45dc02876de9dd9e80af0a5 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:22:00 +0800 Subject: [PATCH 02/17] fix(docs): restore theme-aware logo Keep the responsive picture element for light and dark logo variants while retaining Markdown for the rest of the README. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6e77544e4c..08ee49ec9f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![DeePMD-kit logo](./doc/_static/logo.svg)][documentation] +[DeePMD-kit logo][documentation] # DeePMD-kit From 1fe126bffb979185044ac6543e1c001fba0f5dd4 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:25:02 +0800 Subject: [PATCH 03/17] fix(docs): restore homepage citations Restore the three general DeePMD-kit software references and DOI links on the documentation landing page while retaining the method-specific citation guide. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- doc/index.rst | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index de11560963..9381d08205 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -232,11 +232,48 @@ New and noteworthy Give AI agents reproducible guidance for training, fine-tuning, inference, and LAMMPS workflows. -.. important:: +Citation +======== + +If you use DeePMD-kit in published work, cite the general software publication +that matches the version used: + +* Han Wang, Linfeng Zhang, Jiequn Han, and Weinan E. "DeePMD-kit: A deep + learning package for many-body potential energy representation and molecular + dynamics." *Computer Physics Communications* 228 (2018): 178–184. + `DOI: 10.1016/j.cpc.2018.03.016 + `_. +* Jinzhe Zeng, Duo Zhang, Denghui Lu, Pinghui Mo, Zeyu Li, Yixiao Chen, + Marián Rynik, Li'ang Huang, Ziyao Li, Shaochen Shi, Yingze Wang, Haotian Ye, + Ping Tuo, Jiabin Yang, Ye Ding, Yifan Li, Davide Tisi, Qiyu Zeng, Han Bao, + Yu Xia, Jiameng Huang, Koki Muraoka, Yibo Wang, Junhan Chang, Fengbo Yuan, + Sigbjørn Løland Bore, Chun Cai, Yinnian Lin, Bo Wang, Jiayan Xu, Jia-Xin Zhu, + Chenxing Luo, Yuzhi Zhang, Rhys E. A. Goodall, Wenshuo Liang, Anurag Kumar + Singh, Sikai Yao, Jingchao Zhang, Renata Wentzcovitch, Jiequn Han, Jie Liu, + Weile Jia, Darrin M. York, Weinan E, Roberto Car, Linfeng Zhang, and Han + Wang. "DeePMD-kit v2: A software package for Deep Potential models." + *The Journal of Chemical Physics* 159 (2023): 054801. + `DOI: 10.1063/5.0155600 `_. +* Jinzhe Zeng, Duo Zhang, Anyang Peng, Xiangyu Zhang, Sensen He, Yan Wang, + Xinzijian Liu, Hangrui Bi, Yifan Li, Chun Cai, Chengqian Zhang, Yiming Du, + Jia-Xin Zhu, Pinghui Mo, Zhengtao Huang, Qiyu Zeng, Shaochen Shi, Xuejian + Qin, Zhaoxi Yu, Chenxing Luo, Ye Ding, Yun-Pei Liu, Ruosong Shi, Zhenyu Wang, + Sigbjørn Løland Bore, Junhan Chang, Zhe Deng, Zhaohan Ding, Siyuan Han, + Wanrun Jiang, Guolin Ke, Zhaoqing Liu, Denghui Lu, Koki Muraoka, Hananeh + Oliaei, Anurag Kumar Singh, Haohui Que, Weihong Xu, Zhangmancang Xu, + Yong-Bin Zhuang, Jiayu Dai, Timothy J. Giese, Weile Jia, Ben Xu, Darrin M. + York, Linfeng Zhang, and Han Wang. "DeePMD-kit v3: A Multiple-Backend + Framework for Machine Learning Potentials." *Journal of Chemical Theory and + Computation* 21 (2025): 4375–4385. + `DOI: 10.1021/acs.jctc.5c00340 + `_. + +Follow the :doc:`citation guide ` for the method-specific publications +required by the models and features used in your work. + +.. note:: DeePMD-kit is licensed under the :doc:`GNU LGPL-3.0-or-later `. - If you use DeePMD-kit in published work, follow the - :doc:`citation guide ` for the software version and methods used. .. _getting-started: From d5aee980907ad83742d6fa31a83049f07871b53b Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:28:14 +0800 Subject: [PATCH 04/17] fix(docs): restore citation badges Restore the DOI and live citation-count badges for all three general DeePMD-kit publications in the README. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 08ee49ec9f..13a2a49a58 100644 --- a/README.md +++ b/README.md @@ -190,14 +190,17 @@ that matches the version used and the method-specific papers listed in - Wang et al., “DeePMD-kit: A deep learning package for many-body potential energy representation and molecular dynamics,” *Computer Physics Communications* 228 (2018), 178–184. - [DOI: 10.1016/j.cpc.2018.03.016](https://doi.org/10.1016/j.cpc.2018.03.016) + [![doi:10.1016/j.cpc.2018.03.016](https://img.shields.io/badge/DOI-10.1016%2Fj.cpc.2018.03.016-blue)](https://doi.org/10.1016/j.cpc.2018.03.016) + [![Citations](https://citations.njzjz.win/10.1016/j.cpc.2018.03.016)](https://badge.dimensions.ai/details/doi/10.1016/j.cpc.2018.03.016) - Zeng et al., “DeePMD-kit v2: A software package for Deep Potential models,” *The Journal of Chemical Physics* 159 (2023), 054801. - [DOI: 10.1063/5.0155600](https://doi.org/10.1063/5.0155600) + [![doi:10.1063/5.0155600](https://img.shields.io/badge/DOI-10.1063%2F5.0155600-blue)](https://doi.org/10.1063/5.0155600) + [![Citations](https://citations.njzjz.win/10.1063/5.0155600)](https://badge.dimensions.ai/details/doi/10.1063/5.0155600) - Zeng et al., “DeePMD-kit v3: A Multiple-Backend Framework for Machine Learning Potentials,” *Journal of Chemical Theory and Computation* 21 (2025), 4375–4385. - [DOI: 10.1021/acs.jctc.5c00340](https://doi.org/10.1021/acs.jctc.5c00340) + [![doi:10.1021/acs.jctc.5c00340](https://img.shields.io/badge/DOI-10.1021%2Facs.jctc.5c00340-blue)](https://doi.org/10.1021/acs.jctc.5c00340) + [![Citations](https://citations.njzjz.win/10.1021/acs.jctc.5c00340)](https://badge.dimensions.ai/details/doi/10.1021/acs.jctc.5c00340) ## License From a02148706e33f3f7122b2d663d2591c3a24c5ce6 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:47:00 +0800 Subject: [PATCH 05/17] fix(docs): preserve landing page behavior Restore the original download and status badges, keep the tagline out of the heading hierarchy, and preserve the documentation homepage's numbered global navigation. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 11 +++++++---- doc/index.rst | 14 +++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 13a2a49a58..8fc32a1a7a 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,15 @@ # DeePMD-kit -### From first-principles data to scalable molecular dynamics—through one open framework +**From first-principles data to scalable molecular dynamics—through one open +framework** [![GitHub release](https://img.shields.io/github/v/release/deepmodeling/deepmd-kit)][releases] -[![PyPI](https://img.shields.io/pypi/v/deepmd-kit)](https://pypi.org/project/deepmd-kit/) -[![conda-forge](https://img.shields.io/conda/vn/conda-forge/deepmd-kit)](https://anaconda.org/conda-forge/deepmd-kit) -[![Documentation](https://img.shields.io/badge/docs-latest-4c72ff)][documentation] +[![offline packages](https://img.shields.io/github/downloads/deepmodeling/deepmd-kit/total?label=offline%20packages)][releases] +[![conda-forge](https://img.shields.io/conda/dn/conda-forge/deepmd-kit?color=red&label=conda-forge&logo=conda-forge)](https://anaconda.org/conda-forge/deepmd-kit) +[![pip install](https://img.shields.io/pypi/dm/deepmd-kit?label=pip%20install)](https://pypi.org/project/deepmd-kit/) +[![docker pull](https://img.shields.io/docker/pulls/deepmodeling/deepmd-kit)](https://hub.docker.com/r/deepmodeling/deepmd-kit) +[![Documentation Status](https://readthedocs.org/projects/deepmd/badge/)][documentation] [![License](https://img.shields.io/badge/license-LGPL--3.0--or--later-00a98f)](./LICENSE) [**Documentation**][documentation] · [**Quick start**][quick-start] · diff --git a/doc/index.rst b/doc/index.rst index 9381d08205..a7f91eabdb 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -103,10 +103,10 @@ Why DeePMD-kit .. tip:: - On supported descriptors and workloads, :doc:`model compression - ` can deliver more than **10× inference speedup** and - reduce memory usage by as much as **20×**. Actual gains depend on the model, - system, and hardware. + On supported descriptors and workloads, + :doc:`model compression ` can deliver more than + **10× inference speedup** and reduce memory usage by as much as **20×**. + Actual gains depend on the model, system, and hardware. From data to dynamics ===================== @@ -280,7 +280,6 @@ required by the models and features used in your work. .. toctree:: :maxdepth: 3 :caption: Getting Started - :hidden: getting-started/index @@ -288,8 +287,8 @@ required by the models and features used in your work. .. toctree:: :maxdepth: 3 + :numbered: :caption: User Guide - :hidden: backend install/index @@ -312,7 +311,6 @@ required by the models and features used in your work. .. toctree:: :maxdepth: 2 :caption: Tutorials and Publications - :hidden: Tutorials Publications @@ -322,7 +320,6 @@ required by the models and features used in your work. .. toctree:: :maxdepth: 5 :caption: Developer Guide - :hidden: development/cmake development/create-a-model-tf @@ -341,7 +338,6 @@ required by the models and features used in your work. .. toctree:: :maxdepth: 3 :caption: Project Details - :hidden: license credits From 288615fb2a90fee8ea403eb5186a4bdea050e3cf Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:48:40 +0800 Subject: [PATCH 06/17] fix(docs): direct installs to documentation Remove the unpinned remote installer from the repository landing page and route readers to the maintained backend-specific installation guide. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8fc32a1a7a..c2831d49a6 100644 --- a/README.md +++ b/README.md @@ -71,10 +71,11 @@ flowchart LR ## 🚀 Start in minutes -DeePMD-kit requires Python 3.10 or later. The fastest installation path is: +DeePMD-kit requires Python 3.10 or later. Choose the supported package for your +backend and hardware in the [installation guide][installation], then verify the +installation: ```bash -curl -fsSL https://dp1s.deepmodeling.com | bash dp --version dp -h ``` From 2293e73f1ec93876e161b9750fac276573fe3cf0 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:53:10 +0800 Subject: [PATCH 07/17] fix(docs): restore dp1s quick install Keep the repository homepage aligned with the maintained installation guide by restoring the official dp1s quick-install command. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c2831d49a6..8fc32a1a7a 100644 --- a/README.md +++ b/README.md @@ -71,11 +71,10 @@ flowchart LR ## 🚀 Start in minutes -DeePMD-kit requires Python 3.10 or later. Choose the supported package for your -backend and hardware in the [installation guide][installation], then verify the -installation: +DeePMD-kit requires Python 3.10 or later. The fastest installation path is: ```bash +curl -fsSL https://dp1s.deepmodeling.com | bash dp --version dp -h ``` From 01b0de46ec331f02d250f94d4a0ea24fbbd4d627 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sat, 1 Aug 2026 17:57:54 +0800 Subject: [PATCH 08/17] fix(docs): restore logo guide link Keep the theme-aware README logo linked to the hosted logo usage guide instead of the general documentation landing page. Coding-Agent: Codex Codex-Version: codex-cli 0.144.6 Model: gpt-5.6-sol Reasoning-Effort: xhigh --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8fc32a1a7a..bd1c7bd2f5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[DeePMD-kit logo][documentation] +[DeePMD-kit logo][logo-guide] # DeePMD-kit @@ -225,6 +225,7 @@ DeePMD-kit is licensed under the [ipi]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/ipi.html [jax-md]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/jaxmd.html [lammps]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/lammps-command.html +[logo-guide]: https://docs.deepmodeling.com/projects/deepmd/en/latest/logo.html [model-guide]: https://docs.deepmodeling.com/projects/deepmd/en/latest/model/index.html [multi-task]: https://docs.deepmodeling.com/projects/deepmd/en/latest/train/multi-task-training.html [native-inference]: https://docs.deepmodeling.com/projects/deepmd/en/latest/inference/cxx.html From 49d2e41a32e4008d4c574817a2603acfc6bb749e Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Sun, 2 Aug 2026 21:54:59 +0800 Subject: [PATCH 09/17] docs: address landing page review feedback - rename DPA-4/SeZM to DPA-4 - prune per-model table for beginners; note finetune subsection - move GROMACS to ecosystem integrations tier - restore lost citation entries (Deep Potential, DeePCG) in CITATIONS.bib - add version-range parentheticals to citation list Coding-Agent: opencode opencode-Version: 1.18.9 Model: ustc/deepseek-v4-flash Reasoning-Effort: max --- CITATIONS.bib | 34 ++++++++++++++++++++++++++++++++++ README.md | 45 +++++++++++++++++++++++++++++---------------- doc/index.rst | 8 ++++---- 3 files changed, 67 insertions(+), 20 deletions(-) diff --git a/CITATIONS.bib b/CITATIONS.bib index 0fd28323dd..5cb1352469 100644 --- a/CITATIONS.bib +++ b/CITATIONS.bib @@ -86,6 +86,24 @@ @article{Zeng_JChemTheoryComput_2025_v21_p4375 }, } +@article{Han_CommunComputPhys_2018_v23_p629, + annote = {Deep Potential}, + title = { + {Deep Potential: A General Representation of a Many-Body Potential Energy + Surface} + }, + author = { + Jiequn Han and Linfeng Zhang and Roberto Car and Weinan E + }, + journal = {Commun. Comput. Phys.}, + year = 2018, + volume = 23, + number = 3, + pages = {629--639}, + doi = {10.4208/cicp.OA-2017-0213}, + url = {https://arxiv.org/abs/1707.01478}, +} + @article{Lu_CompPhysCommun_2021_v259_p107624, annote = {GPU support}, title = { @@ -120,6 +138,22 @@ @article{Zhang_PhysRevLett_2018_v120_p143001 doi = {10.1103/PhysRevLett.120.143001}, } +@article{Zhang_JChemPhys_2018_v149_p34101, + annote = {coarse-grained model (DeePCG)}, + title = { + {DeePCG: Constructing Coarse-Grained Models via Deep Neural Networks} + }, + author = { + Linfeng Zhang and Jiequn Han and Han Wang and Roberto Car and Weinan E + }, + journal = {J. Chem. Phys.}, + year = 2018, + volume = 149, + number = 3, + pages = 034101, + doi = {10.1063/1.5027645}, +} + @incollection{Zhang_BookChap_NIPS_2018_v31_p4436, annote = {DeepPot-SE (se\_e2\_a, se\_e2\_r, se\_e3, se\_atten)}, title = { diff --git a/README.md b/README.md index bd1c7bd2f5..9059d4d4bd 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ experiments to distributed training and MPI-parallel molecular dynamics. | | Advantage | What it unlocks | | --- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA-1, DPA-2, DPA-3, and DPA-4/SeZM][model-guide] for attention, message passing, large atomic models, and SO(3)-equivariant learning. | +| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomic models. | | 🧲 | **More than energy and force** | Model virials, Hessians, spin and magnetic forces, dipoles, polarizabilities, electronic density of states, atomic populations, and arbitrary intensive or extensive properties. | | 🧬 | **Foundation-model workflows** | Download [pretrained DPA models][pretrained], run [multi-task learning][multi-task], fine-tune full models or LoRA adapters, extract embeddings, or adapt models to downstream properties with [DPA-ADAPT]. | | 🔄 | **Backend flexibility** | Train or run supported models with [TensorFlow, PyTorch, JAX, or Paddle][backends], with backend-aware model formats and conversion paths for compatible architectures. | @@ -100,8 +100,8 @@ dp --pt train input_torch.json Ready-to-run inputs include: - [DPA-3 water training](./examples/water/dpa3/input_torch.json) -- [DPA-4/SeZM water training](./examples/water/dpa4/input.json) -- [PyTorch multi-task training](./examples/water_multi_task/pytorch_example/input_torch.json) +- [DPA-4 water training](./examples/water/dpa4/input.json) +- [Multi-task training](./examples/water_multi_task/pytorch_example/input_torch.json) - [DPA-ADAPT property prediction](./examples/dpa_adapt/README.md) For a guided end-to-end example, open the [web quick-start notebook][quick-start]. @@ -122,15 +122,26 @@ from deepmd.infer import DeepPot potential = DeepPot("DPA-3.2-5M") ``` +### Fine-tune a pretrained model + +Fine-tuning adapts a pretrained checkpoint to your dataset without training +from scratch: + +```bash +dp pretrained download DPA-3.2-5M +dp train input.json --finetune +``` + +The [fine-tuning guide][finetune] covers full-model and LoRA adaptation, and +[DPA-ADAPT][dpa-adapt] adapts pretrained DPA representations to downstream +property-prediction tasks. + ## 🧠 Choose a model family -| Family | A strong starting point when you need | -| ---------------- | ------------------------------------------------------------------------------------------------------------------ | -| **DeepPot-SE** | An efficient, established baseline with broad backend and deployment support. | -| **DPA-1** | Attention-based local representations and type embedding. | -| **DPA-2** | Multi-task pretraining, shared representations, and smooth conservative potentials. | -| **DPA-3** | Message passing over line-graph representations and broad chemical coverage. | -| **DPA-4 / SeZM** | SO(3)-equivariant learning, LoRA fine-tuning, optional ZBL bridging, spin support, and compiled `.pt2` deployment. | +DeepPot-SE is a strong default: efficient, established, and broadly supported. +For large atomistic models, start with [DPA-4](https://docs.deepmodeling.com/projects/deepmd/en/latest/model/dpa4.html); +its SO(3)-equivariant message passing, LoRA fine-tuning, spin support, and +compiled deployment make it the general-purpose large atomic model. Use the [model guide][model-guide] to compare supported backends, targets, data formats, precision, compression, and deployment constraints. @@ -159,9 +170,10 @@ web documentation. ### Simulation and workflow integrations -- [LAMMPS], [i-PI][ipi], [ASE], [GROMACS], +- [LAMMPS], [i-PI][ipi], [ASE], [JAX MD][jax-md], and [nvalchemi] -- Ecosystem integrations for OpenMM, Amber, CP2K, ABACUS, DP-GEN, and MLatom +- Ecosystem integrations for OpenMM, Amber, CP2K, GROMACS, ABACUS, DP-GEN, and + MLatom - External MACE and NequIP models through the DeePMD-GNN plugin See the [integration hub][integrations] for maintained interfaces, third-party @@ -192,16 +204,17 @@ that matches the version used and the method-specific papers listed in - Wang et al., “DeePMD-kit: A deep learning package for many-body potential energy representation and molecular dynamics,” *Computer Physics - Communications* 228 (2018), 178–184. + Communications* 228 (2018), 178–184 (describes the initial version). [![doi:10.1016/j.cpc.2018.03.016](https://img.shields.io/badge/DOI-10.1016%2Fj.cpc.2018.03.016-blue)](https://doi.org/10.1016/j.cpc.2018.03.016) [![Citations](https://citations.njzjz.win/10.1016/j.cpc.2018.03.016)](https://badge.dimensions.ai/details/doi/10.1016/j.cpc.2018.03.016) - Zeng et al., “DeePMD-kit v2: A software package for Deep Potential models,” - *The Journal of Chemical Physics* 159 (2023), 054801. + *The Journal of Chemical Physics* 159 (2023), 054801 (covers features until + v2.2.3). [![doi:10.1063/5.0155600](https://img.shields.io/badge/DOI-10.1063%2F5.0155600-blue)](https://doi.org/10.1063/5.0155600) [![Citations](https://citations.njzjz.win/10.1063/5.0155600)](https://badge.dimensions.ai/details/doi/10.1063/5.0155600) - Zeng et al., “DeePMD-kit v3: A Multiple-Backend Framework for Machine Learning Potentials,” *Journal of Chemical Theory and Computation* 21 - (2025), 4375–4385. + (2025), 4375–4385 (covers features until v3.0). [![doi:10.1021/acs.jctc.5c00340](https://img.shields.io/badge/DOI-10.1021%2Facs.jctc.5c00340-blue)](https://doi.org/10.1021/acs.jctc.5c00340) [![Citations](https://citations.njzjz.win/10.1021/acs.jctc.5c00340)](https://badge.dimensions.ai/details/doi/10.1021/acs.jctc.5c00340) @@ -218,8 +231,8 @@ DeePMD-kit is licensed under the [documentation]: https://docs.deepmodeling.com/projects/deepmd/en/latest/ [dpa-adapt]: https://docs.deepmodeling.com/projects/deepmd/en/latest/dpa_adapt/overview.html [embeddings]: https://docs.deepmodeling.com/projects/deepmd/en/latest/inference/embedding.html +[finetune]: https://docs.deepmodeling.com/projects/deepmd/en/latest/train/finetuning.html [freeze]: https://docs.deepmodeling.com/projects/deepmd/en/latest/freeze/freeze.html -[gromacs]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/gromacs.html [installation]: https://docs.deepmodeling.com/projects/deepmd/en/latest/install/easy-install.html [integrations]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/index.html [ipi]: https://docs.deepmodeling.com/projects/deepmd/en/latest/third-party/ipi.html diff --git a/doc/index.rst b/doc/index.rst index a7f91eabdb..4aae672266 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -34,7 +34,7 @@ Choose your path :link-type: doc :shadow: md - Compare DeepPot-SE, DPA-1, DPA-2, DPA-3, DPA-4/SeZM, and specialized + Compare DeepPot-SE, DPA-1, DPA-2, DPA-3, DPA-4, and specialized physics models. .. grid-item-card:: 🧬 Train and adapt @@ -63,7 +63,7 @@ Why DeePMD-kit :shadow: sm Use efficient DeepPot-SE descriptors, attention-based DPA models, large - atomic models, and SO(3)-equivariant DPA-4/SeZM. + atomic models, and SO(3)-equivariant DPA-4. .. grid-item-card:: Broad physical targets :shadow: sm @@ -164,7 +164,7 @@ Choose a model family * - :doc:`DPA-3 ` - Message passing over line-graph representations and broad chemical coverage. - * - :doc:`DPA-4 / SeZM ` + * - :doc:`DPA-4 ` - SO(3)-equivariant learning, LoRA fine-tuning, optional ZBL bridging, spin support, and compiled ``.pt2`` deployment. @@ -200,7 +200,7 @@ New and noteworthy .. grid:: 1 2 2 4 :gutter: 3 - .. grid-item-card:: DPA-4 / SeZM + .. grid-item-card:: DPA-4 :link: model/dpa4 :link-type: doc :shadow: sm From 20b636af287544c48dc5b65ce000a08e4c06c41c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 2 Aug 2026 13:55:57 +0000 Subject: [PATCH 10/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- CITATIONS.bib | 12 +++--------- README.md | 4 ++-- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/CITATIONS.bib b/CITATIONS.bib index 5cb1352469..97f5a10812 100644 --- a/CITATIONS.bib +++ b/CITATIONS.bib @@ -92,9 +92,7 @@ @article{Han_CommunComputPhys_2018_v23_p629 {Deep Potential: A General Representation of a Many-Body Potential Energy Surface} }, - author = { - Jiequn Han and Linfeng Zhang and Roberto Car and Weinan E - }, + author = {Jiequn Han and Linfeng Zhang and Roberto Car and Weinan E}, journal = {Commun. Comput. Phys.}, year = 2018, volume = 23, @@ -140,12 +138,8 @@ @article{Zhang_PhysRevLett_2018_v120_p143001 @article{Zhang_JChemPhys_2018_v149_p34101, annote = {coarse-grained model (DeePCG)}, - title = { - {DeePCG: Constructing Coarse-Grained Models via Deep Neural Networks} - }, - author = { - Linfeng Zhang and Jiequn Han and Han Wang and Roberto Car and Weinan E - }, + title = {{DeePCG: Constructing Coarse-Grained Models via Deep Neural Networks}}, + author = {Linfeng Zhang and Jiequn Han and Han Wang and Roberto Car and Weinan E}, journal = {J. Chem. Phys.}, year = 2018, volume = 149, diff --git a/README.md b/README.md index 9059d4d4bd..eca0d7cf34 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ experiments to distributed training and MPI-parallel molecular dynamics. | | Advantage | What it unlocks | | --- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomic models. | +| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomic models. | | 🧲 | **More than energy and force** | Model virials, Hessians, spin and magnetic forces, dipoles, polarizabilities, electronic density of states, atomic populations, and arbitrary intensive or extensive properties. | | 🧬 | **Foundation-model workflows** | Download [pretrained DPA models][pretrained], run [multi-task learning][multi-task], fine-tune full models or LoRA adapters, extract embeddings, or adapt models to downstream properties with [DPA-ADAPT]. | | 🔄 | **Backend flexibility** | Train or run supported models with [TensorFlow, PyTorch, JAX, or Paddle][backends], with backend-aware model formats and conversion paths for compatible architectures. | @@ -133,7 +133,7 @@ dp train input.json --finetune ``` The [fine-tuning guide][finetune] covers full-model and LoRA adaptation, and -[DPA-ADAPT][dpa-adapt] adapts pretrained DPA representations to downstream +[DPA-ADAPT] adapts pretrained DPA representations to downstream property-prediction tasks. ## 🧠 Choose a model family From c440a4a2e38c483c30707329c19a6418eba737bc Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Mon, 3 Aug 2026 21:18:09 +0800 Subject: [PATCH 11/17] docs: make pretrained fine-tune command use PyTorch mode and model branch --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eca0d7cf34..821d15755f 100644 --- a/README.md +++ b/README.md @@ -129,9 +129,13 @@ from scratch: ```bash dp pretrained download DPA-3.2-5M -dp train input.json --finetune +dp --pt train input.json --finetune --model-branch ``` +`DPA-3.2-5M` is a PyTorch multi-task checkpoint: run the trainer in PyTorch +mode with `dp --pt` and select the branch that matches your system with +`--model-branch` (list them with `dp --pt show model-branch`). + The [fine-tuning guide][finetune] covers full-model and LoRA adaptation, and [DPA-ADAPT] adapts pretrained DPA representations to downstream property-prediction tasks. From baa719a724c37ccb2e610657de16670e6fdebe81 Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Tue, 4 Aug 2026 13:50:29 +0800 Subject: [PATCH 12/17] docs: defer model family detail to the docs page Remove the DPA-4 feature enumeration from the README's "Choose a model family" section so the hosted documentation homepage owns the detailed comparison, avoiding duplicated claims that could drift. The README now points to DPA-4 and defers to the model guide, while doc/index.rst keeps the per-family comparison table. Coding-Agent: opencode opencode-Version: 1.18.11 Model: ustc/deepseek-v4-flash Reasoning-Effort: max --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 821d15755f..72fbacf4b9 100644 --- a/README.md +++ b/README.md @@ -143,12 +143,10 @@ property-prediction tasks. ## 🧠 Choose a model family DeepPot-SE is a strong default: efficient, established, and broadly supported. -For large atomistic models, start with [DPA-4](https://docs.deepmodeling.com/projects/deepmd/en/latest/model/dpa4.html); -its SO(3)-equivariant message passing, LoRA fine-tuning, spin support, and -compiled deployment make it the general-purpose large atomic model. +For large atomistic models, start with [DPA-4](https://docs.deepmodeling.com/projects/deepmd/en/latest/model/dpa4.html). -Use the [model guide][model-guide] to compare supported backends, targets, data -formats, precision, compression, and deployment constraints. +Use the [model guide][model-guide] to compare model families, supported backends, +targets, data formats, precision, compression, and deployment constraints. ## 🔬 Go beyond conventional force fields From c21e90bace220a23e6f3526c811ae8b3d7d6bd8b Mon Sep 17 00:00:00 2001 From: njzjz-bot Date: Tue, 4 Aug 2026 16:37:08 +0800 Subject: [PATCH 13/17] docs: use the fixed DPA-3.2-5M download path in the fine-tune example Replace the placeholder with the concrete ~/.cache/deepmd/pretrained/models/DPA-3.2-5M.pt path that 'dp pretrained download DPA-3.2-5M' writes to, and mirror it in the dp --pt show model-branch hint. Coding-Agent: opencode opencode-Version: 1.18.11 Model: ustc/deepseek-v4-flash Reasoning-Effort: max --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 72fbacf4b9..da0fd2f3f8 100644 --- a/README.md +++ b/README.md @@ -129,12 +129,13 @@ from scratch: ```bash dp pretrained download DPA-3.2-5M -dp --pt train input.json --finetune --model-branch +dp --pt train input.json --finetune ~/.cache/deepmd/pretrained/models/DPA-3.2-5M.pt --model-branch ``` `DPA-3.2-5M` is a PyTorch multi-task checkpoint: run the trainer in PyTorch mode with `dp --pt` and select the branch that matches your system with -`--model-branch` (list them with `dp --pt show model-branch`). +`--model-branch` (list them with +`dp --pt show ~/.cache/deepmd/pretrained/models/DPA-3.2-5M.pt model-branch`). The [fine-tuning guide][finetune] covers full-model and LoRA adaptation, and [DPA-ADAPT] adapts pretrained DPA representations to downstream From f57cd5a91d12831fbcabfb44e0aadb61ca86100d Mon Sep 17 00:00:00 2001 From: "njzjz-bot (driven by OpenClaw (model: custom-chat-jinzhezeng-group/gpt-5.6-terra))[bot]" <48687836+njzjz-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 08:31:52 +0000 Subject: [PATCH 14/17] docs: add lossless DPA-4 performance graphic Add the DPA-4 performance graphic to the repository README and the documentation landing page. Authored by OpenClaw (model: custom-chat-jinzhezeng-group/gpt-5.6-terra) --- README.md | 2 ++ doc/_static/dpa4-performance.webp | Bin 0 -> 107312 bytes doc/index.rst | 7 +++++++ 3 files changed, 9 insertions(+) create mode 100644 doc/_static/dpa4-performance.webp diff --git a/README.md b/README.md index da0fd2f3f8..2a11ed1143 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ Use DeePMD-kit across molecular and materials science—from finite molecules an covalent systems to periodic solids and metals—and scale from laptop experiments to distributed training and MPI-parallel molecular dynamics. +![DPA-4 delivers competitive energy and force accuracy at high throughput](./doc/_static/dpa4-performance.webp) + ## ⚡ Why DeePMD-kit | | Advantage | What it unlocks | diff --git a/doc/_static/dpa4-performance.webp b/doc/_static/dpa4-performance.webp new file mode 100644 index 0000000000000000000000000000000000000000..6ef18f1a473ac58ef1a9b039722e8c57afdcd47a GIT binary patch literal 107312 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 cN_OP_|i%$F?B= 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
-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 Date: Wed, 5 Aug 2026 08:36:07 +0000 Subject: [PATCH 15/17] docs: spell DPA4 consistently in benchmark graphic Use the project spelling DPA4 in the newly added README and documentation landing-page image text. Authored by OpenClaw (model: custom-chat-jinzhezeng-group/gpt-5.6-terra) --- README.md | 2 +- doc/index.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2a11ed1143..f650cdba9d 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Use DeePMD-kit across molecular and materials science—from finite molecules an covalent systems to periodic solids and metals—and scale from laptop experiments to distributed training and MPI-parallel molecular dynamics. -![DPA-4 delivers competitive energy and force accuracy at high throughput](./doc/_static/dpa4-performance.webp) +![DPA4 delivers competitive energy and force accuracy at high throughput](./doc/_static/dpa4-performance.webp) ## ⚡ Why DeePMD-kit diff --git a/doc/index.rst b/doc/index.rst index 1ed1ff6389..481782ae9e 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -17,11 +17,11 @@ covalent systems to periodic solids and metals—and scale from laptop experiments to distributed training and MPI-parallel molecular dynamics. .. figure:: _static/dpa4-performance.webp - :alt: DPA-4 delivers competitive energy and force accuracy at high throughput + :alt: DPA4 delivers competitive energy and force accuracy at high throughput :width: 100% :align: center - DPA-4 delivers competitive energy and force accuracy at high throughput. + DPA4 delivers competitive energy and force accuracy at high throughput. Choose your path ================ From e5acc800a385ef65a4d791fc1a418c645b9d1bfe Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Fri, 7 Aug 2026 18:19:54 +0800 Subject: [PATCH 16/17] Update README.md Co-authored-by: Duo <50307526+iProzd@users.noreply.github.com> Signed-off-by: Jinzhe Zeng --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f650cdba9d..8d94fc2162 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ experiments to distributed training and MPI-parallel molecular dynamics. | | Advantage | What it unlocks | | --- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomic models. | +| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomistic models. | | 🧲 | **More than energy and force** | Model virials, Hessians, spin and magnetic forces, dipoles, polarizabilities, electronic density of states, atomic populations, and arbitrary intensive or extensive properties. | | 🧬 | **Foundation-model workflows** | Download [pretrained DPA models][pretrained], run [multi-task learning][multi-task], fine-tune full models or LoRA adapters, extract embeddings, or adapt models to downstream properties with [DPA-ADAPT]. | | 🔄 | **Backend flexibility** | Train or run supported models with [TensorFlow, PyTorch, JAX, or Paddle][backends], with backend-aware model formats and conversion paths for compatible architectures. | From 481c46854f46df24655eb9e5f403bddd565f2c05 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:20:49 +0000 Subject: [PATCH 17/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d94fc2162..767cafd708 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ experiments to distributed training and MPI-parallel molecular dynamics. | | Advantage | What it unlocks | | --- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomistic models. | +| 🧠 | **Modern model portfolio** | Start with efficient DeepPot-SE descriptors or move to [DPA][model-guide] for large atomistic models. | | 🧲 | **More than energy and force** | Model virials, Hessians, spin and magnetic forces, dipoles, polarizabilities, electronic density of states, atomic populations, and arbitrary intensive or extensive properties. | | 🧬 | **Foundation-model workflows** | Download [pretrained DPA models][pretrained], run [multi-task learning][multi-task], fine-tune full models or LoRA adapters, extract embeddings, or adapt models to downstream properties with [DPA-ADAPT]. | | 🔄 | **Backend flexibility** | Train or run supported models with [TensorFlow, PyTorch, JAX, or Paddle][backends], with backend-aware model formats and conversion paths for compatible architectures. |