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_cu11-2.4.14-cp313-cp313-win_amd64.whl (611.9 kB view details)

Uploaded CPython 3.13Windows x86-64

torchmd_net_cu11-2.4.14-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.5 MB view details)

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

torchmd_net_cu11-2.4.14-cp312-cp312-win_amd64.whl (611.9 kB view details)

Uploaded CPython 3.12Windows x86-64

torchmd_net_cu11-2.4.14-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.5 MB view details)

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

torchmd_net_cu11-2.4.14-cp311-cp311-win_amd64.whl (611.9 kB view details)

Uploaded CPython 3.11Windows x86-64

torchmd_net_cu11-2.4.14-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.5 MB view details)

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

torchmd_net_cu11-2.4.14-cp310-cp310-win_amd64.whl (611.9 kB view details)

Uploaded CPython 3.10Windows x86-64

torchmd_net_cu11-2.4.14-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.5 MB view details)

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

torchmd_net_cu11-2.4.14-cp39-cp39-win_amd64.whl (611.9 kB view details)

Uploaded CPython 3.9Windows x86-64

torchmd_net_cu11-2.4.14-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (5.5 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_cu11-2.4.14-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c762c08813bdbd9b2c4145f52bfc7b860db29a55d113085964e476f644945c78
MD5 bf63b0d219325677879bf7bd058acc47
BLAKE2b-256 b6eec8f0e16ef3aff773629641ef1955626bb2361400e44518ac5843d031c915

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f4daddec0d56af692dbd88aa16533b395d097488d483421c23c8fc9c5584d592
MD5 d8c82265441f154cb662d659ce4e56d3
BLAKE2b-256 ff9b393e586ba6377ffd13c734535d52c454c5268dbb91e62ada396bbbe66850

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5a1e33241fbcdf6e770f3644f03f9bea36a816ebad56bee13d02852c53243217
MD5 8986f1f6b4b26ba4e0fcb7363ca2d9db
BLAKE2b-256 e784aa5f6e75913f60221b03bdd8706c1e14fc3b4cdcd50260cf219e7742f891

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 46d736234b2ce348d28fc66b2d1789c32b508ffed610e9b171530f9d19844c63
MD5 c7a88c1ba4eb50d2b69d26628daa4da7
BLAKE2b-256 4ff1989c191d9ddc71635566ed5a9696f413e517fa99ac789477662f2544ee49

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4eef704857ea9ca9a582692350889fb4ebacba49249dce20e46b2ec96b1fd8c7
MD5 6b641bbabfc344ef483588591af02cae
BLAKE2b-256 746ec7f76f8ea0092fac88bc991c2ddcc1ab816b50177574ca6ff11f5649beb8

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 23cc1d484afe6f78a081778e948d3109eb1c110bbece991f0216d7c54142165c
MD5 836f6f5d0b24baa6a96505a4d15ecc58
BLAKE2b-256 eff1091419eaf87960f138b3a3badbbcafae316cec94fcf0f1d317aad8d94b3a

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5d7f93c2fef3ce9b971f5e6fe5870462fe5a0c1cfc521484a368d0eedb43a39c
MD5 d5c183ef559ab46c4e4a1f4ae0baba16
BLAKE2b-256 1075c2688b1f0a422560ccf6023f27604e6ed16c61a31813638a92abc6985fdf

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6b5334bbb270198d99f89174fd7987c452770b0187c562a63c35fb2fb1b72370
MD5 4a916d2f117caaba227033788922e6f1
BLAKE2b-256 81d5febc198485271d74b7c9cea5a551dfabc1e7c618a642386ae82b0f91901e

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 08346b13a93fdd1689db52de3b0645cd4b69dfbf896b0be9e4d0da6c7a689ec7
MD5 fbd66673e4e59ce268edbe0eb4430bad
BLAKE2b-256 1554b689f08c4f681705820df2a85298d08eaf1a7c61b9c8e1288873aa40a188

See more details on using hashes here.

File details

Details for the file torchmd_net_cu11-2.4.14-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for torchmd_net_cu11-2.4.14-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1b995eb0ccfa4cfe3b73c4f3351d8341fd0a4550b4666966c5bbdc9729dbee5e
MD5 b5525175d2e192b65cbe89fb391833cd
BLAKE2b-256 bec068c213490f2ba724bef92b0394835a28455e21b509e0d80110ef6d24ee4e

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