自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 直方图与核密度估计

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

2024-04-17 17:18:00 665

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

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

2024-04-16 11:27:00 445

原创 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 173

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

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

2024-04-12 10:19:00 839

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

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

2024-04-11 10:24:00 504

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

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

2024-04-10 16:54:00 855

原创 MindSpore自动微分小技巧

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

2024-04-09 17:31:00 806

原创 IPython刷新函数模块

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

2024-03-25 09:47:00 362

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

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

2024-03-22 17:46:00 275

原创 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 292

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

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

2024-03-12 16:32:00 901

原创 Python定位函数定义地址

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

2024-03-11 15:52:00 349

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

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

2024-03-11 10:30:00 373

原创 CUDA指针数组Kernel函数

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

2024-03-07 17:42:00 236

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

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

2024-03-06 16:58:00 306

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

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

2024-03-05 10:54:00 383

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

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

2024-02-29 16:37:00 354

原创 Python3中的“指针”

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

2024-02-27 11:01:00 409

原创 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 229

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

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

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

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

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

2024-02-02 16:15:00 872

原创 MindSpore导入CUDA算子

技术背景当今众多的基于Python的AI框架(如MindSpore、PyTorch等)给了开发者非常便利的编程的条件,我们可以用Python的简单的语法写代码,然后由框架在后端自动编译成可以在GPU上高效计算的程序。而对于一些定制化比较高的算法,MindSpore也支持了相关的接口,允许开发者自己开发相应的CUDA算子(需要统一接口),然后编译成.so动态链接库,再用MindSpore内置的函...

2024-01-31 15:29:00 968

原创 Linux命令行从x度网盘下载数据

技术背景做开源项目的时候,尤其是现在的数据量越来越大,经常会面临到数据往哪里存放的问题。因为自己刚好有一个某度云的会员,看了一下还有几十个TB的空间还没用上。于是考虑把这个网盘变成一个定向共享数据的平台,当然,传输文件容易,为了更加方便使用,需要从Linux平台上直接下载这些共享文件就最好了。上传文件到网盘首先在主页面上创建一个新的目录,找到上传按钮: 将所需共享的文件传到这个目录...

2024-01-26 17:50:00 913

原创 Julia编程基础

技术背景Julia目前来说算是一个比较冷门的编程语言,主要是因为它所针对的应用场景实在是比较有限,Julia更注重于科学计算领域的应用。而Julia最大的特点,就是官方所宣传的:拥有C的性能,且可以像Python一样便捷的开发。这对于科学计算领域来说确实是一件好事,目前也有一些科学领域的应用,但是毕竟赶了个晚集。在生态上必然是没有Python丰富,而又缺少C语言的受众基础,所以现在甚至知道的人...

2024-01-22 19:11:00 376

原创 无法访问Github仓库的极简治标法

技术背景由于IP原因,国内的IP访问Github仓库的时候会经常遇到一些困难,甚至存在无法Ping通的情况。尝试过FastGithub等方案,但还是会遇到各种各样的问题,导致情况越来越复杂。 但是转念一想,其实我只是想使用仓库中的代码和功能,理论上说使用国内的镜像就够了,于是总结了一个最实用便捷的方法:直接把相应的Github仓库同步到国内的Gitee仓库,然后就可以直接下载使用。具...

2024-01-22 11:14:00 335

原创 Numpy计算近邻表时间对比

技术背景所谓的近邻表求解,就是给定N个原子的体系,找出满足cutoff要求的每一对原子。在前面的几篇博客中,我们分别介绍过CUDA近邻表计算与JAX-MD关于格点法求解近邻表的实现。虽然我们从理论上可以知道,用格点法求解近邻表,在复杂度上肯定是要优于传统的算法。本文主要从Python代码的实现上来具体测试一下二者的速度差异,这里使用的硬件还是CPU。算法解析若一对原子A和B满足下述条件,则...

2024-01-09 23:30:00 965

原创 Python设置进程名称

技术背景当我们在同一个机器上管理多个进程时,经常会遇到一个问题是,很多进程的名称可能是重复的。以Linux系统为例,进程名称默认使用的是argv[0]。这样一来,如果在一台机器上有很多个Python任务,使用ps -a命令就可以看到大量重名的python3进程。虽然这些进程ID是独一无二的,但是光看进程ID可能无法直观的分辨是谁在执行什么样的任务。这里我们可以使用python的setproct...

2024-01-02 11:37:00 413

原创 Python代码中的偏函数

技术背景在数学中我们都学过偏导数\(\frac{\partial f(x,y)}{\partial x}\),而这里我们提到的偏函数,指的是\(f(y)(x)\)。也就是说,在代码实现的过程中,虽然我们实现的一个函数可能带有很多个变量,但是可以用偏函数的形式把其中一些不需要拆分和变化的变量转变为固有变量。比较典型的两个例子是计算偏导数和多进程优化。虽然大部分支持自动微分的框架都有相应的支持偏导...

2023-12-21 17:49:00 375

原创 Python追踪内存占用

技术背景当我们需要对python代码所占用的内存进行管理时,首先就需要有一个工具可以对当前的内存占用情况进行一个追踪。虽然在Top界面或者一些异步的工具中也能够看到实时的内存变化,还有一些工具可以统计代码中每一步的内存占用。但如果只是要查看单步操作之后的内存变化,tracemalloc的简单易用,让它成为了一个绝佳的选择。本文主要介绍用tracemalloc来追踪代码的内存占用变化。trac...

2023-12-20 16:20:00 387

原创 Python定位错误:段错误 (核心已转储)

