上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 19 下一页
摘要: SETTLE约束算法的批量化处理 在前一篇文章中介绍了SETTLE约束算法在分子动力学模拟中的应用,本文通过用Jax的Vmap功能对SETTLE函数进行了扩维,使得其可以批量的计算多分子体系的约束条件。这里采用的案例是一个含有16个水分子(48原子)的小体系,从结果中可以看到,在随机移动和批量SETTLE的作用下,所有的水分子都保留了原始的键长和键角,简单理解这个过程就是一个刚体三角形的平移和旋转的过程。 阅读全文
posted @ 2022-03-11 17:48 DECHIN 阅读(407) 评论(0) 推荐(0)
摘要: Scipy和Numpy的插值对比 线性插值和三次样条插值都是非常常用的插值算法,使用插值法,可以帮助我们对离散的样本信息进行扩展,得到样本信息中所不包含的样本点的信息。插值法有着非常广泛的应用场景,就比如某手机厂商所号称的x千万像素拍照,其中插值法就发挥了重要作用。在python的scipy这个库中实现了线性插值算法和三次样条插值算法,而numpy库中实现了线性插值的算法,我们通过这两者的不同使用方式,来看下所得到的插值的结果。 阅读全文
posted @ 2022-03-09 09:22 DECHIN 阅读(3582) 评论(0) 推荐(2)
摘要: 分子动力学模拟之SETTLE约束算法 继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文再介绍一种SETTLE约束算法,及其基于Jax的实现方案。LINCS约束算法相对来说比较通用,更适合于成键关系比较复杂的通用的体系,而SETTLE算法更加适用于三原子轴对称体系,比如水分子。SETTLE算法结合velocity-verlet算法,可以确保一个分子只进行整体的旋转运动,互相之间的距离又保持不变。比较关键的是,SETTLE算法所依赖的参数较少,也不需要微分,因此在性能上十分有优势。 阅读全文
posted @ 2022-03-08 09:05 DECHIN 阅读(1223) 评论(0) 推荐(0)
摘要: Numpy是在Python中用于各种矩阵运算非常强大的工具之一,而快速的通过下标取出所需位置的元素也是numpy所支持的强大功能之一。常规的元素取法都可以通过numpy的下标或者是numpy.take函数来实现,比如array[0,:]可用于取第一条轴的所有元素,array[:,0]可以用于取第二条轴的所有第二个元素,放在一个2维的矩阵里面就分别是取第一行的所有元素和取第一列的所有元素。但是本文更加关注于更高维的矩阵,当我们想从多个维度中取多个元素时,是不太容易直接用下标去取的,比如同时取a[0][0],a[0][1],a[1][1],a[1][2]的话,那么就只能使用numpy所支持的另外一个函数numpy.take_along_axis来实现。 阅读全文
posted @ 2022-02-24 17:32 DECHIN 阅读(1481) 评论(0) 推荐(0)
摘要: 这篇文章的主要内容是梳理在Numpy中经常用到的各种取下标的操作,包括但不限于取指定轴的所有元素、取指定位置的单个元素、取指定位置的多个元素、扩维以及取未显式给定位置的多个元素等等。比较重要的是在Numpy中tuple的取法和list的取法是代表不一样的含义,并且由于历史原因,Numpy中存在一些list取法和numpy.array的取法表示不一致的地方,在本文中进行了总结。 阅读全文
posted @ 2022-02-23 20:18 DECHIN 阅读(1921) 评论(0) 推荐(0)
摘要: 在本文中通过一个实际函数案例的多次尝试,给出了得到预期结果的一种解决方案。虽然MindSpore框架本身提供了Jvp和Vjp等功能,但是实际上和Grad没有太大的区别,只是用Tuple的形式增加了输入的一个维度。如果可以使用纯Tensor的输入,用这种Mask加上Grad或者GradOperation的方案会更加简单一些。同时我也尝试过使用HyperMap(类似于Jax中的vmap)来解决这个问题,只需要写好一条对z求导的函数形式,就可以自动对这个求导过程进行扩维,两者的结果是一致的。但是MindSpore的HyperMap在Graph模式下兼容效果不是很好,建议非必要不尝试。 阅读全文
posted @ 2022-02-17 16:55 DECHIN 阅读(339) 评论(0) 推荐(0)
摘要: 在前一篇博客中我们介绍了加侧旋的乒乓球弧圈技术的模拟,本文我们关注的是高吊弧圈和削球弧线这两种轨迹原理,并且引入了空气阻力对乒乓球运动轨迹的影响。通过对空气阻力和马格努斯力的模拟,我们可以看到不同的弧线曲线。对于乒乓球爱好者而言,可以通过这种模拟的结果,来制定比赛中有可能用到的策略,比如低长弧圈球、高短弧圈球等等。先从科学的角度出发制定战略,再通过日常训练和巩固提高技术水平,最后再使用到正式的赛场上去。 阅读全文
posted @ 2022-02-15 19:07 DECHIN 阅读(1411) 评论(1) 推荐(2)
摘要: 本文通过对马格努斯力的模拟,来理解乒乓球的弧圈原理。并且在这个理论基础之上对比了几种场景下的乒乓球轨迹,比如乒乓球的运动速度,或者日常所说的撞击对乒乓球轨迹的影响。还有乒乓球的角速度,也就是日常我们所说的摩擦对乒乓球轨迹的影响。还有一个在乒乓球界堪称变革的小球改大球对乒乓球这项运动可能带来的影响。由于这方面读过的理论文章较少,本文仅仅作为一个娱乐参考即可。 阅读全文
posted @ 2022-02-12 12:17 DECHIN 阅读(1798) 评论(2) 推荐(2)
摘要: 本文通过完整的案例及其算法实现的过程,介绍了LINCS(Linear Constraint Solver)这一分子动力学模拟过程常用的约束算法。得益于Jax这一框架的便用性及其对numpy的强大支持、对GPU计算的优化、还有自动微分与向量化运算等技术的实现,使得我们实现LINCS这一算法变的不再困难。 阅读全文
posted @ 2022-02-09 21:41 DECHIN 阅读(1377) 评论(1) 推荐(1)
摘要: 本文通过一个实际的散点图案例,展示了如何使用pyqt5嵌套一个pyecharts图层的方法,通过这个技巧,可以在pyqt5的框架中也实现精美的数据可视化的功能模块。 阅读全文
posted @ 2022-01-15 23:27 DECHIN 阅读(2697) 评论(0) 推荐(0)
摘要: 在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一个非常常用的功能。如果仅仅是使用系统级的GPU监测工具,就没办法非常细致的去跟踪每一步的显存和使用率的变化。如果是用profiler,又显得过于细致,而且环境配置、信息输出和筛选并不是很方便。此时就可以考虑使用py3nvml这样的工具,针对于GPU任务执行的过程进行细化的分析,有助于提升GPU的利用率和程序执行的性能。 阅读全文
posted @ 2022-01-13 11:01 DECHIN 阅读(1321) 评论(0) 推荐(0)
摘要: 本文是第一篇关于JAX-MD的源码学习的文章,主要关注点在于JAX-MD中对于近邻表的检索和优化。本文的主要内容是其中构建CellList的部分,通过打格点的方法可以大大降低近邻表搜索算法的复杂度,在GPU计算的过程中更是可以极大的降低显存的占用,从而允许我们去运行更大规模的体系。 阅读全文
posted @ 2022-01-04 16:11 DECHIN 阅读(741) 评论(0) 推荐(0)
摘要: 在使用一些python的GPU模块,或者写CUDA时,有时会发现显存被无端占用的场景,即时执行了cudaFree()或者python的del操作,也无法消除这一块的显存占用。最终我们发现,可以通过额外开启一个子进程的方法来封装相关的操作,通过对进程的存活控制来实现对GPU显存占用的控制,有可能是一个临时规避问题的思路。 阅读全文
posted @ 2021-12-14 17:16 DECHIN 阅读(4008) 评论(4) 推荐(1)
摘要: 关于工业领域中可能使用到的随机采样,更多的是这样的一个场景:给定一个连续或者离散的分布,然后进行大规模的连续采样,采样的同时需要对每一个得到的样点进行分析打分,最终在这大规模的采样过程中,有可能被使用到的样品可能只有其中的几份。那么这样的一个抽象问题,就非常适合使用分布式的多GPU硬件架构来实现。 阅读全文
posted @ 2021-12-09 10:23 DECHIN 阅读(493) 评论(0) 推荐(0)
摘要: 在这篇文章中,我们并没有介绍非常多的MPI的应用,其实在普通的并行或者分布式任务中,掌握了各个进程的任务处理过程以及进程间的通信方法就足够了。总体来说,MPI是一个非常通用也非常高效的并行计算软件。有了这些专业的并行化任务调度软件,我们就可以专注于专业任务的代码和算法上,而不需要过多的去关注并行任务的调度和分配问题。 阅读全文
posted @ 2021-12-02 17:45 DECHIN 阅读(5352) 评论(0) 推荐(0)
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 19 下一页