查看原文
其他

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

CSDN App AI科技大本营 2020-10-16


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

编辑 | 刘静

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


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


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


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



以下为于璠演讲内容实录,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 折票开售,数量有限,扫码购买,先到先得!


推荐阅读

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

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存