热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

华为深度学习框架MindSpore正式开源:自动微分不止计算图

千呼万唤始出来——3月28日,华为的全栈全场景AI计算框架MindSpore终于正式开源了。今年的华为开发者大会HDC2020上,除了昇腾、鲲鹏等自研芯片硬件平台之外,最令人期待的就是深度学习框架MindSpore的开源了。今天上午,华为MindSpore首席科学家陈雷在活动中宣布这款产品正式开源,我们终于可以在开放平台上一睹它的真面目。作为一款「全场景AI框架」,MindSpore是华为人工智能

千呼万唤始出来——3 月 28 日,华为的全栈全场景 AI 计算框架 MindSpore 终于正式开源了。

今年的华为开发者大会 HDC 2020 上,除了昇腾、鲲鹏等自研芯片硬件平台之外,最令人期待的就是深度学习框架 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 来说,它并不依赖于计算图,而是通过一种名为「基于源码转换」的自动微分方法,它支持 if、for 等复杂的控制流结构,以及灵活的函数式编程方式。

自动微分本质上是解析变量间的依赖关系,并利用全微分法则与链式求导法则将梯度传递给不同的变量。

华为深度学习框架MindSpore正式开源:自动微分不止计算图

将 Python 代码解析为计算图。

目前主流深度学习框架中主要有三种自动微分技术:

  • 基于静态计算图的转换:将网络在编译时转换为静态数据流图,然后将链式法则应用于数据流图,并实现自动微分。

  • 基于动态计算图的转换:以操作符重载的方式记录网络在前向执行时操作轨迹,然后将链式法则应用于动态生成的数据流图,并实现自动微分。

  • 基于源码转换:该技术源以函数式编程框架为基础,以即时编译(JIT)的方式在中间表达(编译过程中程序的表达形式)上做自动微分变换,支持复杂控制流场景、高阶函数和闭包。

其中 TF 早期采用的是静态计算图,PyTorch 采用的是动态计算图,静态图能利用静态编译技术对网络性能进行优化,然而搭建网络或 Debug 非常复杂。动态图的使用非常便捷,但性能上难以做到极致的优化。

MindSpore 走的是另外一条路,即基于源码转换的自动微分。它又支持对自动控制流的自动微分,所以与 PyTorch 一样构建模型非常方便。同时 MindSpore 能对神经网络做静态编译优化,因此性能也非常优秀。

基于源码转换的方法,是自动微分另一条康庄大道。

华为深度学习框架MindSpore正式开源:自动微分不止计算图

源码转换的简要工作方式。

假设我们用 C 语言写函数,那么根据自动微分工具,函数的源代码会自动转换为另一种源代码,这种新生成的源代码包含了用于计算梯度的语句,它们可以直接编译。这样的源码到源码转换对于编译器非常友好,编译器在计算过程中也能进行优化。

MindSpore 自动微分的实现可以理解为对程序本身进行的符号微分,因为 MindSpore IR 是函数式的中间表达,它与基础代数中的复合函数有直观的对应关系,只要已知基础函数的求导公式,就能推导出由任意基础函数组成的复合函数的求导公式。MindSpore IR 中每个原语操作可以对应为基础代数中的基础函数,这些基础函数可以构建更复杂的流程控制。

自动并行训练:一切计算都交给它

如今的深度学习模型往往因为体量巨大而必须做并行化,MindSpore 能自动并行按照串行写的代码,自动实现分布式并行训练,并且保持高性能。

一般而言,并行训练可以分为模型并行与数据并行,数据并行比较好理解,每一个样本可以独立地完成前向传播,最后再汇总传播结果。相比之下,模型并行就比较复杂了,需要我们以「并行思维」这样的逻辑手动编写所有需要并行的部分。

MindSpore 自动并行的目标是构建一种融合了数据并行、模型并行和混合并行的训练方式。它会自动选择一种代价最小的模型切分方式,实现自动分布式并行训练。

目前 MindSpore 采用了切分算子细粒度的并行方式,即把图中每个算子都切分到集群而完成并行运算。这期间切分方式可能非常复杂,但作为崇尚 Pythonic 的开发者,并不需要关心底层实现,只需要顶层 API 计算高效就行了。

华为深度学习框架MindSpore正式开源:自动微分不止计算图

除了自动微分与自动并行,MindSpore 还有很多优秀的特性与组件,完整的数据预处理模块、高效的图计算引擎都值得我们去探索。例如在数据预处理模块中,MindSpore 需要考虑如何提升数据预处理的能力,从而使其跟得上昇腾芯片消耗数据的速度。

当然可视化工具、模型评估 工具 等常用模块也都配齐了,除了常见的计算图、标量曲线等可视化,MindSpore 还能实现新颖的「模型溯源」,它会把学习率、损失值、模型大小等众多超参配置都画在一起,方便开发者调参。

