当前位置: 首页 > 编程日记 > 正文

华为于璠:新一代AI开源计算框架MindSpore的前世与今生 | AI ProCon 2019


演讲嘉宾 | 于璠(华为MindSpore资深架构师)

编辑 | 刘静

出品 | AI科技大本营(ID:rgznai100)


9月,2019中国AI开发者大会(AI ProCon 2019)在北京举行。在AI开源技术专题中,华为MindSpore资深架构师于璠发表了《MindSpore创新技术介绍》主题演讲。

AI从行业研究到场景应用存在着巨大鸿沟,开发门槛高、运营成本高、部署时间长都是显而易见的业界挑战。因此,新编程范式、新执行模式、新协作方式的技术创新,都在促使着MindSpore跨越应用鸿沟,助力普惠AI。

在演讲中,于璠详细介绍了新一代AI开源计算框架MindSpore的设计理念:第一,新编程范式,AI算法即代码,降低了AI开发门槛;第二,新执行模式,Ascend Natave的执行引擎;第三,全场景按需协同,实现了更好的资源效率和隐私保护。

640?wx_fmt=jpeg


以下为于璠演讲内容实录,AI科技大本营整理(ID:rgznai100):

我在华为是做全场景AI计算框架的架构师,我们计算框架的名字是MindSpore,这个MindSpore英文的意思是“思想的包子”。大家也许听过华为起了一堆山海经神兽的名字,包括昆仑、麒麟等等,但最后我们还是采取了这个英文名字。

我是计算框架的架构师以及创新技术的负责人,这次的分享主要分三大部分:第一,华为AI的整体战略;第二,计算框架的设计理念、意欲解决的问题以及达到的效果;第三,讲讲其中的关键技术。

一、华为AI的整体战略

在去年10月份的华为全联接大会上,董事长曾对外发布了华为的整体战略,这个战略来自于我们自己的业界老师、工业界小伙伴和我们邀请的分析师的综合分析,大概涵盖10个原动力,从算法、数据、框架、平台、系统到硬件全场景等等。

第一是训练的问题。业界的厂商和机构都不太敢于挑战深度学习的训练问题,因为它不仅仅是硬件的问题,硬件、人力等各方面都要配合才能良好解决,但它又是基础技术的制高点。如果我们能够把这个搞定,就解决了一个很大的技术难题。第二个是由训练派生出来的算力问题。现在各大厂都在此方面发力,CPU、GPU、Facebook等都在做这件事情。第三个是在全场景中的应用,也包括我们之前提到的小米端侧应用,其实目前大部分都仍是在云侧、端侧的探索。

第四是算法问题,现在大部分算法还停留在八十年代的理论层面,我们还需要再往前走很多。第五,现在有很多的论文在不断产出,但有一个现象是论文的代码和思想难以复制提取,在实际应用时有诸多问题。第六个,促使AI在全产品中作为主导的因素还没有完全出现。第七与其他的数据库、编译器、边缘计算、区块链等技术的结合也没有完善。第八,人力的问题。

基于以上这些问题,华为自己制定了战略,从基础研究全栈方案、投资开放生态到人才培养、解决方案增强以及内部效率提升。在计算机视觉、自然语言处理、决策推理等领域,也在构筑数据高效、能耗高效、安全可信、面向云端等全场景的、独立的、协同的全栈解决方案。

目前我们的技术解决方案整体看来比较简单,既要拿下上层的应用,也要研发下面的硬件,还需要屏蔽掉硬件的复杂性。我们构建了自己的MindSpore应用平台,包含从上到下所有自研的芯片使能、IP等等。仅在全场景方面,华为就已有五款芯片:云、边缘、摄像头、手机、IoT设备上全都是自己的芯片,这是很大的工作量。

MindSpore事实上对标的是Tensorflow,但和后者是完全不一样的东西。在8月23日的深圳发布会上,除了昇腾910芯片以及全场景AI计算框架,我也亲自参与了MindSpore的发布。

昇腾910芯片的算力大概是256T,是GTU100的2倍。在算力2倍基础之上加上我们的软件,可以在真正场景下发挥出超过2倍的效果,真正做到软硬件协同。另外,去年和今年上半年商用的华为荣耀9X以及nova5手机都已经用上了我们自己的芯片,还有家里的摄像头、机顶盒、云上服务平台都已经对外商用了。
除了整体解决方案的商用,MindSpore也在很多场景下实现了商用,包括手机上的AI应用、行业上的办公、推荐、搜索、无人车等等。

二、新一代AI开源计算框架MindSpore

