MindSponge分子动力学模拟——软件架构(2023.08)
技术背景
在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用。这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者的区别。
整体架构
首先我们来了解一下MindSponge独立仓库的软件架构,其实核心部分的软件架构跟mindscience是一致的。
在这个架构图中,我们不仅可以看到MindSponge的内部模块划分,还能看到一个分子模拟数据处理的流程。
首先从一个模拟体系Molecule()开始,这个Molecule()可以独立定义,可以自行封装,也可以用Residue()来构建,里面存储有分子的基本信息,如坐标、原子名称等。
然后根据Molecule()提供的信息构建一个力场,形成一个PotentialCell()势能函数。这个势能函数,是基于模块化的EnergyCell()搭建的一个整体。而且除了力场本身之外,还可以接收外界输入的EnergyWrapper(),可用于添加神经网络力场,或者是增强采样产生的Bias()。这也是该架构的一个先进性的体现,虽然是一个MD软件,但不仅仅局限于做MD。
我们可以使用MindSpore内置的优化器,如Adam等,对Molecule()的Parameter进行更新迭代,可以自定义Updater()来对Molecule()进行更新。一般情况下,更新的依据主要来自于对PotentialCell()的自动微分。当然,也可以自行定义ForceCell()的内容。如果我们在动力学模拟的过程中,需要定义一些约束算法,或者是控温控压算法,都可以将相关的Controller()传入到Updater()中。
接下来的重点是要通过PotentialCell()来获取力,如果是以往传统的做法,只能通过取两点做差分的方法来得到一个作用力。但如果我们这里的所有计算都通过MindSpore的内置算子来实现的话,就可以使用MindSpore的自动微分来计算这个力。最终我们会得到一个ForceCell()传到Updater()里面,但是这一步对用户是不感知的,用户只需要定义好PotentialCell()这一块就足够了。或者用户也可以自行定义一个ForceModifier()传入到WithForceCell(),来构建一个自定义力场。
在具备了体系Molecule()、优化器Optimizer()和力场WithForceCell()之后,我们就可以开始基本的动力学模拟计算,此时就需要用到主程序Sponge()来对整个流程进行管理。并且,我们可以定义一些回调函数CallBack()给Sponge()进行任务追踪。比如RunInfo()可以在屏幕上输出指定步长的能量,或者是WriteH5MD可以将整个MD的轨迹保存到一个指定的hdf5格式的文件中,文件后缀名为
h5md,可以在VMD中增加一个hdf5的插件来进行动态可视化。
软件模块
我们先来看一下MindSponge这边的软件项目主页:
针对于这其中的内容我们简单梳理一下:sponge/是核心目录,tutorials/和tests/显然是一些案例或者是测试用例的路径,docs/是一些文档或者是图片,其他的文件基本上是一些跟mindsponge仓库的安装相关的内容,所以我们重点关注下sponge/下的内容:
这里我们对照每一个目录来进行内容解析:
callback:回调函数。在运行分子动力学模拟程序的过程中,我们可能会有记录一些能量、力、速度、轨迹的需求,这时候就需要调用回调函数,对相应的内容进行输出。目前比较常用的回调函数,是RunInfo和WriteH5MD。RunInfo可以在屏幕上输出运行的结果,WriteH5MD则是把轨迹等输出到一个hdf5格式的文件里面,后缀为
*.h5md,可以用https://gitee.com/helloyesterday/VMD-h5mdplugin这个VMD插件来进行可视化。colvar:各种形式的参量。这里预定义了一些常用的参量,比如分子质心、原子间键长键角等。当然,用户也可以自己开发一些参量,可以用于增强采样。
control:控制器和约束算法。顾名思义,就是要对原子系统迭代的过程进行控制,比如温度参数和压强参数,甚至是控制键长键角,都是可以的。
core:主程序。这里就是Sponge()的存放路径,对整个模拟过程进行管理。
data:参数文件和模板文件。我们在使用模板构建分子系统力场的时候,会使用到一些模板文件和力场参数文件,这些文件就都存储在data目录下,并且有相应的文件读取函数。
function:非内置函数。对于一些公用的函数,一般都集中放在function路径下。
metrics:度量函数。在机器学习中一般该函数被用于衡量模型的好坏,这里我们一般就用来计算某个特定的参数,比如设定一个自定义的CV函数,可以与colvar中的内容配合使用。
optimizer:优化器和积分器。之所以我们可以使用AI框架来实现一个分子动力学模拟的框架,正是得益于分子动力学模拟与AI训练/推理之中的共性。在神经网络的训练中我们可以使用优化器来迭代损失函数,而在分子动力学模拟中就可以使用积分器(如Leap-Frog和Velocity-Verlet)来迭代势能函数。
partition:近邻表。在分子系统较大时,就不能考虑全连接的相互作用,只能考虑局部相互作用。而分子模拟的过程中,近邻表实际上每一步都在变化,因此需要一个单独用于计算近邻关系的Cell。
potential:势能函数。这个就不需要过多解释了,相当于力场里面每一项的内容分开写在了几个文件里面。
sampling:增强采样函数。可用于修改势能项,也可以直接修改力,可以加快采样的进程。
system:分子系统基类。存储有一个分子系统的基本信息,如原子名称、残基名称,还有最核心的原子构象坐标等等。
总结概要
分子模拟具有众多的应用场景,比如制药领域和材料领域,做好分子模拟的工作,可以极大程度上缩减新药物新材料的研发成本和研发周期。近几年随着GPT-4和Diffusion Model的大火,让大家意识到了AI已经具备了相当的解决问题的能力。因此基于AI的框架和模型,对比AI训练与分子模拟之间的共性,可以实现一个面向AI时代的分子模拟框架。本文主要介绍基于MindSpore框架实现的,MindSponge分子动力学模拟框架的软件架构。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/structure.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958
CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343
51CTO同步链接:https://blog.51cto.com/u_15561675
MindSponge分子动力学模拟——软件架构(2023.08)的更多相关文章
- Gromacs分子动力学模拟流程概述
Gromacs分子动力学模拟主要可以分为以下几个步骤,不同的体系步骤可能略有不同. 在开始之前,先简单了解一下预平衡: 分子动力学模拟的最终目的是对体系进行抽样,然后计算体系的能量,各种化学键,成分分 ...
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- 分子动力学模拟之基于自动微分的LINCS约束
技术背景 在分子动力学模拟的过程中,考虑到运动过程实际上是遵守牛顿第二定律的.而牛顿第二定律告诉我们,粒子的动力学过程仅跟受到的力场有关系,但是在模拟的过程中,有一些参量我们是不希望他们被更新或者改变 ...
- 分子动力学模拟之SETTLE约束算法
技术背景 在上一篇文章中,我们讨论了在分子动力学里面使用LINCS约束算法及其在具备自动微分能力的Jax框架下的代码实现.约束算法,在分子动力学模拟的过程中时常会使用到,用于固定一些既定的成键关系.例 ...
- 【GROMACS】分子动力学模拟①——环境搭建
系统环境 Win11 22H2 企业版 开启虚拟化.window subsystem for liunx等虚拟机相关的功能 应用商店中安装WSL2 安装步骤 打开Ubuntu,输入sudo apt f ...
- 2023计算机领域顶会(A类)以及ACL 2023自然语言处理(NLP)研究子方向领域汇总
2023年的计算语言学协会年会(ACL 2023)共包含26个领域,代表着当前前计算语言学和自然语言处理研究的不同方面.每个领域都有一组相关联的关键字来描述其潜在的子领域, 这些子领域并非排他性的,它 ...
- LFD,非官方的Windows二进制文件的Python扩展包
LFD,非官方的Windows二进制文件的Python扩展包 LFD,非官方版本.32和64位.Windows.二进制文件.科学开源.Python扩展包 克里斯托夫·戈尔克(by Christoph ...
- Martini初步
部分内容来自http://jerkwin.github.io/9999/08/01/Martini%E7%B2%97%E7%B2%92%E5%8C%96%E5%8A%9B%E5%9C%BA%E4%BD ...
- kubeSphere+kubernetes 集群更新证书
模拟问题点 使用kubernetes时错误提示 yang@master:~$ kubectl get nodes Unable to connect to the server: x509: cert ...
- 科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生
科学家有了钱以后,真是挺吓人的——D.E.Shaw的牛逼人生 黑科技,还是要提D.E.Shaw Research这个奇异的存在. 要讲这个黑科技,我们可能要扯远一点,先讲讲D.E. Shaw这个人是怎 ...
随机推荐
- sql server 系统表详细说明
sql server 系统表详细说明 sysaltfiles 主数据库 保存数据库的文件syscharsets 主数据库字符集与排序顺序sysconfigures 主数据库 配置选项 syscurco ...
- Net 如何获取私有属性
.Net的私有属性.成员变量.方法,都可以通过反射获取调用,当然正常我们不会这么操作 此章只是做一个反射科普,像EFCore从数据库取值的底层框架就是通过反射直接操作私有的成员变量,而不是方法. 直接 ...
- 【HarmonyOS】元服务和APP的相互跳转、相互成就
[关键字] 卡片.跳转.加桌 [背景介绍] 随着鸿蒙生态的发展,各种类型的应用都已经可以在Harmony OS上无差异的运行,面对鸿蒙新兴元服务的兴起,各大厂家可能都在考虑一个问题:如果已经有AP ...
- C++面试八股文:C和C++有哪些区别?
某日小二参加XXX科技公司的C++高级工程师开发岗位1面: 面试官:请问C和C++的区别有哪些? 小二:C++是C的超集. 面试官:还有吗? 小二:... 面试官:面试结束,回去等消息吧. 小二:淦. ...
- 如何洞察 C# 程序的 GDI 句柄泄露
一:背景 1. 讲故事 前段时间有位朋友找到我,说他的程序界面操作起来很慢并且卡顿等一些不正常现象,从任务管理器看了下 GDI句柄 已经到 1w 了,一时也找不出什么代码中哪里有问题,让我帮忙看下,其 ...
- 自然语言处理 Paddle NLP - 信息抽取技术及应用
1.什么是信息抽取 即自动从无结构或半结构的文本中抽取出结构化信息的任务(病历抽取) 2.实体抽取 3.关系抽取 4.事件抽取 信息抽取和知识图谱是一个上下游的关系.抽取的结果,可以组装成知识图谱(一 ...
- Kubernetes——构建平台工程的利器
作者|Loft Team 翻译|Seal软件 链接|https://loft.sh/blog/why-platform-engineering-teams-should-standardize-on- ...
- 自然语言处理 Paddle NLP - 情感分析技术及应用SKEP-实践
Part A. 情感分析任务 众所周知,人类自然语言中包含了丰富的情感色彩:表达人的情绪(如悲伤.快乐).表达人的心情(如倦怠.忧郁).表达人的喜好(如喜欢.讨厌).表达人的个性特征和表达人的立场等等 ...
- EnhancingDecisionTreeswithGeographicInformationSystemsa
目录 引言 在计算机科学领域,地理信息系统和( geographical information systems, GIS)已经成为了一个非常受欢迎的工具.GIS 可以用来处理和存储大量的地理数据,支 ...
- React后台管理系统07 首页布局
注释掉App.tsx中的几个路由组件: 将Home.tsx中的代码使用ant Design网站中的布局进行替换 复制的代码如下: import { DesktopOutlined, FileOutli ...