MACE bietet schnelle und genaue interatomische Potentiale für maschinelles Lernen mit äquivarianter Botschaft höherer Ordnung.
Dieses Repository enthält die Mace Reference -Implementierung, die von Ilyes Batatia, Gregor Simm, David Kovacs und der Gruppe von Gabor Csanyi und Freunden entwickelt wurde (siehe Mitwirkende).
Auch verfügbar:
Eine teilweise Dokumentation finden Sie unter: https://mace-docs.readthedocs.io
Stellen Sie sicher, dass Sie Pytorch installieren. Weitere Informationen finden Sie in der offiziellen Pytorch -Installation für die Installationsanweisungen. Wählen Sie die entsprechenden Optionen für Ihr System aus.
Dies ist die empfohlene Methode zur Installation von Ma..
pip install --upgrade pip
pip install mace-torch
Hinweis: Das Homonymous -Paket auf PYPI hat nichts damit zu tun.
git clone https://github.com/ACEsuit/mace.git
pip install ./mace
Um ein Kennzeichenmodell zu trainieren, können Sie das Skript mace_run_train
verwenden, das sich an der üblichen Stelle befinden sollte, an der PIP Binärdateien platziert (oder Sie ausdrücklich python3 <path_to_cloned_dir>/mace/cli/run_train.py
) ausführen können.
mace_run_train
--name= " MACE_model "
--train_file= " train.xyz "
--valid_fraction=0.05
--test_file= " test.xyz "
--config_type_weights= ' {"Default":1.0} '
--E0s= ' {1:-13.663181292231226, 6:-1029.2809654211628, 7:-1484.1187695035828, 8:-2042.0330099956639} '
--model= " MACE "
--hidden_irreps= ' 128x0e + 128x1o '
--r_max=5.0
--batch_size=10
--max_num_epochs=1500
--swa
--start_swa=1200
--ema
--ema_decay=0.99
--amsgrad
--restart_latest
--device=cuda
Verwenden Sie das Argument --valid_file
, um ein bestimmtes Validierungssatz zu geben. Um eine größere Chargengröße für die Bewertung des Validierungssatzes festzulegen, geben Sie --valid_batch_size
an.
Um die Größe des Modells zu steuern, müssen Sie sich ändern --hidden_irreps
. Für die meisten Anwendungen lautet die empfohlene Standardmodellgröße --hidden_irreps='256x0e'
(dh 256 invariante Nachrichten) oder --hidden_irreps='128x0e + 128x1o'
. Wenn das Modell nicht genau genug ist, können Sie Funktionen mit höherer Ordnung, z. B. 128x0e + 128x1o + 128x2e
, enthalten oder die Anzahl der Kanäle auf 256
erhöhen. Es ist auch möglich, das Modell mit den Tasten --num_channels=128
und --max_L=1
anzugeben.
Es wird normalerweise bevorzugt, die isolierten Atome zum Trainingssatz hinzuzufügen, anstatt in ihren Energien wie im obigen Beispiel durch die Befehlszeile zu lesen. Um sie im Trainingssatz zu kennzeichnen, setzen Sie config_type=IsolatedAtom
in ihren infieligs. Wenn Sie es vorziehen, die Energien der isolierten Atome nicht zu verwenden oder nicht zu kennen, können Sie die Option verwenden --E0s="average"
, der die Atomsenergien mithilfe der Regression mit kleinster Quadrate schätzt.
Wenn das Schlüsselwort --swa
aktiviert ist, wird das Energiegewicht des Verlusts für die letzten ~ 20% der Trainings -Epochen erhöht (von --start_swa
-Epochen). Diese Einstellung hilft normalerweise, die Energiefehler zu senken.
Die Genauigkeit kann mit dem Schlüsselwort --default_dtype
geändert werden. Die Standardeinstellung ist float64
, aber float32
ergibt eine erhebliche Beschleunigung (normalerweise ein Faktor von x2 im Training).
Die Schlüsselwörter --batch_size
und --max_num_epochs
sollten basierend auf der Größe des Trainingssatzes angepasst werden. Die Chargengröße sollte erhöht werden, wenn die Anzahl der Trainingsdaten zunimmt und die Anzahl der Epochen verringert werden sollte. Eine Heuristik für Anfangseinstellungen besteht darin, die Anzahl der Gradienten -Update -Konstante auf 200 000 zu berücksichtigen, die als berechnet werden können
Der Code kann das Trainingssatz mit heterogenen Etiketten verarbeiten, beispielsweise mit Bulkstrukturen mit Spannung und isolierten Molekülen. In diesem Beispiel, damit der Code die Belastung von Molekülen ignoriert, fügen Sie Ihre Moleküle -Konfiguration eine config_stress_weight = 0.0
an.
Um die Apple Silicon GPU -Beschleunigung zu verwenden, installieren Sie die neueste Pytorch -Version und geben Sie --device=mps
an.
Verwenden Sie für Multi-GPU-Schulungen die --distributed
Flagge. Dadurch wird das DistributedDataparallel -Modul von Pytorch verwendet, um das Modell auf mehreren GPUs zu trainieren. Kombinieren Sie mit Online-Datenladen für große Datensätze (siehe unten). Ein Beispiel -Slurm -Skript finden Sie in mace/scripts/distributed_example.sbatch
.
Die Möglichkeit, alle oder einige Argumente mit einem YAML zu analysieren, ist verfügbar. Um beispielsweise ein Modell mithilfe der oben genannten Argumente zu trainieren, können Sie eine YAML -Datei your_configs.yaml
mit dem folgenden Inhalt erstellen:
name : nacl
seed : 2024
train_file : train.xyz
swa : yes
start_swa : 1200
max_num_epochs : 1500
device : cpu
test_file : test.xyz
E0s :
41 : -1029.2809654211628
38 : -1484.1187695035828
8 : -2042.0330099956639
config_type_weights :
Default : 1.0
Und an die Befehlszeile anhängen --config="your_configs.yaml"
. Jedes in der Befehlszeile angegebene Argument überschreibt die in der YAML -Datei.
Führen Sie die mace_eval_configs
aus, um Ihr Kennzeichen in einer XYZ -Datei zu bewerten:
mace_eval_configs
--configs= " your_configs.xyz "
--model= " your_model.model "
--output= " ./your_output.xyz "
Sie können unser Colab -Tutorial durchführen, um schnell mit Mace zu beginnen.
Wir haben auch eine detailliertere Colab -Tutorials zu:
Wenn Sie einen großen Datensatz haben, der möglicherweise nicht in den GPU-Speicher passt, wird empfohlen, die Daten auf einer CPU vorzubereiten und das Online-Dataloading für das Training des Modells zu verwenden. So werden Sie Ihr Datensatz vorbereiten, das als XYZ -Datei angegeben ist, das Skript preprocess_data.py
. Ein Beispiel wird hier angegeben:
mkdir processed_data
python ./mace/scripts/preprocess_data.py
--train_file= " /path/to/train_large.xyz "
--valid_fraction=0.05
--test_file= " /path/to/test_large.xyz "
--atomic_numbers= " [1, 6, 7, 8, 9, 15, 16, 17, 35, 53] "
--r_max=4.5
--h5_prefix= " processed_data/ "
--compute_statistics
--E0s= " average "
--seed=123
Um alle Optionen und eine kleine Beschreibung zu sehen, werden python ./mace/scripts/preprocess_data.py --help
ausgeführt. Das Skript erstellt eine Reihe von HDF5 -Dateien im Ordner processed_data
, der zum Training verwendet werden kann. Es gibt einen Ordner für das Training, einen für die Validierung und einen separaten für jeden config_type
im Testsatz. Um das Modell zu trainieren, verwenden Sie das Skript run_train.py
wie folgt:
python ./mace/scripts/run_train.py
--name= " MACE_on_big_data "
--num_workers=16
--train_file= " ./processed_data/train.h5 "
--valid_file= " ./processed_data/valid.h5 "
--test_dir= " ./processed_data "
--statistics_file= " ./processed_data/statistics.json "
--model= " ScaleShiftMACE "
--num_interactions=2
--num_channels=128
--max_L=1
--correlation=3
--batch_size=32
--valid_batch_size=32
--max_num_epochs=100
--swa
--start_swa=60
--ema
--ema_decay=0.99
--amsgrad
--error_table= ' PerAtomMAE '
--device=cuda
--seed=123
Wenn Sie Mace mit Gewichten und Verzerrungen verwenden möchten, um Ihre Experimente einfach mit zu protokollieren
pip install ./mace[wandb]
Und geben Sie die erforderlichen Keyword -Argumente an ( --wandb
, --wandb_project
, --wandb_entity
, --wandb_name
, --wandb_log_hypers
)
Wir haben mit dem Materials Project (MP) zusammengearbeitet, um ein universelles Keulenpotential zu schulen, das 89 Elemente auf 1,6 m -Schüttgutkristallen im MPTRJ -Datensatz abdeckt, das aus MP -Relaxations -Trajektorien ausgewählt wurde. Die Modelle sind auf Github unter https://github.com/acesuit/mace-mp ausgeliefert. Wenn Sie sie verwenden, zitieren Sie bitte unser Papier, das auch eine große Auswahl an Beispielanwendungen und Benchmarks enthält.
Vorsicht
Die MACE-MP-Modelle werden auf MPTRJ-RAW-DFT-Energien aus VASP-Ausgängen trainiert und sind nicht direkt mit den DFT-Energien des MP oder den Energien von CHGNET vergleichbar, bei denen MP2020-Kompatibilitätskorrekturen für einige Übergangsmetalloxide, Fluoride (GGA/GGA+U-Mischungsmischen Korrekturen) und 14 Anionenarten (Anionenkorrekturen). Weitere Informationen finden Sie in der MP -Dokumentation und der MP2020 -Kompatibilität.
from mace . calculators import mace_mp
from ase import build
atoms = build . molecule ( 'H2O' )
calc = mace_mp ( model = "medium" , dispersion = False , default_dtype = "float32" , device = 'cuda' )
atoms . calc = calc
print ( atoms . get_potential_energy ())
Es gibt eine Serie (kleine, mittel, große) organische Kraftfelder. Diese können zur Simulation organischer Moleküle, Kristalle und molekularer Flüssigkeiten oder als Ausgangspunkt für die Feinabstimmung auf einem neuen Datensatz verwendet werden. Die Modelle werden unter der ASL -Lizenz veröffentlicht. Die Modelle sind auf Github unter https://github.com/acesuit/Mace-off. Wenn Sie sie verwenden, zitieren Sie bitte unser Papier, das auch detaillierte Benchmarks und Beispielanwendungen enthält.
from mace . calculators import mace_off
from ase import build
atoms = build . molecule ( 'H2O' )
calc = mace_off ( model = "medium" , device = 'cuda' )
atoms . calc = calc
print ( atoms . get_potential_energy ())
Um eines des MACE-MP-0-Foundation-Modells zu beenden, können Sie das Skript mace_run_train
mit dem zusätzlichen Argument verwenden --foundation_model=model_type
. Zum Beispiel können Sie verwenden, um das kleine Modell auf einem neuen Datensatz zu beenden:
mace_run_train
--name= " MACE "
--foundation_model= " small "
--train_file= " train.xyz "
--valid_fraction=0.05
--test_file= " test.xyz "
--energy_weight=1.0
--forces_weight=1.0
--E0s= " average "
--lr=0.01
--scaling= " rms_forces_scaling "
--batch_size=2
--max_num_epochs=6
--ema
--ema_decay=0.99
--amsgrad
--default_dtype= " float32 "
--device=cuda
--seed=3
Andere Optionen sind "mittel" und "groß" oder der Weg zu einem Fundamentmodell. Wenn Sie ein anderes Modell abschließen möchten, wird das Modell aus dem bereitgestellten Pfad geladen --foundation_model=$path_model
, aber Sie müssen den vollständigen Satz von Hyperparametern (versteckte IRREPs, R_MAX usw.) angeben, die dem Modell entsprechen.
In diesem Projekt wird vorkommentiert, um Code-Formatierung und -Lination im Commit auszuführen. Wir verwenden auch black
, isort
, pylint
und mypy
. Wir empfehlen, Ihre Entwicklungsumgebung einzurichten, indem wir die dev
in Ihrer Python -Umgebung installieren:
pip install -e " .[dev] "
pre-commit install
In der zweiten Zeile wird pre-commit
in der Verbreitung automatisch ausgeführt. Wir haben CI eingerichtet, um dies zu überprüfen, aber wir empfehlen Ihnen, diese Befehle auszuführen, bevor Sie sich verpflichten (und drängen), um versehentlich einen schlechten Code zu begehen.
Gerne akzeptieren wir Pull -Anfragen im Rahmen einer MIT -Lizenz. Bitte kopieren Sie den Lizenztext als Kommentar in Ihre Pull -Anfrage.
Wenn Sie diesen Code verwenden, zitieren Sie bitte unsere Papiere:
@inproceedings { Batatia2022mace ,
title = { {MACE}: Higher Order Equivariant Message Passing Neural Networks for Fast and Accurate Force Fields } ,
author = { Ilyes Batatia and David Peter Kovacs and Gregor N. C. Simm and Christoph Ortner and Gabor Csanyi } ,
booktitle = { Advances in Neural Information Processing Systems } ,
editor = { Alice H. Oh and Alekh Agarwal and Danielle Belgrave and Kyunghyun Cho } ,
year = { 2022 } ,
url = { https://openreview.net/forum?id=YPpSngE-ZU }
}
@misc { Batatia2022Design ,
title = { The Design Space of E(3)-Equivariant Atom-Centered Interatomic Potentials } ,
author = { Batatia, Ilyes and Batzner, Simon and Kov{'a}cs, D{'a}vid P{'e}ter and Musaelian, Albert and Simm, Gregor N. C. and Drautz, Ralf and Ortner, Christoph and Kozinsky, Boris and Cs{'a}nyi, G{'a}bor } ,
year = { 2022 } ,
number = { arXiv:2205.06643 } ,
eprint = { 2205.06643 } ,
eprinttype = { arxiv } ,
doi = { 10.48550/arXiv.2205.06643 } ,
archiveprefix = { arXiv }
}
Wenn Sie Fragen haben, kontaktieren Sie uns bitte unter [email protected].
Verwenden Sie für Fehler oder Feature -Anfragen GitHub -Probleme.
Mace wird unter der MIT -Lizenz veröffentlicht und verteilt.