下面,讲讲为什么做MindSpore。有两大动力:第一是技术战和贸易战的背景下,华为必须要有自主可控的全场景的计算框架;第二是目前的计算框架仍然存在着大量亟需解决的问题,开发门槛高、运行成本高、部署难度大等等。
基于上面发现的这些问题,华为提出了自己的设计理念:
(1)提供一种新的编程范式。我们的框架用户主要是学校AI算法的开发者,以及系统调优的人,因此在学校和学术界的影响是比较大的。想要在写算法的同时感知硬件的实现,最好的方案是有一个可以直接实现的公式。所以我们希望创建一个基于数学原生表达的编程新范式,只需要懂数学就可以了。

现在的深度学习AI仍处于黑盒状态,调试非常困难:一是框架要突破;二是框架需要提供足够多的调试手段,类似于断点功能和静态图无缝切换的类似功能;三是并行,Tensorflow就是指定设备把模型切好或者数据切好写进去,这对算法人员是比较难的,不仅指定难,还要切得好,懂模型、计算代价、通信代价等等,除了代码量,更多的是智力上的消耗。针对上面的三个挑战我们提出了这个编程范式。

(2)执行新模式。既然我们有这么强的算力,算力同时支持常量、向量、标量、丈量的计算,模型计算包含数据处理、控制、真正的执行,全都可以下放到硬件上,效率会非常高。在分布式并行时开销非常大,在算力非常强的情况下控制开销问题更容易突显出来,我们怎么把控制开销降下去也是执行上的一个难点。

(3)全场景按需协同。一是安全的问题,二是端边云有自己不同场景的目标要求,比如在端侧要求功耗第一、体积第二、精度第三、速度第四,但是在云侧可能是精度第一、其他排后了,它的目标是在不同变化的,这是一个挑战。另外,不同硬件的处理精度和处理速度都有不同,从上面的目标到底下的约束都不一样,我们需要有自己按需协同的框架以及类似于autoML的技术配合才能把它做好。

基于上面的三个设计理念,我们研发了自己的MindSpore的核心架构,核心分为四层:按需协作分布式架构、调度、分布式部署、通信库都在同一层,再往下是执行高效层(包括数据模型下沉),另外是并行的Pipeline执行层和深度图的优化、算子的融合,再上层有MindSpore自己的表达。最终实现的效果是:开发算法即代码、运行高效、部署态灵活形成一体化。

再讲讲效果。第一,高效开发调试。我们找了个Transformer模型的例子,用自己的框架开发大概是2000行代码,用其他的框架大概是2500行,从代码行数看有20%的降低,但在效率上有50%以上的提升。二是代码的自动微分,我们有一个自动算子去完成,只要写几行代码,就会生成高效执行的算子库;三是调试方面要做到动静结合,类似于Tensorflow这样,代码上更简化、更易用。第二,高效运行。现在ResNet50网络性能提升了快3倍,换算整体吞吐利用每秒可以处理800张emagesnet图片,业界的水准大概是200张。这里利用了软硬件协同在一起的技术。

三、关键技术解读

接下来给大家讲讲我们设计时的更深入思考。

第一,新编程范式。大家最常用的Tensorflow是基于图的方式,极为高效,但是它在表达上不具备特别完备的数据结构或者说是中间表达——比如if、while、go to等句正向的表达是很困难的,反向的表达就更困难。另外,对高阶的表述也很困难。

像pytorch用算子符重载的方式,反向一步步把所有的算子替换掉,这个方式是最直白的,但是显而易见效率也是低下的。代码没有什么学习成本,像源码转换、编译器技术、抽象语法树等和编译过程中所有优化都能用上,等于站在巨人肩膀上做这件事情。从易用性和性能上都具有很强的先进性,我们MindSpore也是采用这个方式往下走的。

我们基于这个思想进行编写编程范式的方案,第一是底下有自己的算子库,这里面少了自动化算子生成工具,在中间有编译这层可以复用编译器所有的技术在这里帮我们做,但是在深度学习场景下这里有独到的东西加强,如果用Python就用Python,如果用Java就用Java,这些是很容易转换的。

第二,再讲讲新编程范式的高性能。复用编译器优化能力代码自动优化,算子自动生成时用到高性能优化器,多面体优化器能够帮助找到最好的方式,内存的优化也可以自动化完成。另外,在软硬协同方面我们做得比较好。算子用了这三个技术,生成上完全可以自动化生成,只要简单的写代码就可以了。

最后带来的好处是易调试,现在我们达到的目标是跟业界框架基本处于持平。我们可以用包的方式把模型栈展开,大家随时查看都没有问题。还有动静结合的转换,可能只需要一行代码,但是做Tensorflow转换时比较麻烦一些,每次转换都要写很多初始化的东西,这对大家来说也是比较费劲的一个东西。

