「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图

机器之心报道
机器之心编辑部
千呼万唤始出来——3月28日 , 华为的全栈全场景AI计算框架MindSpore终于正式开源了 。
今年的华为开发者大会HDC2020上 , 除了昇腾、鲲鹏等自研芯片硬件平台之外 , 最令人期待的就是深度学习框架MindSpore的开源了 。 今天上午 , 华为MindSpore首席科学家陈雷在活动中宣布这款产品正式开源 , 我们终于可以在开放平台上一睹它的真面目 。 作为一款「全场景AI框架」 , MindSpore是华为人工智能解决方案的重要组成部分 , 与TensorFlow、PyTorch、PaddlePaddle等流行深度学习框架对标 , 旨在大幅度降低AI应用开发门槛 , 让人工智能无处不在 。 MindSpore是一款支持端、边、云独立/协同的统一训练和推理框架 。 华为希望通过这款完整的软件堆栈 , 实现一次性算子开发、一致的开发和调试体验 , 以此帮助开发者实现一次开发 , 应用在所有设备上平滑迁移的能力 。 原生支持AI芯片 , 全场景一致的开发体验——除了这些我们早已知晓的强大之处外 , 今天华为还着重展示了MindSpore的三大创新能力:新编程范式 , 执行模式和协作方式 。
「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图
文章图片
今天发布的MindSpore首个开源版本为0.1.0-alpha版 , 主要由自动微分、自动并行、数据处理等功能构成 。 华为表示 , MindSpore具备开发算法即代码、运行高效、部署态灵活的特点 , 其核心分为三层:从下往上分别是后端运行时、计算图引擎及前端表示层 。 MindSpore开源社区:https://www.mindspore.cn/MindSpore代码:https://gitee.com/mindspore从整体上来说 , MindSpore搭建神经网络会以「单元」为中心 , 其中单元是张量和运算操作的集合 。 从输入张量开始 , MindSpore会提供各种算子以构造一个「单元」 , 最后模型封装这个单元就可以用来训练、推理了 。
「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图
文章图片
MindSpore的整体结构 , 从后端的硬件支持到前端API , 中间会涉及多种优化与特性 。 例如不采用计算图的自动微分、自动并行与优化计算过程等等 。 MindSpore最大的特点在于 , 其采用了业界最新的Source-to-Source自动微分 , 它能利用编译器及编程语言的底层技术 , 进一步优化以支持更好的微分表达 。 自动微分:不止计算图自动微分是深度学习框架的灵魂 , 有了它我们写模型就只需要关注前向传播 , 将所有复杂的求导、反传过程都留给框架 。 一般而言 , 自动微分指一种自动求某个函数其导数的方法 。 在机器学习中 , 这些导数可以更新权重 。 在更广泛的自然科学中 , 这些导数也能用于各种后续计算 。
「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图
文章图片
【「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图】人类擅长以解析式推导微分 , 计算机擅长数值微分 。 一般而言 , 自动微分都是需要建立计算图的 , 有了计算图才能追踪各函数、变量的依赖情况 , 并进一步根据链式法则传递梯度 。 然而对于MindSpore来说 , 它并不依赖于计算图 , 而是通过一种名为「基于源码转换」的自动微分方法 , 它支持if、for等复杂的控制流结构 , 以及灵活的函数式编程方式 。 自动微分本质上是解析变量间的依赖关系 , 并利用全微分法则与链式求导法则将梯度传递给不同的变量 。
「宽哥玩数码」华为深度学习框架MindSpore正式开源:自动微分不止计算图
文章图片
将Python代码解析为计算图 。 目前主流深度学习框架中主要有三种自动微分技术:
基于静态计算图的转换:将网络在编译时转换为静态数据流图 , 然后将链式法则应用于数据流图 , 并实现自动微分 。 基于动态计算图的转换:以操作符重载的方式记录网络在前向执行时操作轨迹 , 然后将链式法则应用于动态生成的数据流图 , 并实现自动微分 。 基于源码转换:该技术源以函数式编程框架为基础 , 以即时编译(JIT)的方式在中间表达(编译过程中程序的表达形式)上做自动微分变换 , 支持复杂控制流场景、高阶函数和闭包 。其中TF早期采用的是静态计算图 , PyTorch采用的是动态计算图 , 静态图能利用静态编译技术对网络性能进行优化 , 然而搭建网络或Debug非常复杂 。 动态图的使用非常便捷 , 但性能上难以做到极致的优化 。 MindSpore走的是另外一条路 , 即基于源码转换的自动微分 。 它又支持对自动控制流的自动微分 , 所以与PyTorch一样构建模型非常方便 。 同时MindSpore能对神经网络做静态编译优化 , 因此性能也非常优秀 。 基于源码转换的方法 , 是自动微分另一条康庄大道 。