يوفر MACE إمكانات تعليمية سريعة ودقيقة للآلي مع إمكانات بين المراسلة ذات الترتيب العالي.
يحتوي هذا المستودع على تطبيق مرجع Mace الذي طورته Ilyes Batatia و Gregor Simm و David Kovacs ومجموعة Gabor Csanyi والأصدقاء (انظر المساهمين).
متاح أيضا:
تتوفر وثائق جزئية على: 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_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
). هذا الإعداد عادة ما يساعد على خفض أخطاء الطاقة.
يمكن تغيير الدقة باستخدام الكلمة الرئيسية- --default_dtype
، الافتراضي هو float64
ولكن float32
يعطي تسريع كبير (عادة ما يكون عامل x2 في التدريب).
يجب تكييف الكلمات الرئيسية --batch_size
و --max_num_epochs
بناءً على حجم مجموعة التدريب. يجب زيادة حجم الدُفعة عندما يزداد عدد بيانات التدريب ، ويجب انخفاض عدد الأحداث. إن الإرشاق للإعدادات الأولية ، هو النظر في عدد تحديث التدرج الثابت إلى 200000 ، والذي يمكن حسابه على أنه
يمكن للرمز التعامل مع مجموعة التدريب مع ملصقات غير متجانسة ، على سبيل المثال يحتوي على كلا الهياكل السائبة مع الإجهاد والجزيئات المعزولة. في هذا المثال ، لجعل الكود يتجاهل الإجهاد على الجزيئات ، قم بإلحاق تكوين جزيئاتك A config_stress_weight = 0.0
.
لاستخدام تسريع GPU Silicon Apple ، تأكد من تثبيت أحدث إصدار من Pytorch وتحديد --device=mps
.
للتدريب متعدد GPU ، استخدم العلم --distributed
. سيستخدم هذا وحدة Pytorch DistributedDataparaldally لتدريب النموذج على وحدات معالجة الرسومات المتعددة. يُمزج مع تحميل البيانات عبر الإنترنت لمجموعات البيانات الكبيرة (انظر أدناه). يمكن العثور على مثال على البرنامج النصي slurm في mace/scripts/distributed_example.sbatch
.
يتوفر خيار تحليل كل أو بعض الوسائط باستخدام YAML. على سبيل المثال ، لتدريب نموذج باستخدام الوسائط أعلاه ، يمكنك إنشاء ملف 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.
لتقييم نموذج MACE الخاص بك على ملف XYZ ، قم بتشغيل mace_eval_configs
:
mace_eval_configs
--configs= " your_configs.xyz "
--model= " your_model.model "
--output= " ./your_output.xyz "
يمكنك تشغيل البرنامج التعليمي Colab للبدء بسرعة مع Mace.
لدينا أيضًا دروس كولاب أكثر تفصيلاً حول:
إذا كان لديك مجموعة بيانات كبيرة قد لا تتناسب مع ذاكرة GPU ، فمن المستحسن معالجة البيانات المسبقة على وحدة المعالجة المركزية واستخدام Dataloading عبر الإنترنت لتدريب النموذج. للمعالجة المسبقة التي تم تحديد مجموعة البيانات الخاصة بك كملف 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
. سيقوم البرنامج النصي بإنشاء عدد من ملفات HDF5 في مجلد processed_data
الذي يمكن استخدامه للتدريب. سيكون هناك مجلد واحد للتدريب ، وواحد للتحقق من الصحة وواحد منفصل لكل 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
إذا كنت ترغب في استخدام Mace مع الأوزان والتحيزات لتسجيل تجاربك ببساطة
pip install ./mace[wandb]
وحدد وسيطات الكلمات الرئيسية اللازمة ( --wandb
، --wandb_project
، --wandb_entity
، --wandb_name
، --wandb_log_hypers
)
لقد تعاوننا مع مشروع المواد (MP) لتدريب محتمل عالمي على 89 عنصرًا على بلورات سائبة 1.6 متر في مجموعة بيانات MPTRJ المختارة من مسارات الاسترخاء MP. يتم ترشيح النماذج على github على https://github.com/acesuit/mace-mp. إذا كنت تستخدمها ، فيرجى الاستشهاد بالورقة التي تحتوي أيضًا على مجموعة كبيرة من التطبيقات والمعايير.
حذر
يتم تدريب نماذج MACE-MP على طاقات MPTRJ RAW DFT من مخرجات VASP ، ولا يمكن مقارنتها مباشرة بطاقات DFT الخاصة بـ MP أو طاقات chgnet ، التي تم تطبيقها على تصحيحات MP202020COMPATIBITION التصحيحات) ، و 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. يتم ترشيح النماذج على github على https://github.com/acesuit/mace- إذا كنت تستخدمها ، فيرجى الاستشهاد بالورقة التي تحتوي أيضًا على معايير مفصلة وتطبيقات مثال.
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 ())
إلى FINETUNE أحد نموذج الأساس MACE-MP-0 ، يمكنك استخدام البرنامج النصي mace_run_train
مع الوسيطة الإضافية- --foundation_model=model_type
. على سبيل المثال ، لتحديد النموذج الصغير على مجموعة بيانات جديدة ، يمكنك استخدام:
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 ، وما إلى ذلك) مطابقة النموذج.
يستخدم هذا المشروع اللبلاب المسبق لتنفيذ تنسيق التعليمات البرمجية والتنظيم على الالتزام. نستخدم أيضًا black
و isort
و pylint
و mypy
. نوصي بإعداد بيئة التطوير الخاصة بك عن طريق تثبيت حزم dev
في بيئة Python الخاصة بك:
pip install -e " .[dev] "
pre-commit install
سيتم تهيئة السطر الثاني pre-commit
بالتحقق من رمز التشغيل التلقائي على الالتزام. لقد قمت بإعداد CI للتحقق من ذلك ، لكننا نوصي بشدة بتشغيل هذه الأوامر قبل الالتزام (ودفع) لتجنب ارتكاب رمز سيء عن طريق الخطأ.
يسعدنا قبول طلبات السحب بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. يرجى نسخ/لصق نص الترخيص كتعليق في طلب السحب الخاص بك.
إذا كنت تستخدم هذا الرمز ، يرجى الاستشهاد بأوراقنا:
@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 وتوزيعه تحت رخصة معهد ماساتشوستس للتكنولوجيا.