总结一下编程新范式,跟业界主流的相比,它的通用性稍微差一点,而通用性现在面临这些问题:场景、模型越来越多,高阶优化器越来越多;第二是性能,毕竟它不完备,针对某些特定场景要求是高的;然后是算子算力,我们用算子自动优化生成的技术性能是很高的;第四是可一致性,图和源到源的转换比较好了解算子符实际承载的问题,可微分性高阶求导比较困难。

整体来看,这个技术流派有相当的技术先进性,但是里面的挑战比较大,所以华为想在这方面继续发力。

除了编程,我们在执行这块也做了比较多的工作。当我们的算力越来越强,控制面和数据增强就会变成巨大的瓶颈点。举例来说,现在数据增强的算子和hardwork这套算子库以及卷积和算子执行都下到库上。另外,软件会做很多算子融合功能,把它们从软件上再提升一次性能,整体上会相比于原始方式性能提升10倍以上,这里面还没有跟业界去对比过。

我们还做了去中心化的调度,先基于方式把分布和梯队同步的量以及执行速度规律找到,然后自适应把策略写到进行AllReduce同步,直接下沉到设备不会在上面去控制。因为在上面控制时,做完一次梯度要上报一次,看看它现在的情况怎样,需要干什么都是需要上面决策的,现在都不需要都是底下自主决策。整个走完就发现我们的开销非常小,拖尾只有2毫秒。

在并行方面,Tensorflow去年给了一个接口让用户去定义不同的维度,这种方式是正常的演进方式,但是想达到最终自动化的目标还是稍微有一点距离。过程中是一个张量过一个算子,不管上面是什么东西,下来都是这样子的,我们从这个地方开始自动化并行,输入的张量如果有100维,我们就切这100维,顶上是什么数据模型都先不管我们就从这去切。

因为硬件是我们自己的,通信、计算、数据都是自己的,cost模型我们也有,这样就会形成一种局面:上面的模型怎么切我知道、切的维度我知道、cost模型我知道了,那么做优化的人就会非常感兴趣。验证性能都知道了,就可以用很多优化算法,包括启发式的、强化学习的、动态规划等等都可以来用了。我们自己也在用动态规划的方式去找我们最佳的切分点。当然,我们除了自动化给用户提供了更底层的接口去切,如果经验很强,也是有入口的。

最后一个是新的写作方式,这主要是面对的几个主要挑战,关键技术是统一模型的IR应对不同语言场景上层差异,自己定义数据结构把它们全部兼容过来。底下的硬件是我们自己的,软硬协同也是在的。最后是把整个联合起来,这是业界最火的方向。

在上个月23号发布会上,董事长讲到大概在明年Q1时会把MindSpore开放出去,后面会跟大家一块去做这些技术的探索场景的应用。

