MindSponge分子动力学模拟——多路径分子模拟(2024.05)
技术背景
在前面的MindSponge教程系列博客中,我们已经介绍过MindSponge分子动力学模拟框架的基础功能使用方法,例如MindSponge的安装与使用、定义分子系统、计算单点能和迭代器等等。这些模块和功能,更多的是凭借MindSpore深度学习框架的自动微分、GPU加速和Python语言的灵活性,而本文要介绍的是深度学习框架可以带来的另一个重大优势:多路径的高通量分子模拟。
使用逻辑
在MindSponge分子动力学模拟框架中,原生的支持了多batch的计算模式,这个场景跟深度学习中处理Dataset时用到的batchwise是非常类似的。在分子模拟中,我们可以给定同一个体系的多个初始位置,可以相同也可以不同,然后使用同一个力场和迭代器进行优化、更新,最终得到不同的轨迹和不同的构象。在MindSponge框架下,单路径和多路径这两种模式的切换,只需要在定义模拟系统system时,先定义单路径的system,再按照不同的初始构象重构一次system即可:
mol_file = 'alad_water_opt.pdb'
mol = Protein(mol_file, template=['protein0.yaml', 'water.spce.yaml'])
mol.num_walker = 2
mol.build_system()
# 对coordinate的batch维度进行扩维,并以wrap形式填充
mol.build_space(msnp.pad(mol.coordinate, ((0, 1), (0, 0), (0, 0)), mode='wrap'))
其他的配置可以直接复用单路径分子模拟的代码。
真实案例
这里我们使用到了一个丙氨酸二肽+一个水分子的简单测试体系,其pdb文件内容为:
MODEL 1
ATOM 1 H1 ACE A 1 2.012 1.007 0.000 1.0 0.0 H
ATOM 2 CH3 ACE A 1 1.996 2.097 0.002 1.0 0.0 C
ATOM 3 H2 ACE A 1 1.484 2.455 0.891 1.0 0.0 H
ATOM 4 H3 ACE A 1 1.487 2.455 -0.890 1.0 0.0 H
ATOM 5 C ACE A 1 3.409 2.623 0.011 1.0 0.0 C
ATOM 6 O ACE A 1 4.349 1.840 0.032 1.0 0.0 O
ATOM 7 N ALA A 2 3.559 3.946 -0.023 1.0 0.0 N
ATOM 8 H ALA A 2 2.741 4.544 -0.004 1.0 0.0 H
ATOM 9 CA ALA A 2 4.862 4.614 -0.000 1.0 0.0 C
ATOM 10 HA ALA A 2 5.411 4.315 0.894 1.0 0.0 H
ATOM 11 CB ALA A 2 5.665 4.220 -1.246 1.0 0.0 C
ATOM 12 HB1 ALA A 2 5.123 4.520 -2.141 1.0 0.0 H
ATOM 13 HB2 ALA A 2 6.638 4.707 -1.220 1.0 0.0 H
ATOM 14 HB3 ALA A 2 5.834 3.147 -1.264 1.0 0.0 H
ATOM 15 C ALA A 2 4.706 6.138 0.016 1.0 0.0 C
ATOM 16 O ALA A 2 3.588 6.651 0.002 1.0 0.0 O
ATOM 17 N NME A 3 5.838 6.851 0.016 1.0 0.0 N
ATOM 18 H NME A 3 6.722 6.359 0.001 1.0 0.0 H
ATOM 19 CH3 NME A 3 5.854 8.301 0.002 1.0 0.0 C
ATOM 20 HH31 NME A 3 4.827 8.674 -0.000 1.0 0.0 H
ATOM 21 HH32 NME A 3 6.363 8.660 0.894 1.0 0.0 H
ATOM 22 HH33 NME A 3 6.363 8.656 -0.894 1.0 0.0 H
ATOM 23 O WAT A 4 -0.314 8.560 2.297 1.0 0.0 O
ATOM 24 H1 WAT A 4 0.499 9.142 2.295 1.0 0.0 H
ATOM 25 H2 WAT A 4 -1.119 9.148 2.298 1.0 0.0 H
TER
ENDMDL
END
其构象大概长这个样子:
在安装好MindSponge之后,我们可以直接使用如下代码来构建一个多路径分子模拟的示例:
import mindspore as ms
from mindspore import numpy as msnp
# 设置MindSpore后台计算使用GPU静态图模式,速度会更快
ms.set_context(mode=ms.GRAPH_MODE, device_target='GPU', device_id=0)
# 引入必要的MindSponge模块
from sponge import Protein, ForceField, WithEnergyCell, UpdaterMD, RunOneStepCell, Sponge
from sponge.control import Langevin, LeapFrog
from sponge.callback import RunInfo
# 导入分子构象文件,构建模拟系统
mol_file = './alad_water_opt.pdb'
mol = Protein(mol_file, template=['protein0.yaml', 'water.spce.yaml'])
# 设置多路径的数量为2
mol.num_walker = 2
# 先重构分子系统的拓扑信息
mol.build_system()
# 再构建分子系统的空间信息,此时输入的坐标batch维度要跟多路径的数量对齐
mol.build_space(msnp.pad(mol.coordinate, ((0, 1), (0, 0), (0, 0)), mode='wrap'))
# 查看多路径数量是否更新成功
print (mol.num_walker)
# 打印每条轨迹下前三个原子的空间坐标
print (mol.coordinate.asnumpy()[:, :3])
# 打印分子系统的原子类型信息
print (mol.atom_type)
# 力场构建,与单路径构建方法一致
potential = ForceField(mol, parameters=['amber.ff14sb', 'spce'], use_pme=False)
with_energy = WithEnergyCell(mol, potential)
# 计算单点能
print (with_energy.calc_energies().sum(-1))
# 构建朗之万热浴积分器,与单路径下的使用方法一致
temp = 300
thermostat = Langevin(mol, temp)
updater = UpdaterMD(mol, time_step=2e-3, integrator=LeapFrog(mol), thermostat=thermostat)
one_step = RunOneStepCell(energy=with_energy, optimizer=updater)
md = Sponge(network=one_step)
# 定义回调函数,用于打印模拟过程中的势能等信息
run_info = RunInfo(1)
md.run(10, callbacks=[run_info])
# 打印迭代之后的体系空间信息和能量信息
print (mol.coordinate.asnumpy()[:, :3])
print (with_energy.calc_energies().sum(-1))
模拟的输出结果为:
2 # 两条模拟路径
[[[2.0120001e-01 1.0070000e-01 0.0000000e+00]
[1.9960001e-01 2.0969999e-01 2.0000001e-04]
[1.4839999e-01 2.4550000e-01 8.9099996e-02]]
[[2.0120001e-01 1.0070000e-01 0.0000000e+00]
[1.9960001e-01 2.0969999e-01 2.0000001e-04]
[1.4839999e-01 2.4550000e-01 8.9099996e-02]]] # 初始构象一致
[['H1' 'CH3' 'H2' 'H3' 'C' 'O' 'N' 'H' 'CA' 'HA' 'CB' 'HB1' 'HB2' 'HB3'
'C' 'O' 'N' 'H' 'CH3' 'HH31' 'HH32' 'HH33' 'OW' 'HW' 'HW']] # 多路径模拟共享同一个模拟体系
[-67.05737 -67.05737] # 初始能量一致
[MindSPONGE] Started simulation at 2024-05-27 16:43:31
[MindSPONGE] Step: 1, E_pot: [-67.05737 -67.05737], E_kin: [0.93526113 1.1376405 ], E_tot: [-66.12211 -65.91973], Temperature: [3.1246128 3.8007417]
[MindSPONGE] Step: 2, E_pot: [-67.76422 -67.67892], E_kin: [2.87101 2.2547605], E_tot: [-64.89321 -65.42416], Temperature: [9.591754 7.5329266]
[MindSPONGE] Step: 3, E_pot: [-68.390305 -68.228424], E_kin: [4.2298875 3.9742615], E_tot: [-64.160416 -64.254166], Temperature: [14.131627 13.277606]
[MindSPONGE] Step: 4, E_pot: [-68.723 -68.80056], E_kin: [5.0383153 5.081285 ], E_tot: [-63.684685 -63.719276], Temperature: [16.8325 16.976059]
[MindSPONGE] Step: 5, E_pot: [-69.14583 -69.199196], E_kin: [6.2894073 5.8883085], E_tot: [-62.856422 -63.310886], Temperature: [21.012274 19.672243]
[MindSPONGE] Step: 6, E_pot: [-69.68199 -69.531006], E_kin: [7.1465344 7.5664873], E_tot: [-62.535458 -61.96452 ], Temperature: [23.875849 25.27887 ]
[MindSPONGE] Step: 7, E_pot: [-70.71329 -70.14986], E_kin: [9.099633 8.052189], E_tot: [-61.613655 -62.097668], Temperature: [30.400955 26.901548]
[MindSPONGE] Step: 8, E_pot: [-71.7045 -70.37026], E_kin: [9.534681 9.304852], E_tot: [-62.169815 -61.06541 ], Temperature: [31.854406 31.086567]
[MindSPONGE] Step: 9, E_pot: [-71.351135 -70.86687 ], E_kin: [ 9.35821 10.023544], E_tot: [-61.992928 -60.843323], Temperature: [31.264833 33.487644]
[MindSPONGE] Step: 10, E_pot: [-71.8908 -71.19918], E_kin: [10.796071 11.098853], E_tot: [-61.09473 -60.100327], Temperature: [36.068584 37.080147]
[MindSPONGE] Finished simulation at 2024-05-27 16:43:36
[MindSPONGE] Simulation time: 5.89 seconds.
--------------------------------------------------------------------------------
[[[ 0.20221242 0.10218664 -0.001829 ]
[ 0.1975184 0.210064 -0.00026266]
[ 0.14476728 0.24293597 0.08909092]]
[[ 0.20099933 0.10118634 -0.00139746]
[ 0.1981248 0.20958814 0.00327332]
[ 0.14694569 0.2449529 0.09299506]]] # 最终构象出现差异
[-71.71762 -71.29018] # 最终能量出现差异
由于这里使用的朗之万积分器带有随机项,因此即时是具备相同的初始构象,在多步的模拟之后,构象和能量都与初始构象发生偏离,而且两条路径下的构象也是有所差异的。当然,类似的,我们可以模拟不同的初始构象在没有随机性的迭代器下的迭代过程,感兴趣的童鞋可以自行尝试一下。
总结概要
随着硬件算力的发展,以及AI技术的日益增进,我们不仅可以借助深度学习框架来加速分子动力学模拟,以及降低分子模拟开发的门槛。还可以实现高通量模拟,使得用最小的开销并行的运行多个分子模拟成为可能。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/multi-md.html
作者ID:DechinPhy
更多原著文章:https://www.cnblogs.com/dechinphy/
请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
MindSponge分子动力学模拟——多路径分子模拟(2024.05)的更多相关文章
- Gromacs分子动力学模拟流程概述
Gromacs分子动力学模拟主要可以分为以下几个步骤,不同的体系步骤可能略有不同. 在开始之前,先简单了解一下预平衡: 分子动力学模拟的最终目的是对体系进行抽样,然后计算体系的能量,各种化学键,成分分 ...
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- 分子动力学模拟之基于自动微分的LINCS约束
技术背景 在分子动力学模拟的过程中,考虑到运动过程实际上是遵守牛顿第二定律的.而牛顿第二定律告诉我们,粒子的动力学过程仅跟受到的力场有关系,但是在模拟的过程中,有一些参量我们是不希望他们被更新或者改变 ...
- 分子动力学模拟之SETTLE约束算法
技术背景 在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现.约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系.例 ...
- 【GROMACS】分子动力学模拟①——环境搭建
系统环境 Win11 22H2 企业版 开启虚拟化.window subsystem for liunx等虚拟机相关的功能 应用商店中安装WSL2 安装步骤 打开Ubuntu,输入sudo apt f ...
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
序:这段时间忙于奔波,好久没有更新了,今天更新一下,继续上节课的完善讲解,算是对前段时间的一个总结吧.披星戴月的时光也算有点应用效果了. 对于webgl(three.js)性能这一块我在上节课< ...
- 在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件(转)
引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过“我现在可以通过WebBr ...
- Jsoup实现java模拟登陆
Jsoup实现java模拟登陆 2013-10-29 14:52:05| 分类: web开发|举报|字号 订阅 下载LOFTER我的照片书 | 1:如何获取cookies. 1.1 ...
- PhoenixFD插件流体模拟——UI布局【Input】详解
Liquid Input 流体输入 本文主要讲解Input折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Input 主 ...
- NFC手机上基于软件的卡模拟 重大利好还是安全噩梦?(转)
Software Card Emulation in NFC-enabled Mobile Phones: GreatAdvantage or Security Nightmare? Michael ...
随机推荐
- HarmonyOS远端状态订阅开发实例
IPC/RPC提供对远端Stub对象状态的订阅机制, 在远端Stub对象消亡时,可触发消亡通知告诉本地Proxy对象.这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消.使 ...
- 有奖活动 | 以代码之名,写出对Ta的爱
七夕情人节到了,为了Ta, 你打算用什么方式表达爱? 是包包.鲜花.美酒.巧克力, 还是一封充满爱意的短信? 在HarmonyOS,有一群精致又机智的开发者们,他们#以代码之名,表达爱# 比起鲜花 ...
- 重新整理.net core 计1400篇[二] (.net core 改造控制台项目)
前言 为.net core 命令行的基础上写的,如果有兴趣的话,可以去看我的.net core 前文. 下面介绍如何将.net core控制台转换为.net core web应用. 正文 如果我们要实 ...
- K8s集群nginx-ingress监控告警最佳实践
本文分享自华为云社区<K8s集群nginx-ingress监控告警最佳实践>,作者:可以交个朋友. 一 背景 nginx-ingress作为K8s集群中的关键组成部分.主要负责k8s集群中 ...
- 面试官:来说说vue3是怎么处理内置的v-for、v-model等指令?
前言 最近有粉丝找到我,说被面试官给问懵了. 粉丝:面试官上来就问"一个vue文件是如何渲染成浏览器上面的真实DOM?",当时还挺窃喜这题真简单.就简单说了一下先是编译成rende ...
- JavaIDEA配置JDBC数据库连接+可视化页面
"感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 0X01 ...
- 力扣15(Java)-三数之和(中等)
题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[i] + ...
- 零信任策略下K8s安全监控最佳实践(K+)
简介: 本文重点将围绕监控防护展开,逐层递进地介绍如何在复杂的分布式容器化环境中借助可观测性平台,持续监控K8s集群,及时发现异常的 API 访问事件.异常流量.异常配置.异常日志等行为,并且结合合理 ...
- Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架
简介: IOC(inversion of control)即控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.IOC-golang 是一款服务于Go语言开发者的依赖注入框架 ...
- 阿里云贾扬清:大数据+AI工程化,让数据从「成本」变为「资产」
简介: 近年来,数字经济发展迅速,企业转型背后频频涌现「数字力量」的身影.云计算.大数据.人工智能的快速融合形成了数字经济的新基建,也为数字经济发展带来了新的机遇. 5 月 20 日,阿里巴巴副总裁. ...