华为黄之鹏:MindSpore全场景AI计算框架 | CCF-GAIR AI源创专场
- 2020 年 8 月 25 日
- AI

C++ 中完成的。你不能用 Python 写这个东西,因为要快。”],[20,”\n”,”24:\”rsOR\””],[20,”\n”,”24:\”dxB0\””],[20,”它通常与张量流或其他东西分开,广泛地说,你不能真正编程。”],[20,”\n”,”24:\”qAle\””],[20,”\n”,”24:\”BpdO\””],[20,”现在,即使人们告诉你,我们在做输入和语音识别,这通常是他们在生产中实际在做的。但对于论文,他们试图掩盖他们确实在做这件事的事实。”],[20,”\n”,”24:\”ewks\””],[20,”\n”,”24:\”n0Z1\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/j9eB541QWEblJ3kO.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”OK5c\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”Vn7T\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”还有另一种类型的解码器方法。我告诉你是为了完整性,尽管我认为它不是很实用。”],[20,”\n”,”24:\”1SkB\””],[20,”\n”,”24:\”t26o\””],[20,”它是当有某种递归的网络输出时,网络的输出又回到神经网络中,但它是每个字,而不是每个帧。”],[20,”\n”,”24:\”pwEa\””],[20,”\n”,”24:\”OHrq\””],[20,”不是每个字都有帧,所以单词没有连接到框架。它们没有连接到时间步骤。”],[20,”\n”,”24:\”Ta2X\””],[20,”\n”,”24:\”J9zB\””],[20,”现在,把这样的工作放入生产系统,这是非常危险的,因为它会给你带来疯狂的结果,特别是有一个很长的输入。”],[20,”\n”,”24:\”7iCC\””],[20,”\n”,”24:\”F3H1\””],[20,”有时它会给你奇怪的重复,或者它可以解码一些完全不同于真正输入的东西。”],[20,”\n”,”24:\”xsGI\””],[20,”\n”,”24:\”4WxH\””],[20,”所以我不推荐这种类型的系统,但是,人们会使用它们。所以我告诉你,它就在那里。”],[20,”\n”,”24:\”2OQe\””],[20,”\n”,”24:\”VAuj\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/6LT2ULI92q5opH1v.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”osGX\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”QT9b\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”这些方法中的大多数,除了非常简单的贪婪搜索,”],[20,”在训练之间存在某种不匹配”,”1:\”%23f9eda6\””],[20,”。这很奇怪。”],[20,”\n”,”24:\”XWop\””],[20,”\n”,”24:\”HbIK\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/HNC5AlLv3BAdveHF.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”4Rd9\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”BMjX\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”因为你在训练中没有所有的 C++ 代码,它不会以那种方式与张量流交互,尽管它是通过训练。”],[20,”\n”,”24:\”hYQQ\””],[20,”\n”,”24:\”b6YS\””],[20,”所以这不是理想的。有时人们会使用技巧来修复不匹配。比如如果你训练一个 CTC 模型,然后你用语言模型来编码。”],[20,”\n”,”24:\”mMuW\””],[20,”\n”,”24:\”89g5\””],[20,”你必须插入一个特殊的空白,以避免得到太多的单词。”],[20,”\n”,”24:\”TILY\””],[20,”\n”,”24:\”jvru\””],[20,”现在这是我试图用 K2 框架解决的问题。”],[20,”\n”,”24:\”adc5\””],[20,”\n”,”24:\”0mi1\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/GA4mC6Bz2UhYoJ6x.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”k0ns\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”YBQ2\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”还有另一个问题。我也试图解决一个单独的问题,这些递归方法中的一些,还记得我告诉过你们的第三种类型,关于符号回到网络中的地方,但它仍然是帧级的,而不是字级的。”],[20,”\n”,”24:\”Ss2p\””],[20,”\n”,”24:\”l8ff\””],[20,”所以这些方法,神经网络知道过去的字的序列是什么,但它不能明确地比较。我喜欢这个还是这个?它不知道其他的单词序列也会要考虑。”],[20,”\n”,”24:\”4gpz\””],[20,”\n”,”24:\”WpG2\””],[20,”如果能够以某种方式,让神经网络对可能的输出,或可能的输出的整个集合进行操作,那就太好了。这里的部分目标是获得良好的置信度。我们大多数的置信度都很差。就像它们校准得很差一样。”],[20,”\n”,”24:\”XERr\””],[20,”\n”,”24:\”8f9c\””],[20,”我知道你们可能不是所有人都明白。无论如何,这就是 K2。这是这个项目的名字,也是一座山,它的一半在中国,另一半在巴基斯坦。”],[20,”\n”,”24:\”ge71\””],[20,”\n”,”24:\”rtEe\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/bfNFE9yJMRHvSKCd.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”Gl0Z\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”6SyV\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”这是 K2 项目的结构,我们现在主要在做这个。”],[20,”\n”,”24:\”QXvH\””],[20,”\n”,”24:\”tHKM\””],[20,”我们还没有完成大部分的 Python 包,它基本上是一个 C++ 后端,我们有 pybind11 的代码,使它在 Python 中可见。”],[20,”\n”,”24:\”X2Tg\””],[20,”\n”,”24:\”06eG\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/otZ3zmrxQOpQ41GP.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”aeas\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”LJ0T\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”我们的目标是有一个单独的前端,就像 PyTorch、TensorFlow 一样。”],[20,”\n”,”24:\”h8uC\””],[20,”\n”,”24:\”5x5B\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/9bcNhuzdGDlBIp1a.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”413s\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”wGU2\”|7:0|linespacing:\”150\””],[20,”是的,所以总体愿景是我们想要实现高性能的 ASR ,在那里,你不会有 Python 和 C++ 之间的这种不匹配。”],[20,”\n”,”24:\”gNhe\””],[20,”\n”,”24:\”MR1r\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/MtfrR2plyuc1tthH.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”ngSV\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”Qwoh\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”所有这些复杂的图形操作,都可以用一个漂亮、干净的 Python 接口,用一种非常通用的加权有限状态自动机的框架来完成。”],[20,”\n”,”24:\”YBal\””],[20,”\n”,”24:\”IzSz\””],[20,”它的代码库要小得多,比 Kaldi 灵活得多。我们希望人们能基于这个工具发明下一代的 ASR 算法。”],[20,”\n”,”24:\”JyJq\””],[20,”\n”,”24:\”UiY0\””],[20,”这个工具包将使我们有可能,把所有与语音相关的部分,分离到一个不同的代码库中,这个代码库叫做 lhotse。”],[20,”\n”,”24:\”d2qn\””],[20,”\n”,”24:\”2cNl\””],[20,”我希望到 9 月我们能有一个简单的演示,尽管它不会完全完成。”],[20,”\n”,”24:\”Af4u\””],[20,”\n”,”24:\”kbjO\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/CgLStDeK5kX3fOpC.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”sSg3\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”qaJe\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”所以我们不只是扩展 Kaldi 的原因,是我觉得这个项目太大了。它有太多的 C++ 代码,如果再加上 Python,会变得太复杂。所以我决定做一个全新的。”],[20,”\n”,”24:\”HRmr\””],[20,”\n”,”24:\”Y2ci\””],[20,”好的,谢谢你们。”],[20,”\n”,”24:\”oivL\””]]”>AI研习社按:
8 月 7 日 – 9 日,由中国计算机学会(CCF)主办,雷锋网、香港中文大学(深圳)承办,鹏城实验室、深圳市人工智能与机器人研究院协办的第五届 CCF-GAIR 2020 全球人工智能与机器人峰会如期落地。
8 日,峰会与 AI 研习社、OpenI 启智社区联合举办“AI 源创专场”,重点讨论了新基建背景下,国内开源创新建设将催生的新势能,以及其将引发和促进的新产业机会。
AI源创专场现场迎来了华为计算开源生态部副总监黄之鹏。一年前,华为发布了全场景 AI 计算框架 MindSpore,并同时公布了 2020 年的开源计划。今年 3 月底,开发者们如期迎来了MindSpore全面开源。MindSpore 可以适应端、边、云多个场景,并且与华为昇腾 AI 处理器的协同优化能带来效率提升,黄之鹏就此发表演讲。
(华为计算开源生态部副总监,黄之鹏)
黄之鹏在演讲中介绍了 MindSpore 的功能、特性以及在华为的业务落地情况。
MindSpore是提供面向端、边、云全场景的统一API,对开发者提供一些非常友好的特性。目前 MindSpore在华为的业务上已经有了落地,内部有很多的实验室已经大规模的应用了 MindSpore 的框架。华为手机搭载的 HMS 4.0开始已经搭载 MindSpore 的端侧推理能力,主要支撑的是 ML-kit使能的手机App。
除了自动微分、自动并行、二阶优化、量化训练、图算融合等关键特性外,MindSpore 也提供了可视化工具,比如图像模式、直方图、数据溯源等等,尽可能的直观给工程师呈现AI实验的过程和细节;以及模型攻击评估工具,帮助开发者能够评估其所开发的MindSpore模型的安全性和鲁棒性。
黄之鹏表示 MindSpore 和国内其他已有的深度学习框架开源项目不太一样,采用了比较开放的架构,其中技术治理委员会(TSC)是由14名来自中美欧的专家组成。采用社区治理架构正是因为华为希望 MindSpore 能成为一个面向全球的开源社区,而不仅局限在一个区域内。
以下为黄之鹏的现场演讲内容,AI研习社进行了不改变原意的编辑及整理:
谢谢主持人,MindSpore是华为3月28日开源的框架,华为的解决方案是全栈式的解决方案,包括了我们公有云提供的框架,我们的CANN使能层和自研的昇腾硬件。
下面我介绍一下MindSpore的特性,总体来说,MindSpore是提供面向端、边、云全场景的统一API,我们提供一些比较新的,对于开发者非常友好的特性。大家如果了解深度学习框架这些年的发展趋势,其实框架现在主要集中在编译优化和软硬结合这两块,对于MindSpore来说,编译层面大量的优化也是我们的特点之一。
和硬件的结合上,MindSpore代表软硬结合的思路,具有面向系统进行设计特性。
MindSpore是比较年轻的社区,我们代码主要托管在码云,通过自己做的小机器人,同时同步到Github,方便国内、国外的开发者。我们也制作了很多版本宣传视频和教学视频,希望通过各种渠道帮助开发者更快的了解我们的框架。
MindSpore在华为的业务上已经有了落地,我们内部有很多的实验室已经大规模的应用了MindSpore的框架。华为手机搭载的HMS4.0开始已经搭载MindSpore的端侧推理能力,主要支撑的是ML-kit所使能的手机App。在电信领域,华为支持了很多电信领域AI结合的尝试,主要是我们的NAIE解决方案。
今天下午讲了很多的框架,为什么又出一个框架,为什么又要学习一个框架?对于华为来说,我们做框架并不是单纯为了解决软件的问题,当然软件是很大的问题,对于华为来说,主要是全栈的思考,从模型到数据到应用的部署,到跟算法工程师流水线的使能,再到硬件,我们希望这一整套都可以提供一套思路,帮助或是和业界一起往前走,做出一些创新。
下面来介绍MindSpore的几个主要特性:
MindSpore的自动微分
自动微分对于深度学习框架来说,并非是新事物。TensorFlow的自动微分主要是基于图的,其缺点是,现在大多数的框架都是Python的原生编程,TF的自动微分,尤其对于很多的科研都需要二阶、三阶的计算,是非常复杂的。Pytorch主要是通过Python语言的自身特性,通过运算符重载来实现自动微分,但其缺点在于运行时开销较大。MindSpore采用基于源代码的自动微分技术,在让开发者可以用Python开发模型的同时,通过我们的编译优化技术达到自动微分,生成对硬件优化友好的图IR的源代码,整体的执行效率非常高。
所有做分布式、大集群都会遇到并行的问题,从传统的数据并行,到后来出现模型并行,以及Pioeline并行等方法,都被用来解决此类问题。MindSpore的自动并行借助昇腾硬件的优秀能力,可以为开发者提供自动并行的能力,不需要开发者手动去写模型和数据切分及运行的策略。
刚才讲的是我们称之为前端的能力,再往下走是偏硬件或是利用硬件能力的能力,主要是六大功能:Shape推导、引擎划分,整图拆分、边界标识,格式转换,算子融合,编译、Stream分配、Task编译,图加载至硬件。带来显而易见的好处是,比如MindSpore可以让开发者只通过一条语句,来实现动态图到静态图非常便利的切换,方便大家在研究和生产等不同环境的调试和部署。
我们也提供一些比较好用的工具,MindSpore提供图像模式、直方图、数据溯源,总而言之,尽可能的直观给工程师呈现AI实验的过程和细节。另外我们提供的工具,模型写出来被恶意的人使用会达到完全不一样的效果,模型会模仿各种各样的攻击,帮助开发者评估MindSpore开发的模型是否有足够好的特性。
MindSpore的图算融合,实际上可以理解为两层,一个是图层,后端有AKG做算子的融合,小算子组成大算子,对性能的优化有比较好的提升,我们应用了多面体技术(Polyhedral)去做Auto schedule。
MindSpore的混合异构,比较便捷的实现混合资源高效的任务执行。还有一些特性没有详细介绍,比如说量化训练、二阶优化等,都是可以做到比同类开源项目更好的性能。还有一些我们在做的更前端、更前沿的尝试。
MindSpore和WebAssembly的结合,主要场景目前是在浏览器里进行推理任务,为什么要用浏览器?在医生、金融等场景,不管是PC侧还是手机侧的浏览器,都可运行推理任务。
WebAssembly (WASM)是很多大型厂商关注的新方向,这个技术本身不新,WebAssembly是希望在浏览器有提供原生运行性能,很多的开源合作,很多大公司都在尝试,看能不能从浏览器里推广出来,不仅仅是跑在浏览器里面,也可以跑到服务器上,跑到PC上,边缘的设备上。由于WebAssembly是一种堆栈式虚拟机,其安全性是非常好的,像金融、医疗这样对安全性的要求非常高的场景,会有很多的需求。
我们团队在做的一个尝试,最近已经做了一个小型尝试,加强TVM对WASM及Rust的支持,我们想把TVM很好的能力运用起来,希望能管理起来。
eBPF也是目前比较前沿的技术,提供了灵活的内核虚拟机。比如对网络调优的时候,通常需要走大量的内核函数调用,完成TCP/IP完整协议栈的每一层的检查。而通过eBPF,则可以把包直接加载在其内核虚拟机分配的寄存器中,进行非常快速的检查。我们将eBPF这样的工具应用在AI领域,希望可以帮助我们更好的理解模型训练、推理时到底发生了什么,到底触发了什么,到底在做些什么东西,eBPF只是一个工具,我们希望这个路径打开更多的监测能力。
必须要提的是,除了刚才介绍的这些特性之外,MindSpore和国内其他已有的社区不太一样的是,我们还是采用了比较开放的架构,MindSpore有两层的治理架构组成,技术治理委员会(TSC)是由14名来自中美欧的专家组成。采用社区治理架构也是我们希望MindSpore不仅局限在某个区域内的开源项目,希望MindSpore能够成为面向全球的开源社区。
我们非常欢迎开发者加入到我们社区的开发,可以选择你感兴趣的SIG组,他们每个月基本都会开例会,例会录屏都会上传到B站。欢迎大家到社区成立针对某一个特性的SIG组或WG组。我们现在为了方便开发者开发MindSpore,主要是通过华为的ModelArts的服务,目前还有公测,欢迎大家申请。
码云:gitee.com/mindspore
GitHub:github.com/mindspore-ai