(*本文为 AI科技大本营原创文章,载请微信联系 1092722531


精彩推荐



2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。

即日起,限量 5 折票开售,数量有限,扫码购买,先到先得!

640?wx_fmt=png

推荐阅读

  • 刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019

  • 估值被砍700亿美元后,Waymo发重磅公开信:即将推出全自动驾驶打车服务

  • 首届中文NL2SQL挑战赛:千支队伍参赛,国防科大夺冠

  • 图灵奖得主Bengio再次警示:可解释因果关系是深度学习发展的当务之急

  • 技术领域有哪些接地气又好玩的应用?

  • Python新工具:用三行代码提取PDF表格数据

  • 国产嵌入式操作系统发展思考

  • 2019 年诺贝尔物理学奖揭晓!三得主让宇宙“彻底改观”

  • 公链故事难再续?

640?wx_fmt=png

你点的每个“在看”,我都认真当成了AI

相关文章:

TCC分布式事务的实现原理

目录 一、写在前面 二、业务场景介绍 三、进一步思考 四、落地实现TCC分布式事务 (1)TCC实现阶段一:Try (2)TCC实现阶段二:Confirm (3)TCC实现阶段三:Cancel 五、总结与思考 一、写在前面 之前网上看到很多写分布式事务的文章,不过…

Brute Force算法介绍及C++实现

字符串的模式匹配操作可以通过Brute Force算法来实现。字符串匹配操作即是查看S串(目标串或主串)中是否含有T串(模式串或子串),如果在主串中查找到了子串,则模式匹配成功,返回模式串中的第一个字符在主串中的位置;如果未找到&…

使用Go内置库实现简易httpbin功能

简介 通过学习「Go语言圣经」的入门部分,了解到 go 内置库里提供了一个简单的 http 功能。于是想模拟下httpbin[1]的 get 方法显示 header 头信息的功能来练手。 本人 Go 初学小白,为了练习只是简单的实现了请求 header 的 JSON 格式展示,跟 …

Google图嵌入工业界最新大招,高效解决训练大规模深度图卷积神经网络问题

导读:本文主要介绍Google发表在KDD 2019的图嵌入工业界最新论文,提出Cluster-GCN,高效解决工业界训练大规模深度图卷积神经网络问题,性能大幅提升基础上依靠可训练更深层网络达到SOTA效果,并开源了源代码。作者 | yyl4…

经典树型表结构之SORT_NO

为什么80%的码农都做不了架构师?>>> 在以下情况需要对经典树型表的sort_no进行重排序:1、插入节点(插入子树),需调整节点后所有sort_no;2、删除节点(删除子树),需调整节…

Ubuntu14.04上安装TensorRT 2.1操作步骤

在Ubuntu14.04 上安装TensorRT2.1有两种方法:(1)、通过.deb直接安装;(2)、通过Tar文件安装。这里通过Tar文件安装。安装步骤:1. 安装CUDA 8.0,可参考: http://blog.csdn.net/fengbingchun/article/details/53840684 ;…

学会这门编程知识,可能决定你能进什么样的企业

对于程序员来讲,很多技术真正掌握之后,都能影响甚至说改变一个人的命运,比如:python、AI、DL、算法等等,但是如果只让你选择其中的一项基础知识,你会选择哪个呢?如果是我, 我会选——…

雷林鹏分享:MySQL 及 SQL 注入

MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题。 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符。 所谓SQL注入,就是通过把SQL命令插入到Web表单递…

dedecms网站文章内容按自定义排序的方法

标签dede:arclist的排序是通过orderby来指定的,如下: {dede:arclist orderby’排序字段’ } {/dede:arclist} orderby’sortrank’ 文档排序方式 orderby’hot’ 或 orderby’click’ 表示按点击数排列 orderby’sortrank’ 或 orderby’pubdate’ 按…

有了这套模板,再不担心刷不动LeetCode了

(图片下载自视觉中国)作者 | 李威来源 | https://www.liwei.party/整理 | 五分钟学算法(ID: CXYxiaowu)正文下面的动画以 「力扣」第 704 题:二分查找 为例,展示了使用这个模板编写二分查找法的一般流程。b…

一线互联网技术:Java工程师架构知识系统化汇总,面完45K!

根据高端招聘平台100 offer发布的Java人才盘点报告,在过去的2018年,Java仍然是最流行、招聘供需量最大的技术语言。在此基础上,互联网行业针对 Java 开发的招聘需求,也是近年技术类岗位供需量最大,且变化最稳定的。企业…

C++中局部类的使用

类可以定义在某个函数的内部,我们称这样的类为局部类(local class)。局部类定义的类型只在定义它的作用域内可见。和嵌套类不同,局部类的成员受到严格控制。局部类的所有成员(包括函数在内)都必须完整定义在类的内部。因此,局部类的作用与嵌套…

按键驱动的恩恩怨怨之概述

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/23946487 研究按键驱动已经有几天了,尽管是0基础的驱动,可是当中包括的知识确实不少。接下来的几篇文章我会分别从浅入深的分析按键驱动。希望能对大家有所帮助。因为屌…

C++中嵌套类的使用

一个类可以定义在另一个类的内部,前者称为嵌套类(nested class)或嵌套类型(nested type)。嵌套类常用于定义作为实现部分的类。嵌套类可用于隐藏实现细节。嵌套类是一个独立的类,与外层类基本没什么关系。特别是,外层类的对象和嵌套类的对象是…

挑战弱监督学习的三大热门问题 AutoWSL2019挑战赛正式开赛

AutoWSL2019作为11月17-19日亚洲机器学习大会(ACML)主会议竞赛单元之一,由第四范式、ChaLearn、RIKEN和微软联合举办,其中竞赛分享和颁奖将与大会WSL-Workshop共同举办。据悉,AutoWSL是继AutoCV、AutoCV2、AutoNLP、Au…

数据连接池的工作机制是什么?

以典型的数据库连接池为例: 首先普通的数据库访问是这样的:程序和数据库建立连接,发送数据操作的指令,完成后断开连接。等下一次请求的时候重复这个过程,即每个请求都需要和数据库建立连接和断开连接,这样当…

apkplug插件托管服务简化与简介-05

2019独角兽企业重金招聘Python工程师标准>>> 本文基于TuoClondService1.1.0讲解 apkplug插件托管服务是提供给开发者一个远程发布插件的管理平台,但v1.0.0版本接口调用有些复杂我们在v1.1.0版本中着重对其进行了简化 与封装,使开发者能更简…

SpringBoot-JPA入门

SpringBoot-JPA入门 JPA就是Spring集成了hibernate感觉。 注解,方法仓库(顾名思义的方法,封装好了,还有自定义的方法)。 案例: spring:datasource:url: jdbc:mysql://localhost:3306/springboot?useUnicodetrue&c…

PCA、LDA、MDS、LLE、TSNE等降维算法的Python实现

整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】网上关于各种降维算法的资料参差不齐,但大部分不提供源代码。近日,有人在 GitHub 上整理了一些经典降维算法的 Demo(Python)集合,同时给出了参考资料的链接。PCA…

C++11中enum class的使用

枚举类型(enumeration)使我们可以将一组整型常量组织在一起。和类一样,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型。 C包含两种枚举:限定作用域的和不限定作用域的。这里主要介绍限定作用域的。不限定作用域的使用可以参考: ht…

Windows下Mysql主从配置(Mysql5.5)

主数据库IP:192.168.3.169从数据库IP:192.168.3.34主数据库配置my.inin:在[mysqld]下添加配置数据:server-id1 #配一个唯一的ID编号,1至32。log-binmysql-bin #二进制文件存放路径#设置要进行或不要进行主从复制的数据库名,同…

K-最近邻法(KNN) C++实现

关于KNN的介绍可以参考: http://blog.csdn.net/fengbingchun/article/details/78464169 这里给出KNN的C实现,用于分类。训练数据和测试数据均来自MNIST,关于MNIST的介绍可以参考: http://blog.csdn.net/fengbingchun/article/deta…

AI大佬“互怼”:Bengio和Gary Marcus隔空对谈深度学习发展现状

编译 | AI科技大本营编辑部出品 | AI科技大本营(ID:rgznai100)去年以来,由于纽约大学教授 Gary Marcus 对深度学习批评,导致他在社交媒体上与许多知名的 AI 研究人员如 Facebook 首席 AI 科学家 Yann LeCun 进行了一场论战。不止 …

Centos7多内核情况下修改默认启动内核方法

1.1 进入grub.cfg配置文件存放目录/boot/grub2/并备份grub.cfg配置文件 [rootlinux-node1 ~]# cd /boot/grub2/ [rootlinux-node1 grub2]# cp -p grub.cfg grub.cfg.bak [rootlinux-node1 grub2]# ls -ld grub.cfg* -rw-r--r--. 1 root root 5162 Aug 11 2018 grub.cfg -rw-r…

TensorRT Samples: MNIST

关于TensorRT的介绍可以参考: http://blog.csdn.net/fengbingchun/article/details/78469551以下是参考TensorRT 2.1.2中的sampleMNIST.cpp文件改写的实现对手写数字0-9识别的测试代码,各个文件内容如下:common.hpp:#ifndef FBC_TENSORRT_TE…

网红“AI大佬”被爆论文剽窃,Jeff Dean都看不下去了

作者 | 夕颜、Just出品 | AI科技大本营(ID:rgznai100)【导读】近日,推特上一篇揭露 YouTube 网红老师 Siraj Raval 新发表论文涉抄袭其他学者的帖子引起了讨论。揭露者是曼彻斯特大学计算机科学系研究员 Andrew M. Webb,他在 Twit…

数位dp(求1-n中数字1出现的个数)

题意:求1-n的n个数字中1出现的个数。 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为已降);常规的记忆化搜…

TensorRT Samples: MNIST API

关于TensorRT的介绍可以参考: http://blog.csdn.net/fengbingchun/article/details/78469551 以下是参考TensorRT 2.1.2中的sampleMNISTAPI.cpp文件改写的实现对手写数字0-9识别的测试代码,各个文件内容如下:common.hpp:#ifndef FBC_TENSORR…

免费学习AI公开课:打卡、冲击排行榜,还有福利领取

CSDN 技术公开课 Plus--AI公开课再度升级内容全新策划:贴近开发者,更多样、更落地形式多样升级:线上线下、打卡学习,资料福利,共同交流成长,扫描下方小助手二维码,回复:公开课&#…

Gamma阶段第一次scrum meeting

每日任务内容 队员昨日完成任务明日要完成的任务张圆宁#91 用户体验与优化:发现用户体验细节问题https://github.com/rRetr0Git/rateMyCourse/issues/91#91 用户体验与优化:发现并优化用户体验,修复问题https://github.com/rRetr0Git/rateMyC…