华为开源自研AI框架MindSpore!自动微分、并行加持,一次训练,可多场景部署
乾明 发自 凹非寺
量子位 报道 | 公众号 QbitAI
华为的开源AI框架,来了!
刚刚,华为宣布正式开源自研深度学习框架MindSpore,代码已经上线。
MindSpore是一款支持端边云全场景的深度学习训练推理框架,主要应用于计算机视觉、自然语言处理等AI领域,面向数据科学家、算法工程师等人群,提供设计友好、运行高效的开发体验。
作为华为整体AI解决方案的一部分,MindSpore在提供昇腾AI处理器原生支持及软硬件协同优化,也支持通用CPU和GPU。
2019年8月份,华为轮值董事长徐直军介绍,MindSpore可以实现统一架构,一次训练,多处部署。而且,通过实现AI算法即代码,MindSpore可以显著减少模型开发时间。
MindSpore为什么能够实现这些能力?伴随着开源,它更多的特性,正在显露出来。
MindSpore四大功能
华为MindSpore首席科学家、IEEE Fellow陈雷介绍,当前开源的MindSpore主要具备基于源码转换的通用自动微分、自动实现分布式并行训练、数据处理、以及图执行引擎等功能特性。
整体架构如下图所示:
首先说自动微分,它是指计算机借助程序自动求出一个函数导数的通用方法。在深度学习中,通常指对网络模型的自动求导,通过梯度指导对网络权重的优化。
当前主流深度学习框架中,主要有三种自动微分技术:
一是以TensorFlow为代表的基于静态数据流图的转换,可利用静态编译技术对网络进行性能优化,但受制于数据流图的表达形式,不能灵活表达控制流;
二是以Pytorch为代表的基于动态图的转换,虽然可以使用户可以灵活的使用控制流。而其缺点是运行时开销高,且不能运用静态编译技术对计算图进行性能优化。
第三种是基于源码转换的通用自动微分,也就是MindSpore采用的技术。
这种方法,源以函数式编程框架为基础,以即时编译(JIT)的方式在中间表达上做自动微分变换,支持复杂控制流场景、高阶函数和闭包。
由于支持对控制流的自动微分,技术可以兼得上面两种技术的优点,即支持灵活的原生的控制流表达,同时也可以在执行前对网络做静态编译优化,生成高效的计算图,从而提高执行性能。
自动并行方面,陈雷介绍说,MindSpore能够用串行算法代码,自动实现分布式并行训练,同样直击当前模型研发过程中的痛点。
一般来说,在模型研发过程中,除设计模型自身的逻辑外,还需设计分布式并行训练的配置。
这是一个辛苦活。
开发者不仅要分析数据量、参数量、集群群网络拓扑等因素来确定模型切分策略;还要考虑切分后的子模型设备绑定等,来达到性能较优的分布式并行训练效果。
但其实,这些并行训练的优化细节与模型要实现的业务目标无关,最后却让开发者费尽了心思,“掉光了头发”。
尤其是逻辑复杂、参数量巨大的模型,想要人工找到最优的并行策略基本不可能。
华为想要解决这个问题。MindSpore提出一种全新的分布式并行训练模式,融合了数据并行、模型并行和混合并行。
具体来说,MindSpore构建了基于数据量、模型参数量、网络集群拓扑带宽等信息的代价模型(Cost Model),自动选择一种代价最小的模型切分方式,并绑定模型到设备执行,实现自动分布式并行训练。
整个过程,几乎不需要开发者参与,他们只需要专注于模型逻辑的开发就行了。
MindSpore中的数据处理功能名为MindData,用于完成训练过程中数据的pipeline处理,具备数据加载、数据增强、导入训练等功能,并提供了简单易用的编程接口,以及覆盖CV/NLP等全场景的丰富数据处理能力。
在数据处理的过程中,MindSpore还加强了与昇腾芯片的协同,针对昇腾芯片计算过程中消耗数据的速度,提供了优化。
陈雷说,这是确保昇腾芯片发挥更大性能的关键。
此外,MindSpore也支持分布式训练。
在分布式数据并行模式下,在每个批量batch之后,计算和模型信息会被分布到工作对象中,并提供了“切片与重采样”两种调整迭代数和分割数据的方法。
最后,承担MindSpore前端与底层硬件交互任务的是图引擎模块。
它是MindSpore内部进行图处理的模块,负责将管理引擎传下来的图进行一系列的图操作,最终转化为可以在底层硬件上直接运行的图,并对图中所用到的所有算子进行分配与管理。
在图处理过程中,图引擎会统一定义各插件模块需要提供的接口,具体的插件由不同的功能模块根据自己的能力提供,它会根据不同的插件提供的能力,实现最优的执行选择,来保证性能。
除了上述功能之外,MindSpore中还有深度优化的模型集市Model Zoo,可视化工具、模型评估工具等。
Model Zoo模型集市在今年第四季度,将会上线30+模型,支持昇腾和MindSpore协同,也会对模型个性化深度优化。
可视化工具提供单次训练过程可视化,以及多次训练的模型溯源对比功能,让开发者炼丹更加便利。
模型评估工具支持多种对抗样本生成算法,包括13种白盒、7种黑盒攻击算法,帮助开发者评估对抗 样本攻防能力。
在这些功能的加持下,MindSpore实现模型开发能力提升的同时,使用起来也颇为方便。
借助自动微分,轻松训练神经网络
易用性直接体现在操作上。
陈雷说,MindSpore为用户提供Python编程范式,用户可以用模块化形式对神经网络进行描述。
借助基于SCT的自动微分,用户还可以使用原生Python控制语法和其他一些高级API,如元组(Tuple)、列表(List)和Lambda表达。
他说,为了避免产生混淆,MindSpore尽可能减少引入新的接口和概念。在单机平台上训练简单的神经网络时,用户只需要了解张量、算子、单元、模型等就行了。
具体的过程是这样的:
从输入张量开始,它可以是常量输入张量或参数张量。然后用MindSpore提供的不同算子构造一个单元。最后,使用模型封装这个单元来训练神经网络。
或者,用户可以直接将输入数据传递给单元执行推理任务。
所以徐直军去年宣布MindSpore将要开源时说,MindSpore面向的不仅仅是深度学习开发者,也面向领域专家、数学家、算法专家等等在AI中角色越来越重要的人群。
同时,易用性不仅仅体现在模型开发上,在模型部署过程中也很方便——一次训练后,可多处部署,这也是为什么说MindSpore是一个全场景框架。
训练推理上,MindSpore不仅支持CPU、GPU,更针对华为昇腾芯片进行了优化。同时,MindSpore也是唯一支持昇腾芯片的框架。
这就意味着,在华为昇腾系列芯片的设备上部署AI应用,用MindSpore是一个比其他框架都更好的选择。
框架开源,华为培育AI开发生态
2018年,华为在全联接大会上,首次披露了完整的AI解决方案,MindSpore是其中重要一环。
2019年8月,华为正式发布昇腾910,同时推出全场景AI计算框架MindSpore,并表示要在2020年第一季度开源。
徐直军在发布会上说,这标志着华为已完成全栈全场景AI解决方案的构建,华为AI战略的执行进入了新的阶段。
今天华为兑现开源,并构建开发者社区,也是华为培育华为AI生态、推进AI战略执行的重要举措。
据陈雷介绍,MindSpore当前发布的是首个开源0.1.0-alpha版本,许可证是Apache 2.0,接下来将逐步完善。
同时,华为也披露了MindSpore开源社区的治理结构——由技术治理委员会、特别兴趣组以及工作组等社区组织组成。
其中,技术治理委员会由来自14名来自不同公司/学校/机构的代表组成,会依照社区章程开放治理,推动社区健康有序发展。
特别兴趣组,由主要特性模块的开发者自发组成,负责开发MindSpore相关开发工作。
工作组需要多个特别兴趣组的成员合作的工作,由开发者自发组成,并负责相关开发工作。
现在,MindSpore的代码已经上线,开源社区已经开放。
如果你有兴趣,不妨收好下面的传送门,体验一番,再给出评价:
MindSpore开源社区:
https://www.mindspore.cn
MindSpore代码托管:
https://gitee.com/mindspore
- 滴滴副总裁叶杰平离职,他是出行巨头的AI掌门人,战胜Uber中国的关键科学家2020-09-07
- 董明珠的格力空调卖不动了:上半年营收同比腰斩,24年来首次被美的反超2020-09-01
- 手机配件市场上的“隐形巨头”:80后长沙夫妻创办,IPO首日市值逼近600亿2020-08-31
- 寒武纪半年报:每天亏百万,销售力度提升营收反降11%,上市高峰市值跌去40%2020-08-30