技术背景在各种编程语言中都有可能会遇到这样一个报错:“段错误 (核心已转储)”。显然是编写代码的过程中有哪里出现了问题,但是这个报错除了这几个字以外没有任何的信息,我们甚至不知道是哪一行的代码出现了这个问题。解决方案在python中可以引用一个faulthandler的函数,就可以显示更加具体的报错信息,便于定位。import faulthandlerfaulthandler.enab...

2023-12-18 10:46:00 521

原创 双二面角耦合力场项的计算

技术背景当我们使用分子力场进行分子动力学模拟时,通常包括成键相互作用(键长项、键角项和二面角项)和非成键相互作用(范德华力)。而其中成键相互作用,可以根据作用的范围,进一步定义成1-2相互作用、1-3相互作用和1-4相互作用,也就是键长键角和二面角。在FF19SB力场中,为了进一步提升力场模拟的精确度,引入了一个CMAP参数,用于计算\(C_{\alpha}\)位置上的二面角耦合相互作用,也可...

2023-12-05 19:34:00 846

原创 使用Amber计算单点能三步走

技术背景Amber是一个在分子动力学中非常常用的一个软件,可以用于进行分子动力学模拟计算,可以与一些软件配合进行增强采样。这里我们简单介绍一下如何使用Amber去计算一个分子构象的单点势能值,及其对应的能量分量。第一步:构造力场文件首先我们需要运行tleap,加载一个力场,例如这里加载的是ff99SB的力场。同时准备一个待模拟的pdb文件,load完成后,可以直接存储为prmtop文件和i...

2023-11-30 14:39:00 402

原创 Jupyter Notebook报错'500 : Internal Server Error'的解决方法

问题根因Jupyter相关的软件包版本匹配存在问题,或者历史上安装过Jupyter相关的配套软件但是有残留。大部分网上的博客都是推荐用pip重装jupyter或者nbconvert,亲测无法解决该问题。解决方案按照指定的匹配版本,全部重装ipython、jupyter和notebook等软件,目前来说,另一篇博客中推荐的这个版本配套是可以正常使用的:$ python3 -m pip in...

2023-11-21 14:47:00 163

原创 MindSpore简要性能分析

技术背景在之前的一篇博客中,我们介绍过MindInsight的安装与使用。不过在前面的文章中,我们主要介绍的是MindInsight与SummaryCollector的配合使用,更多的是用于对结果进行回溯。这篇文章我们简要的从性能分析的角度,来介绍一下MindInsight的一些使用方法。MindInsight的安装与启动这部分内容在前面的博客中已经介绍过一次,这里简单的重复一下相关的内容...

2023-09-12 16:54:00 107

原创 MindSponge分子动力学模拟——Constraint约束(2023.09)

技术背景在前面的几篇博客中,我们已经介绍了MindSponge的基本使用方法,比如定义一个分子系统、计算分子的单点能以及迭代器的使用等。有了这些基础的教程,用户以及可以执行一些比较简单的模拟任务,比如可以跑一个能量极小化,或者是NVT过程。当我们去执行一个模拟任务时,比较关键的一个指标是给定时间内可模拟的总时长,总时长直接决定了我们能不能看到其中的一些过渡态。当然,现在有很多改进的思路。比如...

2023-09-06 15:48:00 114

原创 MindSponge分子动力学模拟——使用迭代器进行系统演化(2023.09)

技术背景在前面几篇博客中,我们已经介绍过使用MindSponge去定义一个系统以及使用MindSponge计算一个分子系统的单点能。这篇文章我们将介绍一下在MindSponge中定义迭代器Updater,并使用Sponge对系统进行演化,最后使用CallBack对输出结果进行追踪和保存。分子动力学迭代器与深度学习优化器首先我们回顾一下这张MindSponge的软件架构图: 在这里U...

2023-09-04 17:38:00 164

原创 MindSponge分子动力学模拟——计算单点能(2023.08)

技术背景在前面的几篇文章中,我们分别介绍了MindSponge的软件架构、MindSponge的安装与使用和如何在MindSponge中定义一个分子系统。那么就像深度学习中的损失函数,或者目标函数,这里分子力学的主要目标函数就是势能(也有动能项,但动能项更多的来源于分子动力学模拟的过程,而不是实验中的参数)。这篇文章我们主要探讨一下,在MindSponge中如何计算给定体系的单点能。浅析Fo...

2023-08-31 15:10:00 110

原创 MindSponge分子动力学模拟——定义一个分子系统(2023.08)

技术背景在前面两篇文章中,我们分别介绍了分子动力学模拟软件MindSponge的软件架构和安装与使用教程。这里我们进入到实用化阶段,假定大家都已经在本地部署好了基于MindSpore的MindSponge的编程环境,开始用MindSponge去做一些真正的分子模拟的工作。那么分子模拟的第一步,我们就需要在MindSponge中去定义一个分子系统Molecule()。基础类Molecule的解...

2023-08-30 16:53:00 150

原创 MindSponge分子动力学模拟——软件架构(2023.08)

技术背景在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用。这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者的区别。整体架构首先我们来了解一下MindSponge独立仓库的软件架构,其实核心部分的软件架构跟mindscience是一致的。 在这个架构图中,我们不仅可以看到MindSponge的...

2023-08-28 09:55:00 116

原创 MindSponge分子动力学模拟——安装与使用(2023.08)

技术背景昇思MindSpore是由华为主导的一个,面向全场景构建最佳昇腾匹配、支持多处理器架构的开放AI框架。MindSpore不仅仅是软件层面的工具,更重要的是可以协同华为自研的昇腾Ascend平台,做到软硬件一体的行业解决方案。基于MindSpore的高通量、自动微分和自动并行等高级特性,以及对于python第三方库numpy的友好支持,我们开发了一款可以在MindSpore上进行分子动力...

2023-08-17 09:57:00 343 3

空空如也

空空如也

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

TA关注的人

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