3D Cube计算引擎加速运算

华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore。

为什么要做达芬奇架构?

AI将作为一项通用技术极大地提高生产力,改变每个组织和每个行业。为了实现AI在多平台多场景之间的协同,华为设计达芬奇计算架构,在不同体积和功耗条件下提供强劲的AI算力。

初见:达芬奇架构的核心优势

达芬奇架构,是华为自研的面向AI计算特征的全新计算架构,具备高算力、高能效、灵活可裁剪的特性,是实现万物智能的重要基础。具体来说,达芬奇架构采用3D Cube针对矩阵运算做加速,大幅提升单位功耗下的AI算力,每个AI Core可以在一个时钟周期内实现4096个MAC操作,相比传统的CPU和GPU实现数量级的提升。

▲3D Cube

同时,为了提升AI计算的完备性和不同场景的计算效率,达芬奇架构还集成了向量、标量、硬件加速器等多种计算单元。同时支持多种精度计算,支撑训练和推理两种场景的数据精度要求,实现AI的全场景需求覆盖。

深耕:达芬奇架构的AI硬实力

常见的AI运算类型有哪些?

在了解达芬奇架构的技术之前,先来弄清楚一下几种AI运算数据对象:

  • 标量(Scalar):由单独一个数组成
  • 向量(Vector):由一组一维有序数组成,每个数由一个索引(index)标识
  • 矩阵(Matrix):由一组二维有序数组成,每个数由两个索引(index)标识
  • 张量(Tensor):由一组n维有序数组成,每个数由n个索引(index)标识

其中,AI计算的核心是矩阵乘法运算,计算时由左矩阵的一行和右矩阵的一列相乘,每个元素相乘之后的和输出到结果矩阵。在此计算过程中,标量(Scalar)、向量(Vector)、矩阵(Matrix)算力密度依次增加,对硬件的AI运算能力不断提出更高要求。

典型的神经网络模型计算量都非常大,这其中99%的计算都需要用到矩阵乘,也就是说,如果提高矩阵乘的运算效率,就能最大程度上提升AI算力——这也是达芬奇架构设计的核心:以最小的计算代价增加矩阵乘的算力,实现更高的AI能效。

各单元角色分工揭秘,Da Vinci Core是如何实现高效AI计算的?

华为AI芯片Ascend 310(昇腾310),Ascend 310相当于AI芯片中的NPU。

其中,Da Vinci Core只是NPU的一个部分,Da Vinci Core内部还细分成很多单元,包括核心的3D Cube、Vector向量计算单元、Scalar标量计算单元等,各自负责不同的运算任务实现并行化计算模型,共同保障AI计算的高效处理。

3D Cube矩阵乘法单元是AI计算的核心,这部分运算由3D Cube完成,Buffer L0A、L0B、L0C则用于存储输入矩阵和输出矩阵数据,负责向Cube计算单元输送数据和存放计算结果。

Cube的算力很强大,但只能完成矩阵乘运算,还有很多计算类型要依靠Vector向量计算单元来完成。Vector的指令相对来说非常丰富,可以覆盖各种基本的计算类型和许多定制的计算类型。

Scalar标量运算单元主要负责AI Core的标量运算,功能上可以看作一个小CPU,完成整个程序的循环控制,分支判断,Cube、Vector等指令的地址和参数计算以及基本的算术运算等。

3D Cube计算方式的独特优势是什么?

不同于以往的标量、矢量运算模式,华为达芬奇架构以高性能3D Cube计算引擎为基础,针对矩阵运算进行加速,大幅提高单位面积下的AI算力,充分激发端侧AI的运算潜能。以两个N*N的矩阵A*B乘法为例:如果是N个1D的MAC,需要N2的cycle数;如果是1个N2的2D MAC阵列,需要N个Cycle;如果是1个N维3D的Cube,只需要1个Cycle。

▲图中计算单元的数量只是示意,实际可灵活设计

达芬奇架构将大幅提升算力,16*16*16的3D Cube能够显著提升数据利用率,缩短运算周期,实现更快更强的AI运算。举例来说,同样是完成4096次运算,2D结构需要64行*64列才能计算,3D Cube只需要16*16*16的结构就能算出。其中,64*64结构带来的问题是:运算周期长、时延高、利用率低。

达芬奇架构的这一特性也体现在麒麟810上。作为首款采用达芬奇架构NPU的手机SoC芯片,麒麟810实现强劲的AI算力,在单位面积上实现最佳能效,FP16精度和INT8量化精度业界领先。

麒麟810支持自研中间算子格式IR开放,算子数量多达240+,处于业内领先水平。更多算子、开源框架的支持以及提供更加完备的工具链将助力开发者快速转换集成基于不同AI框架开发出的模型,极大地增强了华为HiAI移动计算平台的兼容性、易用性,提高开发者的效率,节约时间成本,加速更多AI应用的落地。

达芬奇架构解锁AI无限可能

基于灵活可扩展的特性,达芬奇架构能够满足端侧、边缘侧及云端的应用场景,可用于小到几十毫瓦,大到几百瓦的训练场景,横跨全场景提供最优算力。

