يرجى الاطلاع على موقعنا على الانترنت لمزيد من المعلومات حول هذا العمل.
يحتوي هذا المستودع على رمز الورقة البحثية "من الجزيئات إلى المواد: نماذج كبيرة قابلة للتعميم قبل التدريب للتنبؤ بالخصائص الذرية".
تم إهمال هذا المستودع ولم تعد تتم صيانته بشكل نشط. نحن نعمل حاليًا على دمج وظائف هذا المستودع في مستودع Open Catalyst Project الرسمي. إذا كانت لديك أية أسئلة أو استفسارات فيما يتعلق بهذا المستودع، فلا تتردد في إنشاء مشكلة على github أو التواصل معنا عبر البريد الإلكتروني. يرجى إرسال بريد إلكتروني إلى Nima Shoghi وCC Brandon Wood.
في هذا العمل، نقدم تدريبًا مسبقًا مشتركًا متعدد المجالات (JMP)، وهو عبارة عن استراتيجية تدريب مسبق خاضعة للإشراف والتي تتدرب في الوقت نفسه على مجموعات بيانات متعددة من مجالات كيميائية مختلفة، وتتعامل مع كل مجموعة بيانات كمهمة تدريب مسبق فريدة ضمن إطار عمل متعدد المهام. . تتكون مجموعة بيانات التدريب المجمعة لدينا من حوالي 120 مليون نظام من OC20 وOC22 وANI-1x وTransition-1x.
المساهمات الرئيسية لهذا العمل هي:
نعرض قدرة تعميم JMP القوية من خلال تقييم أداء الضبط الدقيق عبر مجموعة متنوعة من المعايير التي تشمل الجزيئات الصغيرة والجزيئات الكبيرة والمواد. يتفوق برنامج JMP باستمرار على التدريب من الصفر ويضع أو يطابق أحدث ما توصلت إليه التكنولوجيا في 34 من أصل 40 معيارًا للضبط الدقيق.
نوضح أن برنامج JMP يمكّن من التوسع الفعال في النماذج الأكبر حجمًا والتي عادةً ما تكون أكثر من اللازم إذا تم تدريبها من الصفر على مجموعات بيانات صغيرة. يعمل التدريب المسبق كمنظم قوي، مما يسمح لنا بتدريب نموذج يحتوي على 235 مليون معلمة تحدد أداءً جديدًا متطورًا على معايير متعددة منخفضة البيانات.
نقوم بإجراء تحليل مفصل للمتطلبات الحسابية لـ JMP. على الرغم من أنها مكلفة مقدمًا، إلا أننا نوضح أنه يتم استرداد تكلفة التدريب المسبق لـ JMP من خلال تمكين الضبط الدقيق بشكل أسرع بما يزيد عن 12 مرة مقارنة بالتدريب من الصفر.
من خلال التدريب المسبق للنماذج الكبيرة على البيانات الكيميائية المتنوعة، نعتقد أن برنامج الرصد المشترك يمثل خطوة مهمة نحو تحقيق هدف إمكانية التعلم الآلي الشامل للكيمياء. إن النمو المستمر للبيانات المتاحة والقدرة الحاسوبية لن يؤدي إلا إلى تحسين قدرة JMP على تعلم التمثيلات الذرية القابلة للتحويل.
أظهر برنامج JMP تحسنًا متوسطًا بنسبة 59% مقارنة بالتدريب من الصفر، ويطابق أو يضع أحدث ما توصلت إليه التكنولوجيا في 34 مهمة من أصل 40. يسلط عملنا الضوء على إمكانات استراتيجيات ما قبل التدريب التي تستخدم بيانات متنوعة لتعزيز التنبؤ بالملكية عبر المجالات الكيميائية، وخاصة بالنسبة للمهام منخفضة البيانات.
أولاً، قم باستنساخ المستودع وانتقل إلى الدليل الجذر:
git clone https://github.com/facebookresearch/JMP.git
cd JMP
بعد ذلك، قم بإعداد بيئة conda، كما هو منصوص عليه في ملف environment.yml
. للقيام بذلك، قم بتشغيل الأمر التالي (ملاحظة: استبدل conda
بـ mamba
إذا كان مثبتًا لديك):
conda env create -f environment.yml -n jmp
إذا فشل الأمر أعلاه، فيمكنك إنشاء البيئة يدويًا بنفسك:
# Create the environment
conda create -n jmp python=3.11
conda activate jmp
# Install PyTorch
conda install -y -c pytorch -c nvidia pytorch torchvision torchaudio pytorch-cuda=12.1
# Install PyG, PyTorch Scatter, PyTorch Sparse.
conda install -c pyg pyg pytorch-sparse pytorch-cluster
# Install other conda dependencies
conda install -y
-c conda-forge
numpy matplotlib seaborn sympy pandas numba scikit-learn plotly nbformat ipykernel ipywidgets tqdm pyyaml networkx
pytorch-lightning torchmetrics lightning
einops wandb
cloudpickle
" pydantic>2 "
frozendict wrapt varname typing-extensions lovely-tensors lovely-numpy requests pytest nbval
# Install pip dependencies
pip install lmdb
# Install dependencies for materials datasets
pip install ase
# Install dependencies for large molecule datasets
conda install h5py
# Install MatBench dependencies
pip install matbench
# Install dependencies for PDBBind
pip install biopython rdkit
# Install dependencies for pre-processing ANI1x/Transition1x
pip install multiprocess
ثم قم بتنشيط البيئة:
conda activate jmp
وأخيراً، قم بتثبيت الحزمة الحالية كما يلي:
pip install -e .
الرمز جاهز الآن للاستخدام. راجع ملفات التكوين في دليل configs
للحصول على أمثلة حول كيفية تشغيل التعليمات البرمجية.
لا يتم تضمين البيانات المستخدمة للتدريب المسبق والضبط الدقيق في هذا المستودع بسبب قيود الحجم. ومع ذلك، يتم توفير تعليمات التنزيل والمعالجة المسبقة لمجموعات البيانات OC20، وOC22، وANI-1x، وTransition-1x، وQM9، وrMD17، وMatBench، وQMOF، وSPICE، وMD22 أدناه.
لتنزيل مجموعة بيانات ANI-1x وتحويلها إلى تنسيق يمكن استخدامه بواسطة قاعدة البيانات الخاصة بنا، يرجى اتباع الخطوات التالية:
mkdir -p /path/to/datasets/ani1x
cd /path/to/datasets/ani1x
.h5
) من المصدر الرسمي: wget https://springernature.figshare.com/ndownloader/files/18112775 -O ani1x-release.h5
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_splits --input_file ani1x-release.h5 --train_keys_output train_keys.pkl --val_keys_output val_keys.pkl --test_keys_output test_keys.pkl
.traj
(اضبط --num_workers
على عدد مراكز وحدة المعالجة المركزية المتوفرة لديك): mkdir -p traj
mkdir -p traj/train traj/val traj/test
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_write_traj --ani1x_h5 ani1x-release.h5 --split_keys train_keys.pkl --split train --traj_dir traj/train --num_workers 32
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_write_traj --ani1x_h5 ani1x-release.h5 --split_keys val_keys.pkl --split val --traj_dir traj/val --num_workers 32
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_write_traj --ani1x_h5 ani1x-release.h5 --split_keys test_keys.pkl --split test --traj_dir traj/test --num_workers 32
.traj
إلى ملفات .lmdb
: mkdir -p lmdb
mkdir -p lmdb/train lmdb/val lmdb/test
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_write_lmdbs --data_path traj/train --out_path lmdb/train --split train --num_workers 32
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_write_lmdbs --data_path traj/val --out_path lmdb/val --split val --num_workers 32
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_write_lmdbs --data_path traj/test --out_path lmdb/test --split test --num_workers 32
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_linear_ref linref --src lmdb/train --out_path linref.npz
python -m jmp.datasets.scripts.ani1x_preprocess.ani1x_linear_ref compute_mean_std --src lmdb/train --linref_path linref.npz --out_path mean_std.pkl
لتنزيل مجموعة بيانات Transition-1x وتحويلها إلى تنسيق يمكن استخدامه بواسطة قاعدة التعليمات البرمجية الخاصة بنا، يرجى اتباع الخطوات التالية:
mkdir -p /path/to/datasets/transition1x
cd /path/to/datasets/transition1x
.h5
) من المصدر الرسمي: wget https://figshare.com/ndownloader/files/36035789 -O transition1x-release.h5
.traj
(اضبط --num_workers
على عدد مراكز وحدة المعالجة المركزية المتوفرة لديك): mkdir -p traj
mkdir -p traj/train traj/val traj/test
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_write_traj --transition1x_h5 transition1x-release.h5 --split train --traj_dir traj/train --num_workers 32
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_write_traj --transition1x_h5 transition1x-release.h5 --split val --traj_dir traj/val --num_workers 32
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_write_traj --transition1x_h5 transition1x-release.h5 --split test --traj_dir traj/test --num_workers 32
.traj
إلى ملفات .lmdb
: mkdir -p lmdb
mkdir -p lmdb/train lmdb/val lmdb/test
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_write_lmdbs --data_path traj/train --out_path lmdb/train --split train --num_workers 32
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_write_lmdbs --data_path traj/val --out_path lmdb/val --split val --num_workers 32
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_write_lmdbs --data_path traj/test --out_path lmdb/test --split test --num_workers 32
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_linear_ref linref --src lmdb/train --out_path linref.npz
python -m jmp.datasets.scripts.transition1x_preprocess.trans1x_linear_ref compute_mean_std --src lmdb/train --linref_path linref.npz --out_path mean_std.pkl
python -m jmp.datasets.finetune.rmd17 download --destination /path/to/datasets/rmd17/
python -m jmp.datasets.finetune.qm9 download --destination /path/to/datasets/qm9/
python -m jmp.datasets.finetune.md22 download --destination /path/to/datasets/md22/
python -m jmp.datasets.finetune.spice download --destination /path/to/datasets/spice/
python -m jmp.datasets.finetune.mat_bench download --destination /path/to/datasets/matbench/
python -m jmp.datasets.finetune.qmof download --destination /path/to/datasets/qmof/
نقاط التفتيش المدربة مسبقًا متاحة للتنزيل من الروابط التالية:
تم تصميم قاعدة التعليمات البرمجية الخاصة بنا لتكون مستندة إلى لغة Python. لتدريب نموذج، يمكنك إنشاء ملف تكوين يحدد النموذج ومجموعة البيانات ومعلمات التدريب. يتم فحص كائنات التكوين هذه بالكامل والتحقق من صحتها باستخدام Pydantic.
بمجرد إنشاء كائن التكوين، يمكنك استخدام فئة jmp.lightning.Runner
لالتفاف حلقة التدريب. راجع configs/jmp_l_finetune.ipynb
للحصول على مثال حول كيفية ضبط النموذج.
غالبية JMP حاصلة على ترخيص CC-BY-NC، كما هو موجود في ملف LICENSE
. ومع ذلك، تتوفر أجزاء من المشروع بموجب شروط ترخيص منفصلة:
إذا كنت تستخدم هذا الرمز في بحثك، يرجى الاستشهاد بالمقالة التالية:
@article{shoghi2023molecules,
title={From molecules to materials: Pre-training large generalizable models for atomic property prediction},
author={Shoghi, Nima and Kolluru, Adeesh and Kitchin, John R and Ulissi, Zachary W and Zitnick, C Lawrence and Wood, Brandon M},
journal={arXiv preprint arXiv:2310.16802},
year={2023}
}