請訪問我們的網站以獲取有關這項工作的更多資訊。
該存儲庫包含論文“從分子到材料:預訓練原子屬性預測的大型通用模型”的程式碼。
該存儲庫已棄用,不再積極維護。我們目前正在努力將該儲存庫的功能整合到官方 Open Catalyst 專案儲存庫中。如果您對此儲存庫有任何疑問或疑慮,請隨時建立 github 問題或透過電子郵件與我們聯絡。請發送電子郵件給 Nima Shoghi 和 CC Brandon Wood。
在這項工作中,我們引入了聯合多域預訓練(JMP),這是一種有監督的預訓練策略,可同時對來自不同化學領域的多個資料集進行訓練,將每個資料集視為多任務框架內的唯一預訓練任務。我們的組合訓練資料集由來自 OC20、OC22、ANI-1x 和 Transition-1x 的約 1.2 億系統組成。
這項工作的主要貢獻是:
我們透過評估 JMP 在涵蓋小分子、大分子和材料的各種基準套件中的微調性能,展示了 JMP 強大的泛化能力。 JMP 始終優於從頭開始的訓練,並在 40 個微調基準中的 34 個上設定或匹配最先進的水平。
我們證明,JMP 可以有效地擴展到更大的模型,如果在小型資料集上從頭開始訓練,這些模型通常會過度擬合。預訓練充當強大的正則化器,使我們能夠訓練具有 2.35 億個參數的模型,該模型在多個低資料基準上設定了新的最先進的性能。
我們對 JMP 的計算要求進行了詳細分析。雖然前期成本高昂,但我們發現,與從頭開始的訓練相比,JMP 的微調速度快了 12 倍,因此可以收回預訓練成本。
透過根據不同的化學數據對大型模型進行預訓練,我們相信 JMP 代表了朝著化學通用機器學習潛力目標邁出的重要一步。可用數據和計算能力的持續增長只會提高 JMP 學習可轉移原子表示的能力。
JMP 與從頭開始的訓練相比,平均提高了 59%,並且在 40 項任務中的 34 項上達到或達到了最先進水平。我們的工作強調了預訓練策略的潛力,這些策略利用不同的數據來推進跨化學領域的特性預測,特別是對於低數據任務。
首先,克隆儲存庫並導航到根目錄:
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
設定為可用的 CPU 核心數): 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
設定為可用的 CPU 核心數): 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}
}