Skip to main content

TorchMD-NET provides state-of-the-art neural networks potentials for biomolecular systems

Project description

Code style: black CI Documentation Status

TorchMD-NET

TorchMD-NET provides state-of-the-art neural networks potentials (NNPs) and a mechanism to train them. It offers efficient and fast implementations if several NNPs and it is integrated in GPU-accelerated molecular dynamics code like ACEMD, OpenMM and TorchMD. TorchMD-NET exposes its NNPs as PyTorch modules.

Documentation

Documentation is available at https://torchmd-net.readthedocs.io

Available architectures

Installation

TorchMD-Net is available as a pip installable wheel as well as in conda-forge

TorchMD-Net provides builds for CPU-only, CUDA 11.8 and CUDA 12.4. CPU versions are only provided as reference, as the performance will be extremely limited. Depending on which variant you wish to install, you can install it with one of the following commands:

# The following will install the CUDA 12.4 version by default
pip install torchmd-net 
# The following will install the CUDA 11.8 version
pip install torchmd-net --extra-index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://us-central1-python.pkg.dev/pypi-packages-455608/cu118/simple
# The following will install the CUDA 12.4 version
pip install torchmd-net --extra-index-url https://download.pytorch.org/whl/cu124 --extra-index-url https://us-central1-python.pkg.dev/pypi-packages-455608/cu124/simple
# The following will install the CPU only version (not recommended)
pip install torchmd-net --extra-index-url https://download.pytorch.org/whl/cpu --extra-index-url https://us-central1-python.pkg.dev/pypi-packages-455608/cpu/simple   

Alternatively it can be installed with conda or mamba with one of the following commands. We recommend using Miniforge instead of anaconda.

mamba install torchmd-net cuda-version=11.8
mamba install torchmd-net cuda-version=12.4

Install from source

TorchMD-Net is installed using pip, but you will need to install some dependencies before. Check this documentation page.

Usage

Specifying training arguments can either be done via a configuration yaml file or through command line arguments directly. Several examples of architectural and training specifications for some models and datasets can be found in examples/. Note that if a parameter is present both in the yaml file and the command line, the command line version takes precedence. GPUs can be selected by setting the CUDA_VISIBLE_DEVICES environment variable. Otherwise, the argument --ngpus can be used to select the number of GPUs to train on (-1, the default, uses all available GPUs or the ones specified in CUDA_VISIBLE_DEVICES). Keep in mind that the GPU ID reported by nvidia-smi might not be the same as the one CUDA_VISIBLE_DEVICES uses.
For example, to train the Equivariant Transformer on the QM9 dataset with the architectural and training hyperparameters described in the paper, one can run:

mkdir output
CUDA_VISIBLE_DEVICES=0 torchmd-train --conf torchmd-net/examples/ET-QM9.yaml --log-dir output/

Run torchmd-train --help to see all available options and their descriptions.

Pretrained models

See here for instructions on how to load pretrained models.

Creating a new dataset

If you want to train on custom data, first have a look at torchmdnet.datasets.Custom, which provides functionalities for loading a NumPy dataset consisting of atom types and coordinates, as well as energies, forces or both as the labels. Alternatively, you can implement a custom class according to the torch-geometric way of implementing a dataset. That is, derive the Dataset or InMemoryDataset class and implement the necessary functions (more info here). The dataset must return torch-geometric Data objects, containing at least the keys z (atom types) and pos (atomic coordinates), as well as y (label), neg_dy (negative derivative of the label w.r.t atom coordinates) or both.

Custom prior models

In addition to implementing a custom dataset class, it is also possible to add a custom prior model to the model. This can be done by implementing a new prior model class in torchmdnet.priors and adding the argument --prior-model <PriorModelName>. As an example, have a look at torchmdnet.priors.Atomref.

Multi-Node Training

In order to train models on multiple nodes some environment variables have to be set, which provide all necessary information to PyTorch Lightning. In the following we provide an example bash script to start training on two machines with two GPUs each. The script has to be started once on each node. Once torchmd-train is started on all nodes, a network connection between the nodes will be established using NCCL.

In addition to the environment variables the argument --num-nodes has to be specified with the number of nodes involved during training.

export NODE_RANK=0
export MASTER_ADDR=hostname1
export MASTER_PORT=12910

mkdir -p output
CUDA_VISIBLE_DEVICES=0,1 torchmd-train --conf torchmd-net/examples/ET-QM9.yaml.yaml --num-nodes 2 --log-dir output/
  • NODE_RANK : Integer indicating the node index. Must be 0 for the main node and incremented by one for each additional node.
  • MASTER_ADDR : Hostname or IP address of the main node. The same for all involved nodes.
  • MASTER_PORT : A free network port for communication between nodes. PyTorch Lightning suggests port 12910 as a default.

