摘要: 在这篇文章中,我们主要介绍了打格点算法在分子动力学模拟中的重要价值,以及几种不同的实现方式。其中最普通的for循环的实现效率比较低下,从算法复杂度上来讲却已经是极致。而基于CPU上的向量化运算的技术,可以对计算过程进行非常深度的优化。当然,这个案例在不同的硬件上也能够发挥出明显不同的加速效果,在GPU的加持之下,可以获得100倍以上的加速效果。这也是一个在Python上实现GPU加速算法的一个典型案例。 阅读全文
posted @ 2021-09-08 17:50 DECHIN 阅读(142) 评论(0) 推荐(1) 编辑
摘要: 我们知道GPU加速在可并行化程度比较高的算法中,能够发挥出比较大的作用,展示出明显的加速效果,而对于一些线程之间存在依赖这样的场景就不一定能够起到很大的加速作用。CUDA官方针对此类问题,提供了atomic的内置函数解决方案,包含有求和、求最大值等常用函数。而这些函数的特点就在于,线程与线程之间需要有一个时序的依赖关系。就比如说求最大值的函数,它会涉及到不同线程之间的轮询。经过测试,CUDA的这种atomic的方案,实现起来非常方便,性能也很乐观,相比于自己动手实现一个不断切割、递归的规约函数,还是要容易快捷的多。 阅读全文
posted @ 2021-09-01 16:28 DECHIN 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 本文针对于Python中使用Numba的GPU加速程序的一些基本概念和实现的方法,比如GPU中的线程和模块的概念,以及给出了一个矢量加法的代码案例,进一步说明了GPU加速的效果。需要注意的是,由于Python中的Numba实现是一种即时编译的技术,因此第一次运算时的时间会明显较长,所以我们一般说GPU加速是指从第二步开始的运行时间。对于一些工业和学界常见的场景,比如分子动力学模拟中的系统演化,或者是深度学习与量子计算中的参数优化,都是相同维度参数多步运算的一个过程,非常适合使用即时编译的技术,配合以GPU高度并行化的加速效果,能够在实际工业和学术界的各种场景下发挥巨大的作用。 阅读全文
posted @ 2021-08-31 16:09 DECHIN 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 对于Pythoner而言,苦其性能已久。如果能够用一种非常Pythonic的方法来实现GPU的加速效果,对于Pythoner而言无疑是巨大的好消息,Numba就为我们提供了这样的一个基础功能。本文通过一个近邻表计算的案例,给出了适用于GPU加速的计算场景。这种计算场景可并行化的程度较高,而且函数会被多次用到(在分子动力学模拟的过程中,每一个step都会调用到这个函数),因此这是一种最典型的、最适用于GPU加速场景的案例。 阅读全文
posted @ 2021-08-31 09:49 DECHIN 阅读(298) 评论(0) 推荐(1) 编辑
摘要: Numpy这个库在Python编程中非常的常用,不仅在性能上补足了Python语言的一些固有缺陷,还具有无与伦比的强大生态。但是即使都是使用Python,Numpy也未必就达到了性能的巅峰,对于我们自己日常中使用到的一些计算的场景,针对性的使用CUDA的功能来进行GPU的优化,是可以达到比Numpy更高的性能的。 阅读全文
posted @ 2021-08-24 17:40 DECHIN 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 本文主要通过介绍两个python中常用的编码规范格式化工具:autopep8和black来讲解python编程中一些快速处理编程规范问题的方法,同时也说明了这些软件的局限性。编程规范也是人为制定的,事实上在实际项目中,也不是所有的编程规范都需要满足,这就需要项目的组织者或者领导者有自己的基本判断。结合代码规范检查工具flake8以及文章中介绍的这些代码规范格式化工具,最重要的还是要配合以人的判断和调整,才能使得项目具有更好的可读性、可维护性以及更友善的生态。 阅读全文
posted @ 2021-08-23 16:04 DECHIN 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 在本文中我们主要介绍了利用Two-Pass的算法来检测区域连通性,并给出了Python3的代码实现,当然在实现的过程中因为没有使用到Union这样的数据结构,仅仅用了字典来存储标签之间的关系,因此效率和代码可读性都会低一些,单纯作为用例的演示和小规模区域划分的计算是足够用了。在该代码实现方案中,还有一点与原始算法不一致的是,本实现方案中打新的标签是读取上、上左和左三个方向的格点,但是存储标签的映射关系时,是读取了上、上左、上右和左这四个方向的格点。 阅读全文
posted @ 2021-08-18 15:48 DECHIN 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 本文通过对pyvista这一相对“冷门”的python三维可视化工具的摸索,总结了安装与基本的使用示例,包括单模块、多模块、静态图、动态画板、gif和mp4视频的导出等。总体来说pyvista是一款渲染效果很棒的可视化软件,但是性能相对来说没有那么可观,对于规模不大的体系还是一个非常好用的工具,推荐使用。 阅读全文
posted @ 2021-07-23 17:52 DECHIN 阅读(645) 评论(0) 推荐(0) 编辑
摘要: 可视化可以说在所有的研究领域中都是要仔细斟酌的问题,一个好的可视化工具不仅可以为工作的开展带来极大的便捷,在一些特殊的场景下还可以辅助人们进行一些重要的决策。比如在物理学领域中,最开始寻找相变点的技巧其实也是依赖于实验数据的可视化来实现的。而在深度学习领域,可视化模型、可视化训练过程、可视化参数以及可视化的总结,可以让我们迅速的得到模型好坏的结论,这一点我们在本文中通过研究MindInsight的一些安装与使用技巧来进行实现。 阅读全文
posted @ 2021-07-14 09:19 DECHIN 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 本文作为一个入门级的文章,主要介绍了分子动力学模拟中增强采样的基本概念与相应工具的安装和使用。PLUMED是业界比较出名的一款增强采样开源软件,能够对接多个分子动力学模拟软件,如GROMACS等,并利用这些软件生成的路径信息来进行采样。并且为了可以在python上也能看到路径信息等重要数据,可以考虑使用mdconvert将路径数据转化成python上常用的hdf5格式并用h5py进行读写。 阅读全文
posted @ 2021-07-12 14:32 DECHIN 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 本文从分子动力学模拟中的周期性边界处理角度出发,介绍了无符号整数和带符号整数的一些应用的技巧,使用这些格式转换的技术有可能在程序的性能优化中带来一定的效果。同时为了更加直观的展示分子模拟的效果,我们用animation展示了一个简单的动态图绘制的案例,其中还包含了多个子图的绘图技术。 阅读全文
posted @ 2021-06-29 17:37 DECHIN 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 在不同的训练场景中,我们时常需要使用不同的损失函数来衡量一个模型的计算结果的优劣,本文重点介绍了在MindSpore中如何去自定义一个损失函数。基于MindSpore中的Loss类,我们可以通过继承该类后,再重写construct函数和get_loss函数来实现全面自定义的损失函数形式与内容。 阅读全文
posted @ 2021-06-22 11:13 DECHIN 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 这篇文章主要介绍Facebook所主导的机器学习框架PyTorch的容器化安装方法,基于HPC环境常用的Singularity高性能容器,并且兼容与结合了Docker容器镜像的生态,非常的友好。在容器化的编程环境中,我们不仅可以避免不同框架对于python库或者系统软件版本的依赖冲突,还可以很大程度上解决因为没有root权限以及网络外访权限的环境下所带来的极大的麻烦,故推荐使用这种方案进行安装和运行。 阅读全文
posted @ 2021-06-15 10:53 DECHIN 阅读(463) 评论(2) 推荐(0) 编辑
摘要: 这篇文章我们主要探讨如何去部署一个基于MindSpore框架的分布式训练环境,在MindSpore环境已经配置好的情况下,我们只需要安装好openmpi和nccl这两个工具就可以实现分布式的训练,在文中我们已经给出了相应的示例。虽然分布式与并行技术的目的是为了提升性能,但不是说对所有的场景都能够起到加速的作用,比如文章中的案例就没有加速的效果。这其实是因为我们的用例场景太简单了,纵观整个训练过程,GPU的使用率不到10%,在这种情况下还要考虑上通信的开销,自然是没有放在同一个卡上去训练来得快。这也给我们一个启发,考虑使用分布式和并行计算的技术时,一定也要先评估好问题本身是否适用于并行化的处理,否则是达不到预期的加速的目的的。 阅读全文
posted @ 2021-06-10 10:54 DECHIN 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 这篇文章主要介绍Singularity容器在Manjaro平台的安装,以及一些常见的使用场景:拉取沙箱制作容器镜像、远程制作容器镜像以及修改容器镜像的方法。总体而言Singularity是一个对非root用户非常友好的容器解决方案,在速度上没有实际测试过,只是在一些场景下可以看到比Docker性能要好一些。而且这个容器还支持非root的安装以及非root的使用方法,当然在基于RH的系统下有一些默认的配置项还是需要用root权限去修改后,才能够用非root的账户使用Singularity容器,最典型的就比如要将`/proc/sys/user/max_user_namespaces`这里面的对应参数配置为非零,否则使用会报错。 阅读全文
posted @ 2021-06-07 15:48 DECHIN 阅读(331) 评论(0) 推荐(1) 编辑