OpenMM 8 : 機械学習ポテンシャルを利用した分子動力学シミュレーション

Pythonでインフォマティクス

このカテゴリーの記事では、「Pythonを使った機械学習やケモ・バイオインフォマティクスの実装や論文」を紹介していきたいと考えています。Python は3系(3.7~)、anacondaを中心にして環境構築していきます。以下のようなハード・ソフト環境(CentOS Linux)を用いますが、Python(anaconda)が利用できれば、異なる環境下でも類似の実装が可能かと思います。

● CPU Intel® Core™ i7-6700K CPU @ 4.00GHz × 8
● メモリ  64GB
● GPU GeForce GTX 1080/PCIe/SSE2
● OS  CentOS Stream 8
● Python 3.9


分子動力学シミュレーションと機械学習ポテンシャル

タンパク質の分子動力学シミュレーションアプリケーション OpenMM について、以下の記事などで紹介しています。

今回、新しいバージョン、OpenMM 8についてインストールを行ってみましたので、論文と併せて紹介します。
以下の論文が2024年1月に公開されています。そのタイトル通り、機械学習の分子動力学シミュレーションへの適用が主題となっています。

OpenMM 8: Molecular Dynamics Simulation with Machine Learning Potentials 
Peter Eastmanら 
J. Phys. Chem. B2024, 128, 109−116                 
https://pubs.acs.org/doi/10.1021/acs.jpcb.3c06662

分子動力学法(Molecular dynamics)は、原子・分子の物理的な「動き」をシミュレーションする手法です。従って、分子のゆらぎや構造変化を考慮した相互作用の計算・予測が可能です。また通常、分子の動きを計算するためのポテンシャル関数力場)は古典的なものが用いられます。ここでは、この完全に古典力学的なMDを古典的MDと呼びます。
・古典的MD
分子の運動をニュートンの運動方程式に基づいてシミュレーションする。
利点: 計算コストが低いため、大規模な系・長時間の計算が可能。
制限: 分子間の相互作用の詳細な特性(特に電子状態の変化)を捉えることが難しい。

これに対して、局所的に量子力学に基づく力場を利用し、量子化学計算と分子動力学計算を組み合わせた、QM/MM(Quantum Mechanics/Molecular Mechanics)法があります。例えば、酵素基質複合体のシミュレーションにおいて、酵素の活性中心残基と基質部分をQMで扱い、さらに外側のタンパク質領域は古典的MDを適用します。これにより、活性中心と基質の電子状態を扱うことができ、結合エネルギーの精度向上や遷移状態の議論等が可能となります。
・QM/MM
系の一部を量子力学的に、残りを古典力学的に シミュレーションする。
利点: QMで扱った領域の電子状態を議論できる。
制限: 計算コストが高く、系の規模や計算時間が制限される。

機械学習(特に深層学習)・AIの発展は凄まじいものがあります。深層学習の手法を ポテンシャル関数力場)へと応用する研究も盛んに展開されており、MLP(Machine Learning Potentials)やNNP (Neural Network Potentials)と呼称されます。自然な流れとして、系の一部を機械学習に基づくNNPによってモデル化し、残りを古典的MDで扱う、NNP/MM (Neural Network Potentials/Molecular Mechanics) や MLP/MM (Machine Learning Potentials/Molecular Mechanics) と呼ばれる手法も進展しつつあります。この手法は、古典的MDとQM/MMの短所を補うことが期待されています。

・MLP/MM(NNP/MM)
系の一部を機械学習に基づくNNPによってモデル化し、残りを古典的MDで扱う。NNPは量子化学計算結果を学習して得られる。
利点: QMの精度を保ちつつ、計算速度が大幅に向上。*現状、古典的MDと比べて高速ということはないが、将来的にさらに早くなるかも、QM/MMと比較するとだいぶ速いという理解。QM/MMに匹敵する精度でシミュレーションを行うことができ、計算コストは低い!!

同じ著者らによるNNP/MM(MLP/MM)に関する論文               
NNP/MM: Accelerating Molecular Dynamics Simulations with Machine Learning Potentials and Molecular Mechanics
Raimondas Galvelisら
J. Chem. Inf. Model. 2023, 63, 5701−5708
https://pubs.acs.org/doi/10.1021/acs.jcim.3c00773

