{"id":38586542,"url":"https://github.com/lab-cosmo/upet","last_synced_at":"2026-01-19T17:03:08.249Z","repository":{"id":283087329,"uuid":"950517431","full_name":"lab-cosmo/upet","owner":"lab-cosmo","description":"A universal interatomic potential for advanced materials modeling","archived":false,"fork":false,"pushed_at":"2026-01-11T19:15:34.000Z","size":653,"stargazers_count":89,"open_issues_count":6,"forks_count":6,"subscribers_count":13,"default_branch":"main","last_synced_at":"2026-01-11T19:47:08.339Z","etag":null,"topics":["machine-learned-interatomic-potentials","machine-learning","molecular-dynamics","universal-potential"],"latest_commit_sha":null,"homepage":"https://www.nature.com/articles/s41467-025-65662-7","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lab-cosmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-18T09:35:31.000Z","updated_at":"2026-01-11T17:25:50.000Z","dependencies_parsed_at":"2025-12-12T19:05:27.383Z","dependency_job_id":null,"html_url":"https://github.com/lab-cosmo/upet","commit_stats":null,"previous_names":["lab-cosmo/pet-mad","lab-cosmo/upet"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/lab-cosmo/upet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lab-cosmo%2Fupet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lab-cosmo%2Fupet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lab-cosmo%2Fupet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lab-cosmo%2Fupet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lab-cosmo","download_url":"https://codeload.github.com/lab-cosmo/upet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lab-cosmo%2Fupet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["machine-learned-interatomic-potentials","machine-learning","molecular-dynamics","universal-potential"],"created_at":"2026-01-17T08:20:02.842Z","updated_at":"2026-01-17T08:20:03.022Z","avatar_url":"https://github.com/lab-cosmo.png","language":"Python","funding_links":[],"categories":["Universal Potentials"],"sub_categories":[],"readme":"\u003cdiv align=\"center\" width=\"600\"\u003e\n  \u003cpicture\u003e\n    \u003csource srcset=\"https://github.com/lab-cosmo/upet/raw/refs/heads/main/docs/static/upet-logo-with-text-dark.svg\" media=\"(prefers-color-scheme: dark)\"\u003e\n    \u003cimg src=\"https://github.com/lab-cosmo/upet/raw/refs/heads/main/docs/static/upet-logo-with-text.svg\" alt=\"Figure\"\u003e\n  \u003c/picture\u003e\n\u003c/div\u003e\n\n\u003e [!WARNING]\n\u003e This repository is a successor of the PET-MAD repository, which is now deprecated.\n\u003e The package has been renamed to **UPET** to reflect the broader scope of the models\n\u003e and functionalities provided, going beyond the original PET-MAD model.\n\u003e Please use the version `1.4.4` of PET-MAD package if you want to use the old API.\n\u003e The older version of the README file with documentation is avaiable [here](docs/README_OLD.md).\n\u003e The migration guide from PET-MAD to UPET is available [here](docs/UPET_MIGRATION_GUIDE.md).\n\n\u003e [!NOTE]\n\u003e Are you here to try our **Matbench model? Here's all you need. Don't be scared by\n\u003e the parameter count: you'll see that our model is much faster than you think.**\n\u003e This model is excellent for convex hull energies, geometry optimization and phonons,\n\u003e but we highly recommend the lighter and more universal PET-MAD for molecular dynamics!\n```py\nfrom upet.calculator import UPETCalculator\ncalculator = UPETCalculator(model=\"pet-oam-xl\", version=\"1.0.0\", device=\"cuda\")\n```\n\n# UPET: Universal Models for Advanced Atomistic Simulations\n\nThis repository contains **UPET** models - universal interatomic potentials for\nadvanced materials modeling across the periodic table. These models are based on\nthe **Point Edge Transformer (PET)**  architecture, trained on various popular \nmaterials datasets, and are capable of predicting energies and forces in complex\natomistic simulations.\n\nIn addition, it contains **PET-MAD-DOS** - a universal model for predicting\nthe density of states (DOS) of materials, as well as their Fermi levels and bandgaps.\n**PET-MAD-DOS** is using a slightly modified **PET** architecture, and the **MAD** dataset. \n\n## Key Features\n\n- **Universality**: UPET models are generally-applicable, and can be used for\n  predicting energies and forces, as well as the density of states, Fermi levels,\n  and bandgaps for a wide range of materials and molecules.\n- **Accuracy**: UPET models achieve high accuracy in various types of atomistic\n  simulations of organic and inorganic systems, comparable with system-specific\n  models, while being fast and efficient.\n- **Efficiency**: UPET models are highly computationally efficient and have low\n  memory usage, what makes them suitable for large-scale simulations.\n- **Infrastructure**: Various MD engines are available for diverse research and\n  application needs.\n- **HPC Compatibility**: Efficient in HPC environments for extensive simulations.\n\n## Table of Contents\n1. [Installation](#installation)\n2. [Pre-trained Models](#pre-trained-models)\n3. [Interfaces for Atomistic Simulations](#interfaces-for-atomistic-simulations)\n4. [Usage](#usage)\n    - [ASE Interface](#ase-interface)\n        - [Basic usage](#basic-usage)\n        - [Non-conservative (direct) forces and stresses prediction](#non-conservative-direct-forces-and-stresses-prediction)\n    - [Evaluating UPET models on a dataset](#evaluating-upet-models-on-a-dataset)\n    - [Running UPET models with LAMMPS](#running-upet-models-with-lammps)\n    - [Uncertainty Quantification](#uncertainty-quantification)\n    - [Running UPET models with empirical dispersion corrections](#running-upet-models-with-empirical-dispersion-corrections)\n    - [Calculating the DOS, Fermi levels, and bandgaps](#calculating-the-dos-fermi-levels-and-bandgaps)\n    - [Dataset visualization with the PET-MAD featurizer](#dataset-visualization-with-the-pet-mad-featurizer)\n5. [Examples](#examples)\n6. [Fine-tuning](#fine-tuning)\n7. [Further Documentation](#further-documentation)\n8. [FAQs](#faqs)\n9. [Citing PET-MAD](#citing-pet-mad)\n\n## Installation\n\nYou can install UPET using pip:\n\n```bash\npip install upet\n```\n\nOr directly from the GitHub repository:\n\n```bash\npip install git+https://github.com/lab-cosmo/upet.git\n```\n\n## Pre-trained Models\n\nCurrently, we provide the following pre-trained models:\n\n| Name        | Level of theory         | Available sizes        | To be used for          | Training set          |\n|:------------|:-----------------------:|:----------------------:|:-----------------------:|:---------------------:|\n| PET-MAD     | PBEsol                  | S                      | materials and molecules | MAD                   |\n| PET-OMAD    | PBEsol                  | L                      | materials and molecules | OMat -\u003e MAD           |\n| PET-OMATPES | r2SCAN                  | L                      | materials               | OMat -\u003e MATPES        |\n| PET-OMat    | PBE                     | XS, S, M, L, XL        | materials               | OMat                  |\n| PET-OAM     | PBE (Materials Project) | L, XL                  | materials               | OMat -\u003e sAlex+MPtrj   |\n| PET-SPICE   | ωB97M-D3                | S, L                   | molecules               | SPICE                 | \n\nAll the checkpoints are available on the HuggingFace [repository](https://huggingface.co/lab-cosmo/upet).\n\n## Interfaces for Atomistic Simulations\n\nUPET integrates with the following atomistic simulation engines:\n\n- **Atomic Simulation Environment (ASE)**\n- **LAMMPS** (including the KOKKOS support)\n- **i-PI**\n- **OpenMM** (coming soon)\n- **GROMACS** (coming soon)\n\n## Usage\n\n### ASE Interface\n\n#### Basic usage\n\nIn order to perform a simple evaluation of the UPET models on a desired\nstructure, you can use the UPET calculator compatible with the Atomic\nSimulation Environment (ASE). Model name can be obtained from the\ntable above by combining the model name and the size, e.g., `pet-mad-s`, `pet-omat-l`, etc.\n\n```python\nfrom upet.calculator import UPETCalculator\nfrom ase.build import bulk\n\natoms = bulk(\"Si\", cubic=True, a=5.43, crystalstructure=\"diamond\")\ncalculator = UPETCalculator(model=\"pet-mad-s\", version=\"1.0.2\", device=\"cpu\")\natoms.calc = calculator\nenergy = atoms.get_potential_energy()\nforces = atoms.get_forces()\n```\n\nThese ASE methods are ideal for single-structure evaluations, but they are\ninefficient for the evaluation on a large number of pre-defined structures. To\nperform efficient evaluation in that case, read [here](docs/README_BATCHED.md).\n\n#### Non-conservative (direct) forces and stresses prediction\n\nUPET models also support the direct prediction of forces and stresses. In that case,\nthe forces and stresses are predicted as separate targets along with the energy\ntarget, i.e. not computed as derivatives of the energy using the PyTorch\nautomatic differentiation. This approach typically leads to 2-3x speedup in the\nevaluation time, since backward pass is disabled. However, as discussed in [this\npreprint](https://arxiv.org/abs/2412.11569), the non-conservative forces and stresses require additional care to avoid\ninstabilities during the molecular dynamics simulations.\n\nTo use the non-conservative forces and stresses, you need to set the `non_conservative` parameter to `True` when initializing the `UPETCalculator` class.\n\n```python\nfrom upet.calculator import UPETCalculator\nfrom ase.build import bulk\n\natoms = bulk(\"Si\", cubic=True, a=5.43, crystalstructure=\"diamond\")\ncalculator = UPETCalculator(model=\"pet-mad-s\", version=\"1.1.0\", device=\"cpu\", non_conservative=True)\natoms.calc = calculator\nenergy = atoms.get_potential_energy() # energy is computed as usual\nforces = atoms.get_forces() # forces now are predicted as a separate target\nstresses = atoms.get_stress() # stresses now are predicted as a separate target\n```\n\nMore details on how to make the direct forces MD simulations reliable are provided \nin the [Atomistic Cookbook](https://atomistic-cookbook.org/examples/pet-mad-nc/pet-mad-nc.html).\n\n### Evaluating UPET models on a dataset\n\nEfficient evaluation of UPET models on a desired dataset is also available from the\ncommand line via [`metatrain`](https://github.com/metatensor/metatrain), which\nis installed as a dependency of UPET. To evaluate the model, you first need\nto fetch the UPET model from the HuggingFace repository:\n\n```bash\nmtt export https://huggingface.co/lab-cosmo/upet/resolve/main/models/pet-mad-s-v1.0.2.ckpt -o model.pt\n```\n\nAlternatively, you can fetch and save the model using the UPET Python API:\n\n```py\nimport upet\n\n# Saving the latest version of UPET to a TorchScript file\nupet.save_upet(\n    model=\"pet-mad\",\n    size=\"s\",\n    version=\"1.0.2\",\n    output=\"model.pt\",\n)\n```\n\nBoth these commands will download the model and convert it to TorchScript format. Next,\nyou need to create the `options.yaml` file and specify the dataset you want to\nevaluate the model on (where the dataset is stored in `extxyz` format):\n\n```yaml\nsystems: your-test-dataset.xyz\ntargets:\n  energy:\n    key: \"energy\"\n    unit: \"eV\"\n```\n\nThen, you can use the `mtt eval` command to evaluate the model on a dataset:\n\n```bash\nmtt eval model.pt options.yaml --batch-size=16 --output=predictions.xyz\n```\n\nThis will create a file called `predictions.xyz` with the predicted energies and\nforces for each structure in the dataset. More details on how to use `metatrain`\ncan be found in the [Metatrain documentation](https://metatensor.github.io/metatrain/latest/getting-started/usage.html#evaluation).\n\n### Uncertainty Quantification\n\nUPET models can also be used to calculate the uncertainty of the energy prediction.\nThis feature is particularly important if you are interested in probing the model\non the data that is substantially different from the training data. Another important \nuse case is a propagation of the uncertainty of the energy prediction to other\nobservables, like phase transition temperatures, diffusion coefficients, etc.\n\nTo evaluate the uncertainty of the energy prediction, or to get an ensemble of energy\npredictions, you can use the `get_energy_uncertainty` and `get_energy_ensemble` methods\nof the `UPETCalculator` class:\n\n```python\nfrom upet.calculator import UPETCalculator\nfrom ase.build import bulk\n\natoms = bulk(\"Si\", cubic=True, a=5.43, crystalstructure=\"diamond\")\ncalculator = UPETCalculator(model=\"pet-mad-s\", version=\"1.0.2\", device=\"cpu\", calculate_uncertainty=True, calculate_ensemble=True)\natoms.calc = calculator\nenergy = atoms.get_potential_energy()\n\nenergy_uncertainty = calculator.get_energy_uncertainty(atoms, per_atom=False)\nenergy_ensemble = calculator.get_energy_ensemble(atoms, per_atom=False)\n```\n\nPlease note that the uncertainty quantification and ensemble prediction accepts the\n`per_atom` flag, which indicates whether the uncertainty/ensemble should be computed\nper atom or for the whole system. More details on the uncertainty quantification and shallow\nensemble method can be found in [this](https://doi.org/10.1088/2632-2153/ad594a) and\n[this](https://doi.org/10.1088/2632-2153/ad805f) papers. \n\n\n## Running UPET models with LAMMPS\n\n### 1. Install LAMMPS with metatomic support\n\nTo use UPET with LAMMPS, follow the instructions\n[here](https://docs.metatensor.org/metatomic/latest/engines/lammps.html#how-to-install-the-code) \nto install lammps-metatomic. We recomend you also use conda to install prebuilt lammps binaries.\n\n### 2. Run LAMMPS with UPET\n\n#### 2.1. CPU version\n\nFetch the UPET checkpoint from the HuggingFace repository:\n\n```bash\nmtt export https://huggingface.co/lab-cosmo/upet/resolve/main/models/pet-mad-s-v1.0.2.ckpt -o model.pt\n```\n\nThis will download the model and convert it to TorchScript format compatible\nwith LAMMPS, using the `metatomic` and `metatrain` libraries, which UPET is\nbased on.\n\nOther pre-trained UPET models can be prepared in the same way, e.g.,\n```bash\nmtt export https://huggingface.co/lab-cosmo/upet/resolve/main/models/pet-omat-xs-v1.0.0.ckpt -o model.pt\nmtt export https://huggingface.co/lab-cosmo/upet/resolve/main/models/pet-omatpes-l-v0.1.0.ckpt -o model.pt\n```\n\nPrepare a lammps input file using `pair_style metatomic` and defining the\nmapping from LAMMPS types in the data file to elements UPET can handle using\n`pair_coeff` syntax. Here we indicate that lammps atom type 1 is Silicon (atomic\nnumber 14).\n\n```\nunits metal\natom_style atomic\n\nread_data silicon.data\n\npair_style metatomic model.pt device cpu # Change device to 'cuda' evaluate UPET on GPU\npair_coeff * * 14\n\nneighbor 2.0 bin\ntimestep 0.001\n\ndump myDump all xyz 10 trajectory.xyz\ndump_modify myDump element Si\n\nthermo_style multi\nthermo 1\n\nvelocity all create 300 87287 mom yes rot yes\n\nfix 1 all nvt temp 300 300 0.10\n\nrun 100\n```\n\nCreate the **`silicon.data`** data file for a silicon system.\n\n```\n# LAMMPS data file for Silicon unit cell\n8 atoms\n1 atom types\n\n0.0  5.43  xlo xhi\n0.0  5.43  ylo yhi\n0.0  5.43  zlo zhi\n\nMasses\n\n1  28.084999992775295 # Si\n\nAtoms # atomic\n\n1   1   0   0   0\n2   1   1.3575   1.3575   1.3575\n3   1   0   2.715   2.715\n4   1   1.3575   4.0725   4.0725\n5   1   2.715   0   2.715\n6   1   4.0725   1.3575   4.0725\n7   1   2.715   2.715   0\n8   1   4.0725   4.0725   1.3575\n```\n\n```bash\nlmp -in lammps.in  # For serial version\nmpirun -np 1 lmp -in lammps.in  # For MPI version\n```\n\n#### 2.2. KOKKOS-enabled GPU version\n\nRunning LAMMPS with KOKKOS and GPU support is similar to the CPU version, but\nyou need to change the `lammps.in` slightly and run `lmp` binary with a few\nadditional flags.\n\nThe updated `lammps.in` file looks like this:\n\n```\npackage kokkos newton on neigh half\n\nunits metal\natom_style atomic/kk\n\nread_data silicon.data\n\npair_style metatomic/kk model.pt # This will use the same device as the kokkos simulation\npair_coeff * * 14\n\nneighbor 2.0 bin\ntimestep 0.001\n\ndump myDump all xyz 10 trajectory.xyz\ndump_modify myDump element Si\n\nthermo_style multi\nthermo 1\n\nvelocity all create 300 87287 mom yes rot yes\n\nfix 1 all nvt temp 300 300 0.10\n\nrun_style verlet/kk\nrun 100\n```\n\nThe **silicon.data** file remains the same.\n\nTo run the KOKKOS-enabled version of LAMMPS, you need to run\n\n```bash\nlmp -in lammps.in -k on g 1 -sf kk # For serial version\nmpirun -np 1 lmp -in lammps.in -k on g 1 -sf kk # For MPI version\n```\n\nHere, the `-k on g 1 -sf kk` flags are used to activate the KOKKOS\nsubroutines. Specifically `g 1` is used to specify, how many GPUs are the\nsimulation is parallelized over, so if running the large systems on two or more\nGPUs, this number should be adjusted accordingly.\n\n\n### 3. Important Notes\n\n- For **CPU calculations**, use a single MPI task unless simulating large\n  systems (30+ Å box size). Multi-threading can be enabled via:\n\n  ```bash\n  export OMP_NUM_THREADS=4\n  ```\n\n- For **GPU calculations**, use **one MPI task per GPU**.\n\n## Running UPET models with empirical dispersion corrections\n\n### In **ASE**:\n\nYou can combine the UPET calculator with the torch based implementation of\nthe D3 dispersion correction of `pfnet-research` - `torch-dftd`:\n\nWithin the UPET environment you can install `torch-dftd` via:\n\n```bash\npip install torch-dftd\n```\n\nThen you can use the `D3Calculator` class to combine the two calculators:\n\n```python\nfrom torch_dftd.torch_dftd3_calculator import TorchDFTD3Calculator\nfrom upet.calculator import UPETCalculator\nfrom ase.calculators.mixing import SumCalculator\n\ndevice = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n\ncalc_MAD = UPETCalculator(model=\"pet-mad-s\", version=\"1.0.2\", device=device)\ndft_d3 = TorchDFTD3Calculator(device=device, xc=\"pbesol\", damping=\"bj\")\n\ncombined_calc = SumCalculator([calc_MAD, dft_d3])\n\n# assign the calculator to the atoms object\natoms.calc = combined_calc\n\n```\n\n\n## Calculating the DOS, Fermi levels, and bandgaps\n\nUPET package also allows the use of the **PET-MAD-DOS** model to predict\nelectronic density of states of materials, as well as their Fermi levels and\nbandgaps. The **PET-MAD-DOS** model is also available in the **ASE** interface.\n\n```python\nfrom upet.calculator import PETMADDOSCalculator\n\natoms = bulk(\"Si\", cubic=True, a=5.43, crystalstructure=\"diamond\")\npet_mad_dos_calculator = PETMADDOSCalculator(version=\"latest\", device=\"cpu\")\n\nenergies, dos = pet_mad_dos_calculator.calculate_dos(atoms)\n```\n\nPredicting the densities of states for every atom in the crystal,\nor a list of atoms, is also possible:\n\n```python\n# Calculating the DOS for every atom in the crystal\nenergies, dos_per_atom = pet_mad_dos_calculator.calculate_dos(atoms, per_atom=True)\n\n# Calculating the DOS for a list of atoms\natoms_1 = bulk(\"Si\", cubic=True, a=5.43, crystalstructure=\"diamond\")\natoms_2 = bulk(\"C\", cubic=True, a=3.55, crystalstructure=\"diamond\")\n\nenergies, dos = pet_mad_dos_calculator.calculate_dos([atoms_1, atoms_2], per_atom=False)\n```\n\nFinally, you can use the `calculate_bandgap` and `calculate_efermi` methods to\npredict the bandgap and Fermi level for the crystal:\n\n```python\nbandgap = pet_mad_dos_calculator.calculate_bandgap(atoms)\nfermi_level = pet_mad_dos_calculator.calculate_efermi(atoms)\n```\n\nYou can also re-use the DOS calculated earlier:\n\n```python\nbandgap = pet_mad_dos_calculator.calculate_bandgap(atoms, dos=dos)\nfermi_level = pet_mad_dos_calculator.calculate_efermi(atoms, dos=dos)\n```\n\nThis option is also available for a list of `ase.Atoms` objects:\n\n```python\nbandgaps = pet_mad_dos_calculator.calculate_bandgap([atoms_1, atoms_2], dos=dos)\nfermi_levels = pet_mad_dos_calculator.calculate_efermi([atoms_1, atoms_2], dos=dos)\n```\n\n\n## Dataset visualization with the PET-MAD featurizer\n \nYou can use the last-layer features of the PET-MAD model together with a pre-trained \nsketch-map dimensionality reduction to obtain 2D and 3D representations\nof a dataset, e.g. to identify structural or chemical motifs.\nThis can be used as a stand-alone feature builder, or combined with\nthe [chemiscope viewer](https://chemiscope.org) to generate an \ninteractive visualization. \n\n```python\nimport ase.io\nimport chemiscope\nfrom upet.explore import PETMADFeaturizer\n\nfeaturizer = PETMADFeaturizer(version=\"latest\")\n\n# Load structures\nframes = ase.io.read(\"dataset.xyz\", \":\")\n\n# You can just compute features\nfeatures = featurizer(frames, None)\n\n# Or create an interactive visualization in a Jupyter notebook\nchemiscope.explore(\n    frames,\n    featurize=featurizer\n)\n```\n\n## Examples\n\nMore examples for **ASE, i-PI, and LAMMPS** are available in the [Atomistic\nCookbook](https://atomistic-cookbook.org/examples/pet-mad/pet-mad.html).\n\n## Fine-tuning\n\nUPET models can be fine-tuned using the\n[Metatrain](https://docs.metatensor.org/metatrain/latest/generated_examples/0-beginner/02-fine-tuning.html)\nlibrary. At the moment, we recommend fine-tuning from our OMat models, because they are\npre-trained on a very large dataset and they come in all sizes (from XS to XL, allowing\nyou to choose a good trade-off for your application).\n\n## Further Documentation\n\nAdditional documentation can be found in the\n[metatensor](https://docs.metatensor.org),\n[metatomic](https://docs.metatensor.org/metatomic) and\n[metatrain](https://metatensor.github.io/metatrain/) repositories.\n\n- [Training a model](https://docs.metatensor.org/metatrain/latest/generated_examples/0-beginner/00-basic-usage.html)\n- [Fine-tuning](https://docs.metatensor.org/metatrain/latest/generated_examples/0-beginner/02-fine-tuning.html)\n- [LAMMPS interface](https://docs.metatensor.org/metatomic/latest/engines/lammps.html)\n- [i-PI interface](https://docs.metatensor.org/metatomic/latest/engines/ipi.html)\n\n## FAQs\n\n**The model is slow for my application. What should I do?**\n- Make sure you run it on a GPU\n- Use an S or XS model\n- Simulate with LAMMPS (Kokkos-GPU version)\n- Use non-conservative forces and stresses, preferably with multiple time stepping: https://atomistic-cookbook.org/examples/pet-mad-nc/pet-mad-nc.html\n- Still too slow? Check out [FlashMD](https://github.com/lab-cosmo/flashmd) for a further 30x boost.\n\n**My MD ran out of memory. How do I fix that?**\n- Reduce the model size (XS models are the least memory-intensive)\n- Reduce the structure size\n- As a last resort, use non-conservative forces and stresses\n\n**The model is not fully equivariant. Should I worry?**\nAlthough our models are unconstrained, they are explicitly trained for equivariance, and the equivariance error\nis, in the vast majority of cases, one to two orders of magnitude smaller than the machine-learning error with\nrespect to the target electronic structure method. Hence:\n- Read [this paper](https://iopscience.iop.org/article/10.1088/2632-2153/ad86a0) which shows that the impact of non-equivariance on observables is often negligible.\n  Proceed to the next two points **only** if you believe that you're seeing effects due to non-equivariance.\n- For MD, activate random frame averaging (we are working on a tutorial)\n- For geometry optimization, use a symmetrized calculator (see `rotational_average_order` parameter in the ASE calculator)\n\n**The XL models are huge!**\nThere are two aspects to this:\n- The number of parameters is large, but these parameters are used in a very sparse way and the evaluation cost is comparable to, and often lower than, that of other large models in the field.\n- The listed cutoff radius may be large, but the cutoff strategy is adaptive, meaning that the model prunes the neighbor list internally. The effective cutoff for the vast majority of atomic environments in materials ends up being between 4 and 7 A in practice.\n\n**If you are fine-tuning our models, please also see the [metatrain FAQs](https://docs.metatensor.org/metatrain/latest/faq.html)**\n\n## Citing UPET Models\n\nIf you use any of the UPET models in your research, please cite the corresponding articles:\n\n```bibtex\n@misc{PET-MAD-2025,\n      title={PET-MAD as a lightweight universal interatomic potential for advanced materials modeling},\n      author={Mazitov, Arslan and Bigi, Filippo and Kellner, Matthias and Pegolo, Paolo and Tisi, Davide and Fraux, Guillaume and Pozdnyakov, Sergey and Loche, Philip and Ceriotti, Michele},\n      journal={Nature Communications},\n      volume={16},\n      number={1},\n      pages={10653},\n      year={2025},\n      publisher={Nature Publishing Group UK London},\n      url={https://doi.org/10.1038/s41467-025-65662-7},\n}\n@misc{PET-MAD-DOS-2025,\n      title={A universal machine learning model for the electronic density of states}, \n      author={Wei Bin How and Pol Febrer and Sanggyu Chong and Arslan Mazitov and Filippo Bigi and Matthias Kellner and Sergey Pozdnyakov and Michele Ceriotti},\n      year={2025},\n      eprint={2508.17418},\n      archivePrefix={arXiv},\n      primaryClass={physics.chem-ph},\n      url={https://arxiv.org/abs/2508.17418}, \n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flab-cosmo%2Fupet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flab-cosmo%2Fupet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flab-cosmo%2Fupet/lists"}