mirror of
https://github.com/cp2k/cp2k.git
synced 2026-07-26 13:15:21 -04:00
60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# MACE
|
|
|
|
MACE is a framework for building interatomic potentials using higher-order equivariant
|
|
message-passing neural networks. The methodology is described in detail in the literature by Batatia
|
|
et al. (2022).
|
|
|
|
**Note:** Running MACE requires a CP2K build with LibTorch support
|
|
|
|
Like the [NequIP/Allegro](https://manual.cp2k.org/trunk/methods/machine_learning/nequip.html)
|
|
interface, CP2K runs MACE models through the generic LibTorch interface: a trained MACE model is
|
|
exported once to a self-contained TorchScript file (`.pth`), which CP2K then loads and evaluates at
|
|
runtime. No Python interpreter is involved during the simulation.
|
|
|
|
## Exporting a MACE model for CP2K
|
|
|
|
Wraps a trained MACE model (`.model`) and compiles it to CP2K-loadable TorchScrip file with the
|
|
helper script `cp2k/tools/mace/create_cp2k_model.py`:
|
|
|
|
```shell
|
|
python create_cp2k_model.py my_mace.model --dtype float64
|
|
# -> writes my_mace.model-cp2k.pth
|
|
```
|
|
|
|
This conversion only needs to be performed once on a machine with both `torch` and `mace` installed.
|
|
The resulting `*.pth` file uses the same tensor and metadata format as the NequIP interface (inputs
|
|
`pos`, `edge_index`, `edge_cell_shift`, `cell`, `atom_types`; outputs `atomic_energy`, `forces`,
|
|
`virial`) and embeds the metadata (`num_types`, `r_max`, `type_names`, `model_dtype`) that CP2K
|
|
reads to build the neighbour graph. The `torch` version used for export must be compatible with the
|
|
LibTorch version linked into CP2K.
|
|
|
|
## Input Section
|
|
|
|
Inference is configured through the [MACE](#CP2K_INPUT.FORCE_EVAL.MM.FORCEFIELD.NONBONDED.MACE)
|
|
section within the `&NONBONDED` forcefield parameters:
|
|
|
|
```text
|
|
&FORCEFIELD
|
|
&NONBONDED
|
|
&MACE
|
|
ATOMS Cu
|
|
POT_FILE_NAME MACE/my_mace.model-cp2k.pth
|
|
&END MACE
|
|
&END NONBONDED
|
|
&END FORCEFIELD
|
|
```
|
|
|
|
- [ATOMS](#CP2K_INPUT.FORCE_EVAL.MM.FORCEFIELD.NONBONDED.MACE.ATOMS): a list of elements/kinds; the
|
|
mapping to the model type list must be consistent with the coordinates in `&COORDS`/`&TOPOLOGY`.
|
|
- [POT_FILE_NAME](#CP2K_INPUT.FORCE_EVAL.MM.FORCEFIELD.NONBONDED.MACE.POT_FILE_NAME): path to the
|
|
exported MACE model.
|
|
|
|
MACE is a message-passing model with a non-local receptive field. As with NequIP, the interface
|
|
evaluates the full system on every MPI rank and divides the energy, forces, and virial by the number
|
|
of ranks.
|
|
|
|
## Further Resources
|
|
|
|
- **MACE:** Paper [](#Batatia2022) and source code at
|
|
[github.com/ACEsuit/mace](https://github.com/ACEsuit/mace).
|
|
- **e3nn:** For an introduction to Euclidean neural networks, visit [e3nn.org](https://e3nn.org).
|