MindSpore 代码什么样?

用 MindSpore 写模型,代码风格还是挺有特色的。之前介绍过,MindSpore 主要概念就是张量、算子、单元和模型,它提供的同样也是 Python 编程范式,因为采用 Source-to-Source 自动微分,Python 常用的元组、列表等数据结构还能用,匿名函数 Lambda 也没问题。

张量大家都了解了,MindSpore 中的算子可以是卷积,也可以是简单的加法。它们与张量一起可以构成「单元」,单元是所有神经网络单元的基本类。单元再封装就成了模型了,MindSpore 可以直接调用模型来训练与推理,也可以使用更底层的 API 构建复杂模型。

如下所示,我们可以发现写 MindSpore 有两个比较突出的亮点。首先当然是计算图的调整,动态图与静态图可以一行代码切换。在正常情况下,MindSpore 使用的是 PyNative 动态图,然而在需要静态图的时候,设置个 context 上下文管理器就可以了。

import numpy as np
import mindspore.context as context
import mindspore.nn as nn
from mindspore import Tensor

# Initialize the network
net = Net()
x = Tensor(np.random.rand(1, 1, 4, 1024).astype(np.float32))

# Predict the network in PyNative mode, by default
out = net(x)

# Change to Graph mode to predict the network
context.set_context(mode=context.GRAPH_MODE)
out = net(x)

对于自动并行特性,我们写的串行代码,只需要多加一行就能完成自动并行,这背后的复杂并行逻辑完全不需要花费精力去理解。

如下所示,只要设置运行环境为图模式,并允许使用分布式接口 HCCL(华为集合通信库),那么在初始化后 MindSpore 就能自动优化我们写的模型,以最好的并行策略加速整个训练过程。

import os
from mindspore import context
from mindspore.communication.management import init


if __name__ == "__main__":
 context.set_context(mode=context.GRAPH_MODE, 
 device_target="Ascend", 
 enable_hccl=True, 
 device_id=int(os.environ["DEVICE_ID"]))
 init()
 ... 

华为表示,MindSpore 原生适应所有的 AI 应用场景,并能在按需协同的基础上通过实现 AI 算法即代码,显著减少模型开发时间。以典型的 Transformer 为例,MindSpore 可降低核心代码量 20%,开发门槛大大降低,效率整体提升 50% 以上。

华为深度学习框架MindSpore正式开源:自动微分不止计算图

随着框架的开源,MindSpore 相关文档和教程均已在官网上线,并欢迎开发者提供反馈意见。

至于未来的发展方向,华为表示在开源后大部分工作都将交由社区自主完成:MindSpore 社区会按照社区章程进行运作,未来新版本计划会由各个特别兴趣组 (Special Interest Group, 简称 SIG) 输出,并交技术治理委员会 (Technical Steering Committee,简称 TSC) 决策并公示。

目前,MindSpore 技术治理委员会由来自依瞳科技、Conic AI、哈尔滨工业大学、华为、工商银行、帝国理工、中科院计算所、北京大学、清华大学、中国科技大学、爱丁堡大学、University Paris-Saclay、Universität Münster、西安电子科技大学等 14 名不同机构的代表组成。

为吸引开发者,华为还将启动一系列的开发者体验活动。

随着深度学习框架等工具的全面开源,「最强 AI 处理芯片」昇腾的落地,华为的 AI 布局已经逐渐清晰起来,MindSpore 将为各行业带来哪些新变化,让我们拭目以待。


以上所述就是小编给大家介绍的《华为深度学习框架MindSpore正式开源:自动微分不止计算图》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 利用 PyTorch 实现 Python 中的高效矩阵运算 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • python教程分享Pytorchmlu 实现添加逐层算子方法详解
    目录1、注册算子2、算子分发3、修改opmethods基类4、下发算子5、添加wrapper6、添加wrapper7、算子测试本教程分享了在寒武纪设备上pytorch-mlu中添加 ... [详细]
  • 使用 Jupyter Notebook 实现 Markdown 编写与代码运行
    Jupyter Notebook 是一个开源的基于网页的应用程序,允许用户在同一文档中编写 Markdown 文本和运行多种编程语言的代码,并实时查看运行结果。 ... [详细]
  • 本文介绍了如何在Python中使用插值方法将不同分辨率的数据统一到相同的分辨率。 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 在Python编程中,掌握高级技巧对于提升代码效率和可读性至关重要。本文重点探讨了生成器和迭代器的应用,这两种工具不仅能够优化内存使用,还能简化复杂数据处理流程。生成器通过按需生成数据,避免了大量数据加载对内存的占用,而迭代器则提供了一种优雅的方式来遍历集合对象。此外,文章还深入解析了这些高级特性的实际应用场景,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
author-avatar
宠医_臻爱一生_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有