自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(206)
  • 收藏
  • 关注

原创 Python循环控制

技术背景循环控制是每一门编程语言的基础,最常用的就是for循环和while循环。使用循环可以很大程度上简化代码的编写,可读性也很强。这里介绍Python的for循环基本操作和多重循环的控制。单层for循环这里用一个最简单的打印数字的for循环来演示普通单层for循环的控制:for i in (1, 2, 3): print (i)输出结果为:123值得一提的是,Pyt...

2024-07-15 17:31:00 849

原创 Pypi配置API Token

技术背景在许久之前写的一篇博客中,我们介绍过使用twine向pypi上传我们自己的开源包的方法。最近发现这个方法已经不再支持了(报错信息如下所示),现在最新版需要使用API Token进行文件上传,这里大致介绍一下配置的方法。$ python3 setup.py check$ python3 setup.py sdist bdist_wheel$ twine upload --repos...

2024-07-09 10:50:00 487

原创 一个用来画拉氏图的简单Python脚本

技术背景关于拉氏图的更多介绍,可以参考下这篇博客,这里简单引述一部分内容:Ramachandran plot(拉氏图)是由G. N. Ramachandran等人于1963年开发的,用来描述蛋白质结构中氨基酸残基二面角\(\psi\)和\(\phi\)是否在合理区域的一种可视化方法。同时也可以反映出该蛋白质的构象是否合理。 思路是比较简单的,就是找到一个蛋白质主链中的C,C\(_...

2024-07-05 16:04:00 899

原创 Cython编译报错“numpy/arrayobject.h: No such file or directory”解决方案

问题背景Cython是用来加速Python程序性能的一个工具,其基本使用逻辑就是将类Python代码(*.pyx扩展格式)编译成\(*.c,*.so\)动态链接库文件,然后就可以在正常的Python脚本文件中调用动态链接库的内部函数。编译过程中因为会去索引一些头文件,如果找不到路径就有可能报错。测试案例我们可以用Cython做一个简单的基于numpy array输入的求和函数:# tes...

2024-06-26 10:03:00 267

原创 解决Win11安装VMD闪退问题

问题背景在Win11环境下安装VMD分子动力学可视化软件之后,双击打开应用,出现闪退的问题。解决办法:打开我的电脑--属性--高级系统设置--环境变量。在用户变量框里选--新建(N)--变量名设:VMDNOOSPRAY--值设:1。再次打开VMD,界面不再闪退: 总结概要本文介绍了一个通过配置环境变量的方法,解决Win11系统下安装分子可视化软件VMD时出现的界面闪退问题...

2024-06-18 10:14:00 331

原创 Win11系统下的MindSpore环境搭建

技术背景笔者尝试过不少编程环境搭建的方案,例如常见的Ubuntu、Deepin、CentOS,也用过很多人力荐的Manjaro,这些发行版在需要办公的条件下,一般都需要结合Windows双系统使用。MacOS更适用于本地环境搭建,但是能兼容的显卡型号还是比较有限的。经过一些测试,其实我认为Win11+WSL2+Docker会是一个比较不错的解决方案(本来打算也试试虚拟机,但是听朋友说虚拟机调C...

2024-06-09 16:34:00 684

原创 MindSponge分子动力学模拟——多路径分子模拟(2024.05)

技术背景在前面的MindSponge教程系列博客中,我们已经介绍过MindSponge分子动力学模拟框架的基础功能使用方法,例如MindSponge的安装与使用、定义分子系统、计算单点能和迭代器等等。这些模块和功能,更多的是凭借MindSpore深度学习框架的自动微分、GPU加速和Python语言的灵活性,而本文要介绍的是深度学习框架可以带来的另一个重大优势:多路径的高通量分子模拟。使用逻辑...

2024-05-27 20:49:00 308

原创 MindSponge分子动力学模拟——体系控制(2024.05)

技术背景在传统的分子动力学模拟软件中,对于分子体系的控制,例如控制体系的相对位置亦或是绝对位置,通常都是通过施加一些约束算法来实现的。例如用于限制化学键的LINCS算法,又比如水分子体系非常常用的SETTLE约束算法,这两种算法都属于Constraint(硬约束)。除此之外还有很多Restraint(软约束),例如施加谐振势等等,在MindSponge中有相关的实现:sponge.potent...

2024-05-24 15:42:00 324

原创 Python作图三维等高面

技术背景对于等高线,大家都是比较熟悉的,因为日常生活中遇到的山体和水面,都可以用一系列的等高线描绘出来。而等高面,顾名思义,就是在三维空间“高度一致”的曲面。当然了,在二维平面上我们所谓的“高度”实际上就是第三个维度的值,但是三维曲面所谓的“高度”,实际上我们可以理解为密度。“高度”越高,“密度”越大。等高线作图如果是Python中画等高线,这个用Matplotlib就可以实现,这里就直接...

2024-05-21 15:22:00 358

原创 Ubuntu系统下的mp4播放器

安装介绍这里推荐一个Ubuntu 20.04下可用的本地视频播放器,VLC。可用直接打开本地视频,速度也不错,可用使用apt安装。一般顺序是先安装媒体加码器:$ sudo apt-get install ubuntu-restricted-extras[sudo] xxx 的密码: 正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 ...

2024-05-20 14:40:00 391

原创 MindSpore梯度进阶操作

技术背景在MindSpore深度学习框架中,我们可以使用mindspore.grad对函数式编程的函数直接计算自动微分,也可以使用mindspore.ops.GradOperation求解Cell类的梯度dout。本文所介绍的mindspore.ops.InsertGradientOf是一个对dout进一步进行处理的算子,类似于在Cell类中自定义一个bprop函数,不改变前向传播输出的结果,...

2024-05-16 10:35:00 264

原创 MindSponge分子动力学模拟——自定义控制器(2024.05)

技术背景分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的。例如控温器可以用于实现NVT系综,控压器可用于实现NPT系综。而在MindSponge分子动力学模拟框架下,控温控压都可以基于控制器Controller来实现。关于更多的MindSponge分子动力学模拟框架的信息,如安装和基本使用等,可以阅读MindSp...

2024-05-15 16:17:00 403

原创 统计力学中的概率论基础(二)

技术背景接上一篇文章,我们继续记录统计力学中的一些基础的概率论知识。这一篇文章主要介绍的是一些常用的概率密度函数的对应参数计算,如期望值、方差等。伯努利分布在离散分布中,最简单的分布为伯努利(Bernoulli)分布,也叫0-1分布。伯努利分布的随机变量就跟抛硬币一样只有两种:0(失败)和1(成功),对应的概率可以表示为:\[p=P(X=1),q=P(X=0)=1-p\]因为伯努利分布...

2024-05-14 18:38:00 407

原创 统计力学中的概率论基础(一)

技术背景统计力学是一门通过粒子的纯粹微观量来表示系统宏观量的学科,从统计分布出发,用无偏/有偏估计来研究各种不同的系综。本文内容部分参考自郑伟谋老师所著《统计力学导引》,主要介绍其中概率论基础的部分。但因为大多是个人的理解,如有差错,与参考文献作者无关。事件与概率假定我们抛一枚质地未知的硬币,正面事件记为\(A\),反面事件记为\(B\)。那么经过多次的测试,可以得到一个统计概率:\(P(...

2024-05-14 11:28:00 363

原创 MindSpore反向传播配置关键字参数

技术背景在MindSpore深度学习框架中,我们可以向construct函数传输必备参数或者关键字参数,这跟普通的Python函数没有什么区别。但是对于MindSpore中的自定义反向传播bprop函数,因为标准化格式决定了最后的两位函数输入必须是必备参数out和dout用于接收函数值和导数值。那么对于一个自定义的反向传播函数而言,我们有可能要传入多个参数。例如这样的一个案例:import ...

2024-05-09 14:54:00 396

原创 PyTorch的安装与使用

技术背景PyTorch是一个非常常用的AI框架,主要归功于其简单易用的特点,深受广大科研人员的喜爱。在前面的一篇文章中我们介绍过制作PyTorch的Singularity镜像的方法,这里我们单独抽出PyTorch的安装和使用,再简单的聊一聊。安装Torch常规的安装方案可以使用源码安装、pip安装、conda安装和容器安装等,这里我们首选推荐的是conda安装的方法。关于conda,其实没...

2024-05-08 15:48:00 324

原创 Markdown和Latex中文字上下标的方法

技术背景在Markdown和Latex中,如果只是写公式,不论是行内公式还是行间公式,都可以直接使用^和_这两个符号实现上下标。但有个问题是,如果只是使用公式来做上下标,出来的字体是斜着的。例如这样的语法:$$P_{OK}$$输出结果是这样的:\[P_{OK}\]但是有些时候想要的字符不能使用斜体,这时候就有几种解决办法。归正字体第一种方法,我们可以在对应的字符前加一个\rm,...

2024-05-07 10:34:00 488

原创 Plumed分子模拟后分析

技术背景在前面的几篇博客中,我们分别介绍过Histogram算法的使用、Plumed安装与简单使用。Plumed一般就是两种用法:要么在运行分子动力学模拟的过程中实时的对接,要么就是把分子模拟的相关轨迹保存下来,然后再使用Plumed进行后分析,本文介绍的是后面这种使用方法。轨迹准备做后分析,我们要先准备一手轨迹。比如我们做Histogram,那么就需要保留一条CV的轨迹,或者说反应坐标的...

2024-05-06 10:30:00 377

原创 手搓自动微分

技术背景自动微分技术,在各大深度学习框架里面得到了广泛的应用。但是其实究其原理,就是一个简单的链式法则。要实现一个自动微分框架是非常容易的事情,难的是高阶的自动微分和端到端的自动微分。这篇文章主要介绍一阶自动微分的基础Python实现,以及一些简单的测试案例。链式法则求导的链式法则,这个在高数里面大家就都学过了,形式比较简单:\[f(g(x))'=f'[g(x)]\cdot g'(x)...

2024-04-18 15:59:00 286

原创 直方图与核密度估计

技术背景直方图是一种经常被用于统计的图形表达形式,简单来说它的功能就是用一系列的样本数据,去分析样本的分布规律。而直方图跟核密度估计(Kernel Density Estimation,KDE)方法的主要差别在于,直方图得到的是一个离散化的统计分布,而KDE方法得到的是一个连续的概率分布函数。如果将得到的分布重新用于采样,两者都可以结合蒙特卡洛方法实现这样的功能,但是KDE的优点在于它得到的结...

2024-04-17 17:18:00 809

原创 Tkinter常用功能示例(一)

技术背景Tkinter是一个Python自带的GUI框架,虽然现在主流的还是用pyqt的多一些,但是Tkinter在环境配置上可以节省很多工作,可以用来做一些小项目。如果是大型项目,用pyqt或者QT确实会更加专业一些。本文主要介绍一些简单的Tkinter的示例,比如文本框定义、标签定义和TreeView定义等。窗口初始化最基本的来说,类似于代码界的Hello Word,我们可以用Tkin...

2024-04-16 11:27:00 466

原创 MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案

问题背景在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:RuntimeError: Unsupported device target GPU. This process only supports one of the ['CPU']. Please check whether the GPU environment is installed and...

2024-04-15 14:37:00 388

原创 基于QUBO模型的多体分子对接

技术背景本文分享内容来自于最新的一篇名为Multibody molecular docking on a quantum annealer的文章,这篇文章的核心思想,是使用QUBO(二次受限二元优化)模型来求解一个分子对接问题: 分子对接如果我们考虑空间中有\(N\)个分子,这\(N\)个分子可以摆放在任意的位置,以任意的角度。那么这些不同的位置和角度,每一个都可以计算出来一个能量值...

2024-04-12 10:19:00 917

原创 MindSpore编译构建后Vmap模块的RuntimeError问题

技术背景这篇文章来源于MindSpore仓库中的一个Issue,简单描述问题就是,如果你用MindSpore开发了一个python软件供别人使用,那么很有可能涉及到编译构建的问题。但是如果直接使用编译好的whl包去运行的话,就有可能出现一个跟Jit即时编译有关的报错,这里Jit在其他的一些模块中也会被使用到,比如Vmap函数和Grad函数等。问题复现我们通过一个简单的测试案例来复现一下这个...

2024-04-11 10:24:00 511

原创 单精度浮点数计算误差与消减方法

技术背景一个比较容易理解的概念,我们在做计算的过程中,很多时候都要做截断。不同精度的混合计算之间也会有截断,就比如一个float32单精度浮点数,符号占1位,指数占8位,尾数占23位。而一个float64双精度浮点数,符号占1位,指数占11位,尾数占52位。通常情况下,float32的有效数字约7位(按照\(2^{23+1}\)大小的范围计算),float64的有效数字为16位(按照\(2^{...

2024-04-10 16:54:00 905

原创 MindSpore自动微分小技巧

技术背景基于链式法则的自动微分技术,是大多数深度学习框架中所支持的核心功能,旨在更加快速的进行梯度计算,并且可以绕开符号微分的表达式爆炸问题和手动微分的困难推导问题。本文主要基于MindSpore框架,记录一下几种自动微分的使用技巧。MindSpore版本信息:Name: mindsporeVersion: 2.2.13Summary: MindSpore is a new open s...

2024-04-09 17:31:00 832

原创 IPython刷新函数模块

技术背景IPython是一个非常灵活好用的python终端工具,而且比Python自带的终端工具还多了命令行高亮和自动索引的功能,也是常用的Jupyter Notebook的基础工具。在使用IPython的过程中可以使用它的一些独有的功能——直接运行Shell命令行,和魔术命令。本文介绍的是其中一种魔术命令——重新加载函数模块。魔术命令配置在默认配置下,IPython在运行一个模块之前不会...

2024-03-25 09:47:00 373

原创 MindSponge分子动力学模拟——自建力场(2024.03)

技术背景在MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场。在传统的MD软件中,如果你希望去开发一个自己的力场,或者是添加一些分子动力学模拟方法如增强采样等,会面临不少编程上的困难。而这些困难对于使用Python来编程的MindSponge来说,就天然的降低了门槛。以力场为例子,我们可以在Ene...

2024-03-22 17:46:00 337

原创 MindSpore报错处理:TypeError: For 'set_context', the parameter device_id can not be set repeatedly, origi...

问题背景在使用MindSpore运行一个分子动力学模拟的测试程序时:from mindspore import contextfrom mindspore.nn import Adamif __name__ == "__main__": import sys sys.path.insert(0, '../..') from sponge import Spon...

2024-03-22 10:13:00 319 2

原创 MindSpore自定义算子中的张量维度问题

技术背景在前面的几篇博客中,我们介绍了MindSpore框架下使用CUDA来定义本地算子的基本方法,以及配合反向传播函数的使用,这里主要探讨一下MindSpore框架对于CUDA本地算子的输入输出的规范化形式。测试思路MindSpore使用的CUDA算子规范化接口形式为:extern "C" int CustomOps(int nparam, void **params, int *nd...

2024-03-12 16:32:00 917

原创 Python定位函数定义地址

技术背景事情是这样的,在一次使用MindSpore编程的过程中,遇到一个报错"TypeError: get_parameters() got an unexpected keyword argument 'expand'"。首先我定位到了这个报错的函数,然后找到相关函数的定义:"def get_parameters(self, expand=True):",我们发现这里是有带expand参数的...

2024-03-11 15:52:00 366

原创 将MindSpore运行结果输出到log文件

技术背景我们在Linux系统下使用一些深度学习框架(如MindSpore)运行脚本的时候,经常会用一些打印输出来判断当前执行的步骤,或者是使用打印输出来定位算法问题。但是在Linux系统下程序输出其实被分成了正确输出和错误输出,如果只是在屏幕上打印的话,会将两种输出同时打印出来。但是如果要将打印的结果输出到某个文件里面的话,这时候正确输出和错误输出就是需要分开指定了。指定方法例如我们运行这...

2024-03-11 10:30:00 403

原创 CUDA指针数组Kernel函数

技术背景在前面的一篇文章中,我们介绍了在C++中使用指针数组的方式实现的一个不规则的二维数组。那么如果我们希望可以在CUDA中也能够使用到这种类似形式的不规则的数组,有没有办法可以直接实现呢?可能过程会稍微有一点麻烦,因为我们需要在Host和Device之间来回的转换,需要使用到很多CUDA内置的cudaMalloc和cudaMemcpy函数,以下做一个完整的介绍。原始代码及修改思路在上一...

2024-03-07 17:42:00 263

原创 C++中的不规则二维数组

技术背景最近刚学习C++的一些编程技巧,对于一些相对比较陌生的问题,只能采取一些简单粗暴的方案来实现。就比如说,我们可以在Python中定义一个[[0,0,0],[1,2],[1,1,1],[3]]这样的不规则的二维数组(list)。那么如果我们想在C++中实现一个类似的数据结构,应该怎么去设计呢?更具体一点的问题,当我们给C++输入一个固定长度的数组,比如Shape为(4,3),然后再给出一...

2024-03-06 16:58:00 319

原创 从Python语言的角度看C++的指针

技术背景从一个Python Coder的角度来说,其实很羡慕C++里面指针类型的用法,即时指针这种用法有可能会给程序带来众多的不稳定因素(据C++老Coder所说)。本文主要站在一个C++初学者的角度来学习一下指针的用法,当然,最好是带着一定的Python基础再去学习C++的逻辑,会更容易一些。内存地址赋值一般认为,指针就是一个内存地址。其实Python中也可以获取内存地址,但如果直接使用...

2024-03-05 10:54:00 395

原创 MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)

技术背景分子动力学模拟(Molecule Dynamics Simulation,MD),本质上是一门采样技术。通过配置力场参数、拓扑结构和积分器,对一个给定的体系不断的采样,最终得到一系列的轨迹。那么得到分子动力学模拟的轨迹之后,如何使用后分析工具进行轨迹分析,也是一项很重要的工作。目前来说,基于Python的开源工具MDAnalysis(简称mda)是一个比较常用的MD后分析工具。本文主要...

2024-02-29 16:37:00 510

原创 Python3中的“指针”

技术背景在python中定义一个列表时,我们一定要注意其中的可变对象的原理。虽然python的语法中没有指针,但是实际上定义一个列表变量时,是把变量名指到了一个可变对象上。如果此时我们定义另外一个变量也指到同一个可变对象的话,就会造成一个“联动”的现象。也就是改变其中的一个值时,另一个值也会随之而改变。本文使用的Python版本为Python 3.7.13测试案例这里我们先定义一个列表a,...

2024-02-27 11:01:00 453

原创 Python报错symbol lookup error: xxx.so: undefined symbol: cufftxxx解决办法

技术背景在上一篇文章中介绍过如何实现本地MindSpore的CUDA算子,那么在算子编译和使用的过程中可能会出现一些小问题,这里介绍的是编译成功为so动态链接库之后,在python中调用,提示找不到xxx函数/字符的报错。这里使用的编译指令为:$ nvcc --shared -Xcompiler -fPIC -o xxx.so xxx.cu编译后完整报错如下:python3: symbo...

2024-02-26 16:35:00 332

原创 MindSponge分子动力学模拟——定义Collective Variables(2024.02)

技术背景在前面的几篇博客中,我们介绍了MindSponge分子动力学模拟框架的基本安装和使用和MindSponge执行分子动力学模拟任务的方法。这里我们介绍一个在增强采样领域非常常用的工具:Collective Variable(CV),或者我们也可以直接称呼其为一个物理量。因为像化学反应或者是蛋白质折叠等问题中,经常会存在一个“路径(Path)”,使得反应沿着这个路径来进行。其中最简单的一种...

2024-02-19 16:15:00 465 1

原创 关于分子力场中键能项和角能项的思考

技术背景所谓的分子力场,就是用一些计算量较小的函数,来拟合并替代一部分传统第一性原理计算的结果。这个结果,包含了势能和作用力,再用朗之万动力学进行演化,这才使得我们可以在计算机上模拟一个分子动力学的过程。否则在第一性原理计算的框架下,要想获得动力学统计的信息,是非常困难的。分子力场,常见的有成键相互作用、非成键相互作用以及多体相互作用。本文主要解释一下其中的成键相互作用的Bond Energ...

2024-02-02 16:15:00 901

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除