以Ascend芯片为例,Ascend-Nano可以用于耳机电话等IoT设备的使用场景;Ascend-Tiny和Ascend-Lite用于智能手机的AI运算处理;在笔记本电脑等算力需求更高的便携设备上,由Ascend 310(Ascend-Mini)提供算力支持;而边缘侧服务器上则需要由Multi-Ascend 310完成AI计算;至于超复杂的云端数据运算处理,则交由算力最高可达256 TFLOPS@FP16的Ascend 910(Ascend-Max)来完成。正是由于达芬奇架构灵活可裁剪、高能效的特性,才能实现对上述多种复杂场景的AI运算处理。

同时,选择开发统一架构也是一个非常关键的决策。统一架构优势很明显,那就是对广大开发者非常利好。基于达芬奇架构的统一性,开发者在面对云端、边缘侧、端侧等全场景应用开发时,只需要进行一次算子开发和调试,就可以应用于不同平台,大幅降低了迁移成本。不仅开发平台语言统一,训练和推理框架也是统一的,开发者可以将大量训练模型放在本地和云端服务器,再将轻量级的推理工作放在移动端设备上,获得一致的开发体验。

在算力和技术得到突破性提升后,AI将广泛应用于智慧城市、自动驾驶、智慧新零售、机器人、工业制造、云计算AI服务等场景。未来,AI将应用更加广泛的领域,并逐渐覆盖至生活的方方面面。

3D Cube计算引擎加速运算的更多相关文章

  1. Mathcad 是一种工程计算软件,主要运算功能:代数运算、线性代数、微积分、符号计算、2D和3D图表、动画、函数、程序编写、逻辑运算、变量与单位的定义和计算等。

    Mathcad软件包Mathcad是由MathSoft公司(2006 年4 月被美国PTC收购)推出的一种交互式数值计算系统. Mathcad 是一种工程计算软件,作为工程计算的全球标准,与专有的计算 ...

  2. 利用JavaScript计算引擎进行字符串公式运算

    1.通过js计算引擎计算(java自带) 2.计算公式除了支持基本的方法之外还支持简单js脚本分支计算 3.通过设定map传入参数 4.默认返回最后一个计算结果,如果需返回特定值,将变量补写在公式最后 ...

  3. 交互式计算引擎MOLAP篇

    交互式计算引擎MOLAP篇 摘自:<大数据技术体系详解:原理.架构与实践> MOLAP是一种通过预计算cube方式加速查询的OLAP引擎,它的核心思想是“空间换时间”,典型代表包括Drui ...

  4. 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算

    日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发. 此前,早在2018年9月的杭州云栖大会上,阿里 ...

  5. WPF 3D 小小小小引擎 - ·WPF 3D变换应用

    原文:WPF 3D 小小小小引擎 - ·WPF 3D变换应用 WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开 ...

  6. Spark源码剖析 - 计算引擎

    本章导读 RDD作为Spark对各种数据计算模型的统一抽象,被用于迭代计算过程以及任务输出结果的缓存读写.在所有MapReduce框架中,shuffle是连接map任务和reduce任务的桥梁.map ...

  7. 【Spark深入学习 -13】Spark计算引擎剖析

    ----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark ...

  8. Flink学习笔记-新一代Flink计算引擎

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  9. 斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】

    hihocoder #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个 ...

随机推荐

  1. php中var关键字用法

    见很多朋友说在php中定义变量用不用var都没关系,其实不然. 看看例子,如果我这样使用var: 1 var $a=123; 2 echo $a; 3 //那么程序会提示语法错误,要去掉var这个变量 ...

  2. Python中的BeautifulSoup模块

    目录 BeautifulSoup Tag NavigableString BeautifulSoup Comment 遍历文档树 直接子节点 所有子孙节点 ​ 节点内容 搜索标签 CSS选择器 Bea ...

  3. C#-FTP

    /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件 ...

  4. mysql用户创建触发器权限不足跟参数log_bin_trust_function_creators

    问题描述 有业务反馈当前用户无法创建触发器和存储过程,让用户自己测试,该用户进行对表的增删改查等其他权限没有问题,这边用root用户查证,该用户拥有对当前库的所有权限,但是为什么就是创建不了触发器呢? ...

  5. Java中如何保证线程顺序执行

    只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程 ...

  6. springboot优雅的异常处理

    springboot全局异常处理 @ControllerAdvice 尽管springboot会对一些异常进行处理,不过对于开发者来说,这还不太便于维护,因此我们需要自己来对异常进行统一的捕获与处理. ...

  7. SparkSQL电商用户画像(四)之电商用户画像数据仓库建立

    六.  电商用户画像数据仓库建立 7.1  数据仓库准备工作 为什么要对数据仓库分层?星型模型 雪花模型 User----->web界面展示指标表 l    用空间换时间,通过大量的预处理来提升 ...

  8. 【js】Leetcode每日一题-二叉树的堂兄弟节点

    [js]Leetcode每日一题-二叉树的堂兄弟节点 [题目描述] 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不 ...

  9. [MySQL数据库之记录的详细操作:增、改、删、单表查询、多表查询]

    [MySQL数据库之记录的详细操作:增.改.删.单表查询.多表查询] 记录详细操作 增.删.改 增: insert t1(字段1,字段2,字段3) values (值1,值2,值3), (值1,值2, ...

  10. [MySQL数据库之表的详细操作:存储引擎、表介绍、表字段之数据类型]

    [MySQL数据库之表的详细操作:存储引擎.表介绍.表字段之数据类型] 表的详细操作 存储引擎 mysql中建立的库======>文件夹 库中建立的表======>文件 用来存储数据的文件 ...