Known Limitations

  • Due to the way PyTorch Lightning calculates the number of required DDP processes, all nodes must use the same number of GPUs. Otherwise training will not start or crash.
  • We observe a 50x decrease in performance when mixing nodes with different GPU architectures (tested with RTX 2080 Ti and RTX 3090).
  • Some CUDA systems might hang during a multi-GPU parallel training. Try export NCCL_P2P_DISABLE=1, which disables direct peer to peer GPU communication.

Cite

If you use TorchMD-NET in your research, please cite the following papers:

Main reference

@misc{pelaez2024torchmdnet,
title={TorchMD-Net 2.0: Fast Neural Network Potentials for Molecular Simulations}, 
author={Raul P. Pelaez and Guillem Simeon and Raimondas Galvelis and Antonio Mirarchi and Peter Eastman and Stefan Doerr and Philipp Thölke and Thomas E. Markland and Gianni De Fabritiis},
year={2024},
eprint={2402.17660},
archivePrefix={arXiv},
primaryClass={cs.LG}
}

TensorNet

@inproceedings{simeon2023tensornet,
title={TensorNet: Cartesian Tensor Representations for Efficient Learning of Molecular Potentials},
author={Guillem Simeon and Gianni De Fabritiis},
booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
year={2023},
url={https://openreview.net/forum?id=BEHlPdBZ2e}
}

Equivariant Transformer

@inproceedings{
tholke2021equivariant,
title={Equivariant Transformers for Neural Network based Molecular Potentials},
author={Philipp Th{\"o}lke and Gianni De Fabritiis},
booktitle={International Conference on Learning Representations},
year={2022},
url={https://openreview.net/forum?id=zNHzqZ9wrRB}
}

Graph Network

@article{Majewski2023,
  title = {Machine learning coarse-grained potentials of protein thermodynamics},
  volume = {14},
  ISSN = {2041-1723},
  url = {http://dx.doi.org/10.1038/s41467-023-41343-1},
  DOI = {10.1038/s41467-023-41343-1},
  number = {1},
  journal = {Nature Communications},
  publisher = {Springer Science and Business Media LLC},
  author = {Majewski,  Maciej and Pérez,  Adrià and Th\"{o}lke,  Philipp and Doerr,  Stefan and Charron,  Nicholas E. and Giorgino,  Toni and Husic,  Brooke E. and Clementi,  Cecilia and Noé,  Frank and De Fabritiis,  Gianni},
  year = {2023},
  month = sep 
}

Developer guide

Implementing a new architecture

To implement a new architecture, you need to follow these steps:
1. Create a new class in torchmdnet.models that inherits from torch.nn.Model. Follow TorchMD_ET as a template. This is a minimum implementation of a model:

class MyModule(nn.Module):
  def __init__(self, parameter1, parameter2):
	super(MyModule, self).__init__()
	# Define your model here
	self.layer1 = nn.Linear(10, 10)
	...
	# Initialize your model parameters here
	self.reset_parameters()

    def reset_parameters(self):
      # Initialize your model parameters here
	  nn.init.xavier_uniform_(self.layer1.weight)
	...
	
  def forward(self,
        z: Tensor, # Atomic numbers, shape (n_atoms, 1)
        pos: Tensor, # Atomic positions, shape (n_atoms, 3)
        batch: Tensor, # Batch vector, shape (n_atoms, 1). All atoms in the same molecule have the same value and are contiguous.
        q: Optional[Tensor] = None, # Atomic charges, shape (n_atoms, 1)
        s: Optional[Tensor] = None, # Atomic spins, shape (n_atoms, 1)
    ) -> Tuple[Tensor, Tensor, Tensor, Tensor, Tensor]:
	# Define your forward pass here
	scalar_features = ...
	vector_features = ...
	# Return the scalar and vector features, as well as the atomic numbers, positions and batch vector
	return scalar_features, vector_features, z, pos, batch

2. Add the model to the __all__ list in torchmdnet.models.__init__.py. This will make the tests pick your model up.
3. Tell models.model.create_model how to initialize your module by adding a new entry, for instance:

    elif args["model"] == "mymodule":
       from torchmdnet.models.torchmd_mymodule import MyModule
       is_equivariant = False # Set to True if your model is equivariant
       representation_model = MyModule(
           parameter1=args["parameter1"],
           parameter2=args["parameter2"],
           **shared_args, # Arguments typically shared by all models
       )

4. Add any new parameters required to initialize your module to scripts.train.get_args. For instance:

  parser.add_argument('--parameter1', type=int, default=32, help='Parameter1 required by MyModule')
  ...

5. Add an example configuration file to torchmd-net/examples that uses your model.
6. Make tests use your configuration file by adding a case to tests.utils.load_example_args. For instance:

if model_name == "mymodule":
       config_file = join(dirname(dirname(__file__)), "examples", "MyModule-QM9.yaml")

At this point, if your module is missing some feature the tests will let you know, and you can add it. If you add a new feature to the package, please add a test for it.

Code style

We use black. Please run black on your modified files before committing.

Testing

To run the tests, install the package and run pytest in the root directory of the repository. Tests are a good source of knowledge on how to use the different components of the package.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

torchmd_net_cu12-2.4.13-cp313-cp313-win_amd64.whl (577.8 kB view details)

Uploaded CPython 3.13Windows x86-64

torchmd_net_cu12-2.4.13-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

torchmd_net_cu12-2.4.13-cp312-cp312-win_amd64.whl (577.8 kB view details)

Uploaded CPython 3.12Windows x86-64

torchmd_net_cu12-2.4.13-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

torchmd_net_cu12-2.4.13-cp311-cp311-win_amd64.whl (577.8 kB view details)

Uploaded CPython 3.11Windows x86-64

torchmd_net_cu12-2.4.13-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

torchmd_net_cu12-2.4.13-cp310-cp310-win_amd64.whl (577.8 kB view details)

Uploaded CPython 3.10Windows x86-64

torchmd_net_cu12-2.4.13-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

torchmd_net_cu12-2.4.13-cp39-cp39-win_amd64.whl (577.8 kB view details)

Uploaded CPython 3.9Windows x86-64

torchmd_net_cu12-2.4.13-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file torchmd_net_cu12-2.4.13-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f9e3ae9f62d665c9e1c37eaac97e93017e726be8d29470b1d0f4522462fe7616
MD5 040979f3235c32b59d58317913e41d61
BLAKE2b-256 6487833c7017e325917a20135d7709aa28e255d5c174b74ba30b8ed57f89fa3b

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 62544bc6efca62af1480e95b4662f66f3719961c7de029b1231e57aefd2de2d6
MD5 66736fb40de1d1064c125acf2ce95b06
BLAKE2b-256 44c5824ad3049dd8a4fdbe5afed0b37c897ecd4e08fb0775c2464a58a1459913

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e2752e8c100a684639567599008e23da49aa01bd41bfa58ae4327c0a37f6165e
MD5 f4709995dabef9fa8a52af9d548fb77b
BLAKE2b-256 e7e145eab3b03f0a72259c9252fd0d29644bce423eebbaf1f0c97ee1573e803b

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9b7b8be06a9a701717bae6a65736f8af52dcf9742d21c323602bff2637314bdb
MD5 8cad4eb3beec9e12ab31973c53af7743
BLAKE2b-256 d38a0a772cba529658cf7262af5d7feb7dea8a59d315c19315342719c8691229

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cf45dd077ab500343d5aa2ad22963419b85a258a174462401ec9bd20fac3ea22
MD5 a03770ad3373f1b34a1857393f7b701b
BLAKE2b-256 e916146587d0f4158ec71993d99dc4bb4d44bac74650d84bc3f8a570b47aaf54

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1068a950b424e457b1f45c50c79e49f4fddc55303a15e769e982b95983c99db5
MD5 17c9a815110e0edfaf7c4965fcf2ec6a
BLAKE2b-256 810be947e960a47df2a43785d6d3db51c3db0ec0e77647027aa3a2f8b545b2c0

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b277476de3825194750086ab7d47d4d7ab6e71a2cbdabb0d420c3971c26fb811
MD5 b4258241b372ccea9f7bc9f06d9ab7f5
BLAKE2b-256 ee593dffc7823f322470fcbccb7cc7c53eb0a56e52039e2f5fddc697bdc2ec9e

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b19827f570f293a0b40c6ceb015002df970f0057c00f4875db899c6dbadc8d9
MD5 3ac23174f4d2ad5ab1fcca3ead78ecba
BLAKE2b-256 f2efdef4f5482b7c3a8eb876a737fb2690d7e5c29c4455f1ddcafaffeb0e2d6a

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1e89c93fecfb6ffc870801874c7b187e38311d191d8d4cc6d5ce227233f488e8
MD5 796471c25a08205af7eca9e8844f9851
BLAKE2b-256 9ffb30a15aa4fc92db8a5592b825564e8c7b972f3b2a40d64e56727381dd3535

See more details on using hashes here.

File details

Details for the file torchmd_net_cu12-2.4.13-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu12-2.4.13-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 64147949c656327f6b04882368224190597d9672f96064cfa0582c2e83762c27
MD5 8cb19d7b60c9aa310c7eeb5681d30ab3
BLAKE2b-256 8d96563ae36e78c2db6a73cc8ec4aee5054b0bcf0eccff8d09b9d0e9053058f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page