技术背景

在前面的博客中,我们介绍过关于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

参考链接

  1. https://www.cnblogs.com/dechinphy/p/lincs.html
  2. https://www.mindspore.cn/docs/zh-CN/r1.7/api_python/ops/mindspore.ops.Einsum.html?highlight=einsum#mindspore.ops.Einsum
  3. https://www.cnblogs.com/dechinphy/p/tensor.html
  4. https://www.zhihu.com/question/54786880/answer/147099121

MindSpore尝鲜之爱因斯坦求和的更多相关文章

  1. MindSpore尝鲜之Vmap功能

    技术背景 Vmap是一种在python里面经常提到的向量化运算的功能,比如之前大家常用的就是numba和jax中的向量化运算的接口.虽然numpy中也使用到了向量化的运算,比如计算两个numpy数组的 ...

  2. C++17尝鲜

    https://cloud.tencent.com/developer/article/1351910 [译]C++17,optional, any, 和 variant 的更多细节 用户261520 ...

  3. Windows 10 周年版尝鲜

    早在今年的 Build 大会上,微软就开始宣传最新的 Windows 10 周年版更新,炫了不少特技,直到昨天(2016/8/2 PST)才正式放出,相关新闻可以参考这里,正式的版本为 Version ...

  4. 【翻译】五步快速使用LINQPad尝鲜StreamInsight

    StreamInsight  学习地址:http://www.cnblogs.com/StreamInsight/archive/2011/10/26/StreamInsight-Query-Seri ...

  5. 小程序新能力-个人开发者尝鲜微信小程序

    个人开发者的福利 微信小程序,刚听到这个新名词的时候,我就兴冲冲的去找入口,看看自己能不能搞个微信小程序的HelloWorld,毕竟能在微信上把自己写的一些小工具跑起来还是满炫酷的. 没想,网上一查, ...

  6. 【响应式】foundation栅格布局的“尝鲜”与“填坑”

      提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...

  7. Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

    前言:由于之前没有接触过Hibernate框架,但是最近看一些博客深深被它的"效率"所吸引,所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜 Spr ...

  8. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

    本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动. 1.引言   Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发( ...

  9. Linux下尝鲜IDE Rider .NET又一开发利器

    RiderRS 扯淡:很多人说:jetbrains出品,必属精品,jetbrains确实出了不少好东西,但是他的产品总感觉越用越慢,我的小Y430P高配版也倍感压力,内存占用率高. Multiple ...

随机推荐

  1. List、Set、Map详解及区别

    一.List接口 List是一个继承于Collection的接口,即List是集合中的一种.List是有序的队列,List中的每一个元素都有一个索引:第一个元素的索引值是0,往后的元素的索引值依次+1 ...

  2. js常用方法集合

    1.数组去重 // 思路:获取没重复的最右一值放入新数组 /* * 推荐的方法 * * 方法的实现代码相当酷炫, * 实现思路:获取没重复的最右一值放入新数组. * (检测到有重复值时终止当前循环同时 ...

  3. mysqlbench无法启动

    mysqlbean双击没有反应,应用无法启动,缺少3要素 都缺什么呢?看这个MySQL官方链接:https://dev.mysql.com/doc/workbench/en/wb-installing ...

  4. 学习Tomcat(一)

    一.jdk和tomcat基础 1.web应用对比 apache: 两种方式运行php,一是用模块,二是用fastcgi nginx: 通过fastcgi处理动态请求,也可转发到tomcat 2.tom ...

  5. freeswitch对接WEBRTC的一个candidate问题

    概述 近几年,WEBRTC的完善与成熟,使得网页上使用webrtc的应用越来越多. Freeswitch是一个开源的软交换平台,可以直接支持webrtc的对接方式. 最近在测试fs和webrtc的对接 ...

  6. 顺利通过EMC试验(2)

    限制值 电磁波照射,静电放电敏感性

  7. 内网穿透系列-Go语言

    一.介绍 软件在KCP出现后进行了重构,将其底层UDP支持替换为了KCP,使其效率大大提高,在某些恶劣的网络环境下依旧能有不错的效果.当然,它也是支持TCP模式的,另外它也是支持加密的,在P2P打洞失 ...

  8. 微信小程序版博客——开发汇总总结(附源码)

    花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...

  9. 【前端Talkking】CSS系列——CSS深入理解之line-height

    1.写在前面 两个多周的时间没有写文章了,手好痒好痒,趁着公司在装修,从上周末到本周都在家办公,同时公司的项目并不紧急,于是抽着时间梳理了一下CSS中关于行高line-height的理解,今天发布出来 ...

  10. 前端面试题整理——手写bind函数

    var arr = [1,2,3,4,5] console.log(arr.slice(1,4)) console.log(arr) Function.prototype.bind1 = functi ...