MindSpore尝鲜之爱因斯坦求和
技术背景
在前面的博客中,我们介绍过关于numpy中的张量网络的一些应用,同时利用相关的张量网络操作,我们可以实现一些分子动力学模拟中的约束算法,如LINCS等。在最新的nightly版本的MindSpore中也支持了爱因斯坦求和的算子,这是在张量网络中非常核心的一个操作,本文就简单介绍一下MindSpore中使用爱因斯坦求和的方法。
安装最新版的MindSpore
Einsum是在1.6之后的版本才支持的,MindSpore的Master分支就是官网上面的Nightly版本,我们可以安装这个已经实现了爱因斯坦求和算子的版本。
安装指令如下:
python3 -m pip install mindspore-cuda11-dev -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade
简单示例
我们可以先将张量缩并,理解成是一个普通的矩阵乘积即可,只是相乘的矩阵维度大小略有区别。可以先看一个简单的案例,再解析其中的原理:
Python 3.9.0 (default, Nov 15 2020, 14:28:56)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['GLOG_v'] = '4' # 设定日志等级,防止屏幕上出现大量的MindSpore告警信息
>>> from mindspore import Tensor, ops
>>> a = Tensor([[1.,2.],[3.,4.]])
>>> b = Tensor([1.,1.])
>>> ein_0 = ops.Einsum('ij,j->i') # 对第二个维度进行缩并
>>> print (ein_0((a,b)))
[3. 7.]
>>> ein_1 = ops.Einsum('ij,i->j') # 对第一个维度进行缩并
>>> print (ein_1((a,b)))
[4. 6.]
原理解析
我们日常所见的矩阵,可以采用张量这样的“章鱼图”表示方法来标记,每一个张量都是一个“章鱼”的头,而矩阵的每一个维度代表一条“章鱼腿”,比如一个维度为\((2,2,2)\)的矩阵,就可以用一只“三条腿的章鱼”来表示。而学习张量网络的时候经常可以看到的如下这张图,就分别用于表示一维、二维和三维的矩阵:
这些是张量的基本概念,而如果我们把“章鱼腿”都连接起来,就表示规定了这个张量的运算方向,张量只能跟相互连接的张量进行缩并(矩阵运算)操作。比如上一个章节中的案例,就可以用这样的一个张量图来表示:
可以看到,这两个矩阵运算之后得到的结果,是一个“单腿”的张量,对应于矩阵运算的维度变化就是:\((2,2)\times(2,)->(2,)\)。如果我们把这个运算推广开来,建立一个带有复杂链接信息的张量拓扑图,那么就得到了一个张量网络。在一个大型的张量网络中,我们不仅可以通过高性能的GPU来加速张量缩并的运算,还有路径搜索和图分解等算法可以进一步加速张量网络缩并,得到我们想要的结果。
我们可以再细化的讲解一下上一个章节中的案例,当我们使用ij,j->i这个路径时,得到的结果的第一个元素为\(a[0]\cdot b=3\),得到的第二个元素为\(a[1]\cdot b=7\)。当我们使用ij,i->j这个路径时,得到的结果的第一个元素为\(a[:,0]\cdot b=4\),得到的第二个元素为:\(a[:,1]\cdot b=4\)。从这个过程可以发现,对于二维的张量,其实取不同的“腿”,就是取行和取列运算的区别而已。对于更加高维的张量,我们很难用行、列这样的指标来衡量和理解,但是我们还是可以通过python的这种矩阵运算来理解。更多的参考示例,可以阅读MindSpore的官方文档(参考链接2)。
总结概要
张量网络计算,已经在众多的领域中得到了应用,不仅仅是传统的计算化学,当下医药研发领域的分子动力学模拟、计算化学和材料模拟,甚至是未来的量子计算,张量网络技术都在当中发挥重要作用。本文介绍的是MindSpore最新对张量网络计算的支持的第一步:用爱因斯坦求和计算张量网络缩并。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/mseinsum.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
参考链接
- https://www.cnblogs.com/dechinphy/p/lincs.html
- https://www.mindspore.cn/docs/zh-CN/r1.7/api_python/ops/mindspore.ops.Einsum.html?highlight=einsum#mindspore.ops.Einsum
- https://www.cnblogs.com/dechinphy/p/tensor.html
- https://www.zhihu.com/question/54786880/answer/147099121
MindSpore尝鲜之爱因斯坦求和的更多相关文章
- MindSpore尝鲜之Vmap功能
技术背景 Vmap是一种在python里面经常提到的向量化运算的功能,比如之前大家常用的就是numba和jax中的向量化运算的接口.虽然numpy中也使用到了向量化的运算,比如计算两个numpy数组的 ...
- C++17尝鲜
https://cloud.tencent.com/developer/article/1351910 [译]C++17,optional, any, 和 variant 的更多细节 用户261520 ...
- Windows 10 周年版尝鲜
早在今年的 Build 大会上,微软就开始宣传最新的 Windows 10 周年版更新,炫了不少特技,直到昨天(2016/8/2 PST)才正式放出,相关新闻可以参考这里,正式的版本为 Version ...
- 【翻译】五步快速使用LINQPad尝鲜StreamInsight
StreamInsight 学习地址:http://www.cnblogs.com/StreamInsight/archive/2011/10/26/StreamInsight-Query-Seri ...
- 小程序新能力-个人开发者尝鲜微信小程序
个人开发者的福利 微信小程序,刚听到这个新名词的时候,我就兴冲冲的去找入口,看看自己能不能搞个微信小程序的HelloWorld,毕竟能在微信上把自己写的一些小工具跑起来还是满炫酷的. 没想,网上一查, ...
- 【响应式】foundation栅格布局的“尝鲜”与“填坑”
提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...
- Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...
- 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...
- Linux下尝鲜IDE Rider .NET又一开发利器
RiderRS 扯淡:很多人说:jetbrains出品,必属精品,jetbrains确实出了不少好东西,但是他的产品总感觉越用越慢,我的小Y430P高配版也倍感压力,内存占用率高. Multiple ...
随机推荐
- MariaDB CAST语法
Syntax CAST(expr AS type) Description CAST()函数采用一种类型的值,并产生另一种类型的值,类似于CONVERT函数. CAST()和CONVERT()之间的主 ...
- ACM - 最短路 - AcWing 849 Dijkstra求最短路 I
AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ...
- CommonsCollection3
CommonsCollection3 1.前置知识 CommonsCollection3其实就是cc1和cc2的组合,不用再学那么多知识了,再学习另两个生面孔类 1.1.InstantiateTran ...
- Three.js 实现3D开放世界小游戏:阿狸的多元宇宙 🦊
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 2545光年之外的开普勒1028星系,有一颗色彩斑斓的宜居星球 ,星际移民 ...
- 微信小程序答题,怎么设计页面渲染,答完一题,跳到下一题
想要的效果 1.第一页只显示第一道题的内容,如图红框2.答题后,点击下一题,内容显示第二道题的内容 代码 answer.wxml <!--pages/answer/answer.wxml--&g ...
- java中什么是Interface接口, 请给个实例!
1.Interface接口的定义和用法 先直接上大白话:马克-to-win:接口就是灰常灰常抽象的抽象类,我们可以就像用抽象类一样用接口,只不过,interface抽象到不能再抽象了,以至于里面不能 ...
- Android设置TextView为不可见
通常控件的可见与不可见分为三种情况. 第一种 gone 表示不可见并且不占用空间 第二种 visible 表示可见 第三种 invisible 表示 ...
- 什么是机器学习的特征工程?【数据集特征抽取(字典,文本TF-Idf)、特征预处理(标准化,归一化)、特征降维(低方差,相关系数,PCA)】
2.特征工程 2.1 数据集 2.1.1 可用数据集 Kaggle网址:https://www.kaggle.com/datasets UCI数据集网址: http://archive.ics.uci ...
- Jedis的基本操作
jedis jedis 是 redis推荐的java客户端.通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作.jedis使用起来比较简单,它的操作方法与redis命令相类似. ...
- c++对于c的扩展_冒号作用域
冒号作用域 ::(该运算符为作用域):如果::前面什么都没加代表全局作用域 #include <iostream> using namespace stu; int a=10; viod ...