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这个人是怎 ...
随机推荐
- 非AI文生图,献丑了
多图预警! 大家好,我是 DOM哥 也许你会好奇上面的这几张图片是怎么生成的,接下来我就开始隆重介绍这款文生图工具 当然,并非 AI 的那个文生图啦 预览地址:https://dombro.site/ ...
- Hugging News #0519: 我们把 HuggingChat 开源了
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- itextpdf5.5.13给pdf添加图片水印、添加文字水印(平铺)、添加文字水印(单个)、添加页眉、页脚、页眉事件、添加图片
转载自简书用户:alex很累,感谢分享.原地址:https://www.jianshu.com/p/2b9c7a0300e4 一.相关工具类 1. Excel2Pdf.java (如代码不可用请查看原 ...
- vue平铺日历组件之按住ctrl、shift键实现跨月、跨年多选日期的功能
已经好久没有更新过博客了,大概有两三年了吧,因为换了工作,工作也比较忙,所以也就没有时间来写技术博客,期间也一直想写,但自己又比较懒,就给耽误了.今天这篇先续上,下一篇什么时候写,我也不知道,随心所欲 ...
- springboot 项目国际化+登录拦截器
项目页面国际化 1.语言配置文件 需要下载插件Resource Bundle Editor 新建国际目录i18n 在properties配置文件中自定义 2.前端index页面要设置语言参数传递给后端 ...
- MySQL uuid及其相关的一些简单性能测试
运维同事导入一批大约500万左右的数据,耗时较久.他使用的是纯SQL导入,主键使用的是UUID,因为业务原因没有使用自增ID. 因为是内网,不能远程访问. 通过沟通,大致觉得有两个原因,一是因为UUI ...
- ChatGPT玩法(三):AI玩转PPT
前言 在线免费体验ChatGpt:https://www.topgpt.one 作为许多职场人士的必备工具,PPT制作一直是一个琐碎而费时的任务.但最近我发现了一个非常有用的工具网站,它可以通过人工智 ...
- vue 自己实现一套 keepalive 方案
vue自定义keepalive组件 前一阵来了一个新的需求,要在vue项目中实现一个多开tab页面的功能,本来心想,这不简单嘛就是一个增加按钮重定向吗?(当然如果这么简单我就不写这个文章了).很快写完 ...
- 爬取豆瓣Top250图书数据
爬取豆瓣Top250图书数据 项目的实现步骤 1.项目结构 2.获取网页数据 3.提取网页中的关键信息 4.保存数据 1.项目结构 2.获取网页数据 对应的网址为https://book.douban ...
- 【城南 · LlamaIndex 教程】一文看懂LlamaIndex用法,为LLMs学习私有知识
我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」(全网平台同名)~ 担任某大厂的算法工程师,带来最新的前沿AI知识,分享 AI 有趣工具和实用玩法,包括 ChatGPT.AI绘图等,欢迎大家交流~ ...