MACE는 고차에 동등한 메시지 전달을 통해 빠르고 정확한 머신 러닝 간 잠재력을 제공합니다.
이 저장소에는 Ilyes Batatia, Gregor Simm, David Kovacs 및 Gabor Csanyi 그룹 및 친구 (기고자 참조)가 개발 한 MACE 참조 구현이 포함되어 있습니다.
또한 사용 가능 :
부분 문서는 https://mace-docs.readthedocs.io에서 제공됩니다
Pytorch를 설치하십시오. 설치 지침은 공식 Pytorch 설치를 참조하십시오. 시스템에 적합한 옵션을 선택하십시오.
이것은 MACE를 설치하는 권장 방법입니다.
pip install --upgrade pip
pip install mace-torch
참고 : PYPI의 동종 패키지는이 패키지와 관련이 없습니다.
git clone https://github.com/ACEsuit/mace.git
pip install ./mace
MACE 모델을 훈련시키기 위해 mace_run_train
스크립트를 사용할 수 있습니다.이 스크립트는 Pip를 배치하는 일반적인 장소에 있어야합니다 (또는 python3 <path_to_cloned_dir>/mace/cli/run_train.py
명시 적으로 실행할 수 있습니다).
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
특정 유효성 검사 세트를 제공하려면 인수 --valid_file
사용하십시오. 유효성 검사 세트를 평가하기 위해 더 큰 배치 크기를 설정하려면 --valid_batch_size
지정하십시오.
모델의 크기를 제어하려면 --hidden_irreps
변경해야합니다. 대부분의 응용 프로그램의 경우 권장되는 기본 모델 크기는 --hidden_irreps='256x0e'
(256 개의 불변 메시지 의미) 또는 --hidden_irreps='128x0e + 128x1o'
입니다. 모델이 충분히 정확하지 않은 경우, 128x0e + 128x1o + 128x2e
를 포함하거나 256
으로 채널 수를 늘릴 수 있습니다. --num_channels=128
및 --max_L=1
키를 사용하여 모델을 지정할 수도 있습니다.
위의 예와 같이 명령 줄을 통해 에너지를 읽지 않고 분리 된 원자를 훈련 세트에 추가하는 것이 일반적으로 선호됩니다. 훈련 세트에 레이블을 붙이려면 정보 필드에서 config_type=IsolatedAtom
설정하십시오. 분리 된 원자의 에너지를 사용하지 않거나 모르는 경우 최소 제곱 회귀를 사용하여 원자 에너지를 추정하는 옵션 --E0s="average"
사용할 수 있습니다.
키워드 --swa
활성화되면 훈련 에포크의 마지막 ~ 20% ( --start_swa
epoch)의 손실의 에너지 가중치가 증가합니다. 이 설정은 일반적으로 에너지 오류를 낮추는 데 도움이됩니다.
키워드 --default_dtype
를 사용하여 정밀도를 변경할 수 있고, 기본값은 float64
이지만 float32
상당한 속도를 제공합니다 (일반적으로 훈련에서 x2의 계수).
키워드 --batch_size
및 --max_num_epochs
는 교육 세트의 크기에 따라 조정해야합니다. 훈련 데이터 수가 증가하면 배치 크기가 증가하고 에포크 수를 줄여야합니다. 초기 설정의 휴리스틱은 200 000까지의 그라디언트 업데이트 수를 고려하는 것입니다.
이 코드는 응력과 분리 된 분자가있는 벌크 구조를 포함하는 이기종 라벨로 세트를 처리 할 수 있습니다. 이 예에서는 코드가 분자에 대한 응력을 무시하게 만들려면 분자 구성에 추가하여 config_stress_weight = 0.0
추가하십시오.
Apple Silicon GPU 가속도를 사용하려면 최신 Pytorch 버전을 설치하고 --device=mps
지정하십시오.
멀티 GPU 교육을 위해서는 --distributed
플래그를 사용하십시오. 이것은 Pytorch의 DistributedDataparAllel 모듈을 사용하여 여러 GPU에서 모델을 훈련시킵니다. 대형 데이터 세트의 온라인 데이터로드와 결합하십시오 (아래 참조). 예제 Slurm 스크립트는 mace/scripts/distributed_example.sbatch
에서 찾을 수 있습니다.
YAML을 사용하여 전부 또는 일부 인수를 구문 분석하는 옵션을 사용할 수 있습니다. 예를 들어, 위의 인수를 사용하여 모델을 교육하려면 다음 내용으로 your_configs.yaml
파일을 만들 수 있습니다.
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
명령 줄 --config="your_configs.yaml"
에 추가하십시오. 명령 줄에 지정된 모든 인수는 YAML 파일에있는 인수를 덮어 씁니다.
XYZ 파일에서 MACE 모델을 평가하려면 mace_eval_configs
실행하십시오.
mace_eval_configs
--configs= " your_configs.xyz "
--model= " your_model.model "
--output= " ./your_output.xyz "
Colab 튜토리얼을 실행하여 Mace를 신속하게 시작할 수 있습니다.
또한 다음에 대한 자세한 Colab 튜토리얼도 있습니다.
GPU 메모리에 맞지 않는 대규모 데이터 세트가있는 경우 CPU의 데이터를 전처리하고 모델 교육을 위해 온라인 데이터 로딩을 사용하는 것이 좋습니다. xyz 파일로 지정된 데이터 세트를 전처리하려면 preprocess_data.py
스크립트를 실행하십시오. 예는 다음과 같습니다.
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
모든 옵션과 그에 대한 약간의 설명을 보려면 python ./mace/scripts/preprocess_data.py --help
실행하십시오. 스크립트는 processed_data
폴더에 교육에 사용할 수있는 여러 HDF5 파일을 만듭니다. 훈련을위한 하나의 폴더가 있으며, 하나는 검증을위한 폴더가 있고 테스트 세트의 각 config_type
에 대해 별도의 폴더가 있습니다. 모델을 교육하려면 다음과 같이 run_train.py
스크립트를 사용하십시오.
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
무게와 바이어스가있는 메이스를 사용하여 실험을 기록하는 경우
pip install ./mace[wandb]
필요한 키워드 인수 ( --wandb
, --wandb_project
, --wandb_entity
, --wandb_name
, --wandb_log_hypers
)를 지정하십시오.
우리는 MP (MPTRJ 데이터 세트에서 1.6m 벌크 결정에 89 개의 요소를 덮는 범용 MACE 잠재력을 훈련하기 위해 MP)와 협력하여 MP 이완 궤적에서 선택한 MPTRJ 데이터 세트에서 협력했습니다. 이 모델은 https://github.com/acesuit/mace-mp에서 github에 새로 연결됩니다. 사용하는 경우 다양한 예제 응용 프로그램 및 벤치 마크가 포함 된 논문을 인용하십시오.
주의
MACE-MP 모델은 VASP 출력으로부터 MPTRJ RAW DFT 에너지에 대한 교육을 받았으며 일부 전이 금속 산화물 (GGA/GGA+U 혼합에 대해 MP2020 Compatibility 보정에 적용된 MP의 DFT 에너지 또는 CHGNET 에너지와 직접 비교할 수 없습니다. 보정) 및 14 개의 음이온 종 (음이온 보정). 자세한 내용은 MP 문서 및 MP2020Compatibility.yaml을 참조하십시오.
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 ())
시리즈 (소규모, 중간, 대형) 양도 가능한 유기농 필드가 있습니다. 이들은 유기 분자, 결정 및 분자 액체의 시뮬레이션 또는 새로운 데이터 세트에서 미세 조정을위한 출발점으로 사용될 수 있습니다. 모델은 ASL 라이센스에 따라 해제됩니다. 이 모델은 https://github.com/acesuit/mace-fort에서 Github에 구제됩니다. 사용하는 경우 자세한 벤치 마크 및 예제 응용 프로그램도 포함 된 논문을 인용하십시오.
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 ())
MACE-MP-0 Foundation 모델 중 하나를 확인하려면 추가 인수 --foundation_model=model_type
와 함께 mace_run_train
스크립트를 사용할 수 있습니다. 예를 들어 새 데이터 세트의 작은 모델을 미세화하려면 다음을 사용할 수 있습니다.
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
다른 옵션은 "중간"및 "큰"또는 기초 모델로가는 경로입니다. 다른 모델을 미세하게하려면 모델이 제공된 경로에서로드된다 --foundation_model=$path_model
이지만 모델과 일치하는 전체 하이퍼 파라미터 (숨겨진 irreps, r_max 등)를 제공해야합니다.
이 프로젝트는 사전 커밋을 사용하여 Commit에서 코드 서식 및 Linting을 실행합니다. 우리는 또한 black
, isort
, pylint
및 mypy
사용합니다. Python 환경에 dev
패키지를 설치하여 개발 환경을 설정하는 것이 좋습니다.
pip install -e " .[dev] "
pre-commit install
두 번째 줄은 pre-commit
초기화하여 Commit에서 코드 검사를 자동 실행합니다. 우리는 이것을 확인하기 위해 CI를 설정했지만 실수로 잘못된 코드를 커밋하지 않기 위해 커밋 (및 추진)하기 전에 해당 명령을 실행하는 것이 좋습니다 .
MIT 라이센스에 따라 풀 요청을 수락하게되어 기쁩니다. 라이센스 텍스트를 풀 요청에 주석으로 복사/붙여 넣으십시오.
이 코드를 사용하는 경우 논문을 인용하십시오.
@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 }
}
궁금한 점이 있으시면 [email protected]로 문의하십시오.
버그 또는 기능 요청의 경우 GitHub 문제를 사용하십시오.
MACE는 MIT 라이센스에 따라 게시 및 배포됩니다.