ということで、OpenMM 8では、MLPの利用とMLP/MMによるシミュレーションに関する新機能が導入されているとのことです。任意のPyTorchモデルをシミュレーションに組み込み、計算に使用することができます。また、事前学習済みMLPとして、ANI-1ccxもしくはANI-2xを利用可能です。それぞれ、以下の論文で報告されています。

Smith JS, Nebgen BT, Zubatyuk R, Lubbers N, Devereux C, Barros K, Tretiak S, Isayev O, Roitberg AE. Approaching coupled cluster accuracy with a general-purpose neural network potential through transfer learning. Nat Commun. 2019 Jul 1;10(1):2903.

Devereux C, Smith JS, Huddleston KK, Barros K, Zubatyuk R, Isayev O, Roitberg AE. Extending the Applicability of the ANI Deep Learning Molecular Potential to Sulfur and Halogens. J Chem Theory Comput. 2020 Jul 14;16(7):4192-4202.

この他にも、新しい機能が実装されているようですが、まずはOpenMM 8をインストールしてみましょう。


OpenMM 8 のインストール

インストールは、Anacondaを使って簡単に行うことができます。まずは、以下の様に仮想環境を用意します。

$ conda create -n openmm8 python=3.9       #python 3.9 の仮想環境openmm8 を作成
$ conda activate openmm8                   #仮想環境openmm8 をアクティブに

この環境下に conda でインストールします。以下のコマンドを実行するだけです。

$ conda install conda-forge::openmm     #2024年1月現在、openmm 8.1.1がインストールされます。

これでインストール完了です。OpenMM 8.1.1 がインストールされました。また、当方のPC環境では、同時に CUDA Toolkit 11.8 がインストールされました。

下記のコマンドを実行することで、インストールが出来ているか確認できます。

$ python -m openmm.testInstallation
OpenMM Version: 8.1.1
Git Revision: ec797acabe5de4ce9f56c92d349baa889f4b0821

There are 4 Platforms available:

1 Reference - Successfully computed forces
2 CPU - Successfully computed forces
3 CUDA - Successfully computed forces
1 warning generated.
1 warning generated.
4 OpenCL - Successfully computed forces

Median difference in forces between platforms:

Reference vs. CPU: 6.28479e-06
Reference vs. CUDA: 6.73113e-06
CPU vs. CUDA: 7.29757e-07
Reference vs. OpenCL: 6.73494e-06
CPU vs. OpenCL: 7.45981e-07
CUDA vs. OpenCL: 1.7307e-07

All differences are within tolerance.

上のような出力が得られ、インストールが完了しました。CUDAも機能しているようですので、GPUを用いた計算も実行することができるようになっています。

インストールと同時に作成される、simulatePdb.py ファイルとinput.pdb ファイルを使った例題を試してみます。必要なファイルは、anaconda3/envs/openmm8/share/openmm/examples/ に作成されています。以下のようなコマンドでコピーし、計算を実行します。xxxxにはホームディレクトリ名を入れてください。

$ mkdir openmm_run                         #openmm_runディレクトリを作成
$ cd openmm_run                            #openmm_runディレクトリに移動
$ cp /home/xxxx/anaconda3/envs/openmm8/share/openmm/examples/simulatePdb.py ./   
$ cp /home/xxxx/anaconda3/envs/openmm8/share/openmm/examples/input.pdb ./        
$ python simulatePdb.py     #コピーしたファイルを指定して、計算を実行
#"Step","Potential Energy (kJ/mole)","Temperature (K)"
1000,-143073.7948191875,293.25673425453493
2000,-140719.38124496874,298.99137616933626
3000,-140684.50331528124,303.64600231191065
4000,-140490.1190379375,294.16412503909305
5000,-140777.4295848125,301.95231972143756
6000,-140635.92519028124,305.79387138949596
7000,-140285.53944809374,300.70539000277506
8000,-140463.25038559374,292.18110981381625
9000,-140687.29237778124,297.97927826921966
10000,-140990.512592625,304.3617050371108

上記のような計算結果が段階的に出力されました。これで、10,000 ステップの計算が完了しています。また、openmm_run ディレクトリに output.pdb ファイルが作成されました。

OpenMMのインストールと例題実行の手順については、上の記事でも紹介しています。

OpenMM 8.1.1のインストールを行ってみました。今後、ANI-2xなどの機械学習ポテンシャルを用いてシミュレーションを実行してみたいと思います。

コメント

タイトルとURLをコピーしました