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
หมายเหตุ: แพ็คเกจ homonymous บน 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
epochs) การตั้งค่านี้มักจะช่วยลดข้อผิดพลาดด้านพลังงาน
ความแม่นยำสามารถเปลี่ยนแปลงได้โดยใช้คำหลัก --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
สิ่งนี้จะใช้โมดูล DistributedDataparallel ของ Pytorch เพื่อฝึกอบรมโมเดลใน GPU หลายตัว รวมกับการโหลดข้อมูลออนไลน์สำหรับชุดข้อมูลขนาดใหญ่ (ดูด้านล่าง) ตัวอย่างสคริปต์ 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 ของเราเพื่อเริ่มต้นด้วยคทาได้อย่างรวดเร็ว
นอกจากนี้เรายังมีแบบฝึกหัด colab โดยละเอียดเพิ่มเติมเกี่ยวกับ:
หากคุณมีชุดข้อมูลขนาดใหญ่ที่อาจไม่เหมาะสมกับหน่วยความจำ GPU ขอแนะนำให้ประมวลผลข้อมูลเกี่ยวกับ CPU ล่วงหน้าและใช้ 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 ได้รับการฝึกฝนเกี่ยวกับพลังงาน DFT ดิบ MPTRJ จากเอาท์พุท VASP และไม่สามารถเทียบได้โดยตรงกับพลังงาน DFT ของ MP หรือพลังงานของ Chgnet ซึ่งได้ใช้การแก้ไข MP2020Compatible การแก้ไข) และ 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-off หากคุณใช้พวกเขาโปรดอ้างอิงกระดาษของเราซึ่งมีเกณฑ์มาตรฐานและแอปพลิเคชันตัวอย่างโดยละเอียด
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
ตัวอย่างเช่นเพื่อ finetune รุ่นเล็ก ๆ ในชุดข้อมูลใหม่คุณสามารถใช้:
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
ตัวเลือกอื่น ๆ คือ "ปานกลาง" และ "ใหญ่" หรือเส้นทางไปยังโมเดลรากฐาน หากคุณต้องการ finetune รุ่นอื่นโมเดลจะถูกโหลดจากเส้นทางที่ให้ไว้ --foundation_model=$path_model
แต่คุณจะต้องจัดเตรียมชุดพารามิเตอร์แบบเต็มรูปแบบ (Hidden irreps, r_max ฯลฯ )
โครงการนี้ใช้ pre-commit เพื่อดำเนินการจัดรูปแบบรหัสและผ้าสำลีในการกระทำ นอกจากนี้เรายังใช้ black
, isort
, pylint
และ mypy
เราขอแนะนำให้ตั้งค่าสภาพแวดล้อมการพัฒนาของคุณโดยการติดตั้งแพ็คเกจ dev
ลงในสภาพแวดล้อม Python ของคุณ:
pip install -e " .[dev] "
pre-commit install
บรรทัดที่สองจะเริ่ม pre-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