【本期推薦專題】物聯網從業人員必讀:華爲雲專家爲你詳細解讀LiteOS各模塊開發及其實現原理。
python
摘要:基於MindSpore自動並行、圖算融合等特性,SPONGE可高效地完成傳統分子模擬過程,利用MindSpore自動微分的特性,能夠將神經網絡等AI方法與傳統分子模擬進行結合。
本文分享自華爲雲社區《MindSpore新一代分子模擬庫:SPONGE》,原文做者:於璠,MindSpore算法科學家git
MindSpore新一代分子模擬庫:SPONGE,由北大和深圳灣實驗室高毅勤課題組與華爲MindSpore團隊聯合開發,具備高性能、模塊化等特性,是一個徹底自主研發的分子模擬軟件庫。基於MindSpore自動並行、圖算融合等特性,SPONGE可高效地完成傳統分子模擬過程,利用MindSpore自動微分的特性,能夠將神經網絡等AI方法與傳統分子模擬進行結合。算法
分子模擬是指利用計算機以原子水平的分子模型來模擬分子結構與行爲,進而模擬分子體系的各類物理、化學性質的方法。它是在實驗基礎上,經過基本原理,構築起一套模型和算法,從而計算出合理的分子結構與分子行爲。近年來,分子模擬技術發展迅速而且在多個學科領域獲得了普遍的應用。在藥物設計領域,可用於研究病毒、藥物的做用機理等;在生物科學領域,可用於表徵蛋白質的多級結構與性質;在材料學領域,可用於研究結構與力學性能、材料的優化設計等;在化學領域,可用於研究表面催化及機理;在石油化工領域,可用於分子篩催化劑結構表徵、合成設計、吸附擴散,可構建和表徵高分子鏈以及晶態或非晶態本體聚合物的結構,預測包括共混行爲、機械性質、擴散、內聚等重要性質。segmentfault
因爲模擬的時空限制,傳統分子動力學仿真軟件的應用受到很大的限制,科研工做者須要不斷地開發新的力場、抽樣方法、結合新的技術(如AI算法)來拓展分子動力學仿真的場景。所以, SPONGE應運而生,具備徹底自主的知識產權。SPONGE使用模塊化的設計特性,支持科學家進行高效且便捷地搭建分子動力學模擬中所須要的相關計算模塊。同時, SPONGE也具備傳統模擬所須要的高效性。除此以外,SPONGE也自然地支持與人工智能算法的天然融合,而且能運用MindSPore框架自身的高性能計算特性。網絡
相比於以前在傳統分子模擬軟件上結合SITS方法進行生物分子加強抽樣,SPONGE原生支持SITS並對計算流程進行優化使得其使用SITS方法模擬生物體系更加高效。針對極化體系,傳統分子模擬採用結合量化計算等方式來解決電荷浮動等問題。即便採用機器學習下降計算量也會浪費大量時間在程序數據傳送的問題上。而SPONGE利用模塊化的特色可支持內存上直接與機器學習程序通訊大大下降了總體計算時間。
框架
圖1:結合SITS等方法對顯性溶劑中的丙氨酸二肽進行加強抽樣機器學習
下面,這裏將簡單介紹一下MindSpore上的SPONGE的一個簡單案例,該案例使用SPONGE模擬了丙氨酸三肽水溶液體系。模塊化
實踐前,確保已經正確安裝MindSpore。若是沒有,能夠經過MindSpore安裝頁面(MindSpore官網)安裝MindSpore。工具
本教程模擬體系中須要加載三個輸入文件,分別是:性能
· 屬性文件(後綴爲.in的文件),聲明模擬的基本條件,對整個模擬過程進行參數控制。
· 拓撲文件(後綴爲.param7的文件),拓撲文件描述的是體系內部分子的拓撲關係及各類參數。
· 座標文件(後綴爲.rst7的文件),座標文件描述的是每一個原子在體系中的初始時刻的座標。
拓撲文件和座標文件能夠經過建模過程由AmberTools中自帶的tleap工具建模完成,下載地址(Download Amber MD)。
經過tleap構建了所須要的拓撲文件和座標文件後,須要經過屬性文件聲明模擬的基本條件,對整個模擬過程進行參數控制。以本教程中的屬性文件爲例,其文件內容以下:
NVT 290k mode = 1, # 分子動力學(MD)模式,1 表示模擬採用 NVT 系綜 dt= 0.001, # 模擬步長 step_limit = 1, # 模擬總步數 thermostat=1, # 控溫方法,1 表示採用的是 Liujian-Langevin 方法 langevin_gamma=1.0, # 控溫器中的 Gamma_ln 參數 target_temperature=290, # 目標溫度 write_information_interval=1000, # 輸出頻率 amber_irest=0, # 輸入方式,0 表示讀入amber格式的輸入座標文件,其中不包含速度 cut=10.0, # 非鍵相互做用的距離
案例的輸入文件完成後,分別命名爲 http://NVT_290_10ns.in 、WATER_ALA.parm7和WATER_ALA_350_cool_290.rst7,這三個文件能夠存放在本地工做區的自定義路徑下。
從三個輸入文件中,讀取模擬體系所須要的參數,用於最後體系的計算,其加載代碼以下:
import argparse from mindspore import context parser = argparse.ArgumentParser(description='Sponge Controller') parser.add_argument('--i', type=str, default=None, help='input file') parser.add_argument('--amber_parm', type=str, default=None, help='paramter file in AMBER type') parser.add_argument('--c', type=str, default=None, help='initial coordinates file') parser.add_argument('--r', type=str, default="restrt", help='') parser.add_argument('--x', type=str, default="mdcrd", help='') parser.add_argument('--o', type=str, default="mdout", help="") parser.add_argument('--box', type=str, default="mdbox", help='') parser.add_argument('--device_id', type=int, default=0, help='') args_opt = parser.parse_args() context.set_context(mode=context.GRAPH_MODE, device_target="GPU", device_id=args_opt.device_id, save_graphs=False)
使用SPONGE中定義的計算力模塊和計算能量模塊,經過屢次迭代進行分子動力學過程演化,使得體系達到咱們所須要的平衡態,並記錄每個模擬步驟中獲得的能量等數據。其模擬流程構建代碼以下:
from src.simulation_initial import Simulation from mindspore import Tensor if __name__ == "__main__": simulation = Simulation(args_opt) save_path = args_opt.o for steps in range(simulation.md_info.step_limit): print_step = steps % simulation.ntwx if steps == simulation.md_info.step_limit - 1: print_step = 0 temperature, total_potential_energy, sigma_of_bond_ene, sigma_of_angle_ene, sigma_of_dihedral_ene, \ nb14_lj_energy_sum, nb14_cf_energy_sum, LJ_energy_sum, ee_ene, _ = simulation(Tensor(steps), Tensor(print_step)) # compute energy and temperature
python main.py --i /path/NVT_290_10ns.in \ --amber_parm /path/WATER_ALA.parm7 \ --c /path/WATER_ALA_350_cool_290.rst7 \ --o /path/ala_NVT_290_10ns.out
其中,--i 爲MD模擬的屬性文件,控制模擬過程,--amber_parm 爲MD模擬體系的拓撲文件,--c 爲咱們輸入的初始座標文件,--o 爲咱們模擬輸出的記錄文件,其記錄了輸出每步的能量等信息,--path 爲輸入文件所在的路徑,在本教程中爲 sponge_in 文件夾。
使用輸入文件,經過在指定溫度下進行模擬,計算力和能量,進行分子動力學過程演化。
運行獲得的結果在 .out 文件中,體系的能量變化都被記錄在該文件中,能夠查看模擬體系的熱力學信息。在 .out 文件中記錄了體系的以下信息:
_steps_ _TEMP_ _TOT_POT_ENE_ _BOND_ENE_ _ANGLE_ENE_ _DIHEDRAL_ENE_ _14LJ_ENE_ _14CF_ENE_ _LJ_ENE_ _CF_PME_ENE_
其中記錄了模擬過程當中輸出的各種能量, 分別是迭代次數(_steps_),溫度(_TEMP_),總能量(_TOT_POT_E_),鍵長(_BOND_ENE_),鍵角(_ANGLE_ENE_),二面角相互做用(_DIHEDRAL_ENE_),非鍵相互做用,其包含靜電力及Leonard-Jones相互做用。
教程文檔:https://gitee.com/mindspore/d...
在將來的版本中,會加入更多實用的分子動力學模擬模塊,支持更多應用。以後,SPONGE各模塊會逐步支持自動微分和自動並行,對於銜接機器學習方案提供更友好的支持。歡迎廣大的分子動力學愛好者和研究者加入咱們,共同拓展和維護SPONGE。