MegEngine 动态执行引擎-Imperative Runtime 概述

Posted MegEngine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MegEngine 动态执行引擎-Imperative Runtime 概述相关的知识,希望对你有一定的参考价值。

因为 MegEngine 是动静合一的深度学习框架,MegBrain 解决了静态图的训练和推理问题,还需要有一个“组件”负责处理动态图的训练和推理、以及 Python 侧的训练接口,于是便有了 Imperative,也就是说,Imperative Runtime 是为了动态训练而单独设计的一套新接口。

当我们谈论 MegEngine 时,我们在谈论什么

众所周知,开源深度学习框架旷视天元(MegEngine)是旷视自主研发的国产工业级深度学习框架 ,是旷视新一代 AI 生产力平台 Brain++ 的最核心组件,在2020年3月正式向全球开发者开源。MegEngine 凭借其训练推理一体、超低硬件门槛和全平台高效推理 3 大核心优势,帮助企业与开发者大幅节省产品从实验室原型到工业部署的流程,真正实现小时级的转化能力。

MegEngine 自上向下包含三个层次:ImperativeMegBrain 和 MegDNN。它们的角色定位分别是:

  • ImperativeMegEngine 为动态训练设计的一套新接口,负责处理动态图运行时(Imperative Runtime)。
  • MegBrain:负责处理静态图运行时(Graph Runtime)。
  • MegDNNMegEngine 的底层计算引擎。

下面再从下到上介绍一下这三个模块在 MegEngine 中的作用。

MegEngine 的底层计算引擎 —— MegDNN

MegDNN 在 MegEngine 中扮演的角色是底层计算引擎MegDNN 是一个跨平台的底层算子库,训练和推理过程中的所有计算操作最终都需要落到一个 MegDNN 的算子上进行,一个 MegDNN 算子可能会根据场景(如张量尺寸等)有一个或多个不同的实现(也叫 kernel)。

作为一个跨平台的计算库,MegDNN 为我们提供丰富的与 Tensor 相关的计算原语,比如 ConvolutionPoolingMatrixMulTranspose 等。目前 MegDNN 支持的平台有:x86armCUDARoCMOpenCLHexagon 等。

感兴趣的同学可以在这里看到 MegDNN 在各个平台下的 kernel 具体实现。

静态图运行时管家 —— MegBrain

为了确保训练推理一致性, Imperative 中复用了 MegBrain 的计算代码,因此我们需要了解 MegBrain 做了什么。

MegBrain 负责处理静态图的运行时,主要提供 C++ 的训练和推理接口。

从下面的 MegEngine 整体架构图可以看出,Imperative 通过 Tensor Interpreter (张量解释器)复用了许多 MegBrain 的代码。比如 shape 推导、计算、求导、Trace 等。

在 MegBrain 中,一个 Computing Graph 由 SymbolVar 以及许多 op (算子,operator)组成。SymbolVar 是在 MegBrain 层面 Tensor 的表示,可以理解为传递给 op 进行计算的数据。作个类比,op 是类似加减乘除这样的计算操作(在深度学习中常用的有 convolutionpooling 等),SymbolVar 就是我们用来进行加减乘除的“数”(在深度学习中就是 Tensor)。

MegEngine 动态图接口 —— Imperative 登场

因为 MegEngine 是动静合一的深度学习框架,MegBrain 解决了静态图的训练和推理问题,还需要有一个“组件”负责处理动态图的训练和推理、以及 Python 侧的训练接口,于是便有了 Imperative,也就是说,Imperative Runtime 是为了动态训练而单独设计的一套新接口。

实际上,在 MegBrain 的 Computing Graph 中已经有了非常多的算子实现,因此 MegEngine 的 Imperative 借助张量解释器 Tensor Interpreter 较多地复用了 MegBrain 中的 op。这样做的原因是:

  1. 重写算子代价高,且容易写错。
  2. 若 Imperative 的实现和 MegBrain 的实现不一致的话,容易导致训练推理不一致。

除了复用 MegBrain 的部分功能,Imperative 自身包含的模块主要有:Module(定义深度学习网络的基础类的实现)、Optimizer(一些优化器的实现)、Functional(提供 python 层的训练接口)、Interpreter(计算入口,底层会调用 kernel 或者 MegBrain 的算子实现)、DTR(动态重计算模块)、Tracer(记录计算图的计算过程)等。

这些模块会在之后的文章中有更详细的介绍,感兴趣的同学可以查阅 MegEngine 官方文档

总结:Imperative 与 MegDNN / MegBrain 的关系

简单来说,MegDNN 负责 MegEngine 中所有的计算操作在各个平台(CUDA 等)的最终实现,无论是 MegBrain 还是 Imperative 的 op,最终都需要通过调用 MegDNN kernel 来完成计算。

既然 MegDNN 包揽了计算的活儿,那么在训练推理过程中那些与计算无关的工作,自然就落到了 MegBrain 和 Imperative 的头上。这些工作包括:求导、内存分配、对 Tensor 的 shape 进行推导、图优化、编译等。

MegEngine 整体上是有两部分 Runtime 以及底层的一些公共组件组成的。这两部分的 Runtime 分别叫做 Graph Runtime(对应 MegBrain) 和 Imperative Runtime(对应 Imperative)。

Graph Runtime 负责静态图部分,主要提供 C++ 训练推理接口。实际计算时需要调用 MegDNN 的实现。

Imperative Runtime 负责动态图部分,主要为动态训练提供 Python 接口。实际计算时需要调用 MegBrain 的已有实现或者直接调用 MegDNN 的 kernel

附:

更多 MegEngine 信息获取,您可以:查看文档和 GitHub 项目,或加入 MegEngine 用户交流 QQ 群:1029741705。欢迎参与 MegEngine 社区贡献,成为 Awesome MegEngineer,荣誉证书、定制礼品享不停。

训推一体,动静合一:深度学习框架「天元」出世

机器之心报道

机器之心编辑部

「深度学习,简单开发」,刚刚开源的天元(MegEngine)将为开发者们带来全新的深度学习开发体验。


又一个国产深度学习框架开源了。3 月 25 日,旷视科技在北京发布了新一代人工智能生产平台天元(MegEngine),其「训练推理一体」、「动静合一」、「兼容并包」、「灵活高效」的强大性能或许将为 AI 领域带来新的风向。

「天元是旷视 1400 名研发人员一直以来使用的深度学习引擎,已部署在上百个产品、几十种计算平台上,」旷视首席科学家、研究院长孙剑在发布会上表示。「他可以帮助开发者做到协同设计训得好,高效系统训得快,大规模数据或模型训得动。」

旷视首席科学家、研究院长孙剑发布会现场分享。

旷视提出的 AI 生产力平台 Brain++包括深度学习框架(天元 MegEngine)、深度学习云计算平台(MegCompute)、以及数据管理平台(MegData),将算法、算力和数据能力集为一体。本次开源的天元是 Brain++平台的核心。

  • 天元 MegEngine 深度学习框架官方网站:https://megengine.org.cn/


时至 2020,自贾扬清等人开放 Caffe 已过去六年,旷视为什么选择在这个时间点开源自身的核心技术?旷视研究院高级技术总监、天元项目负责人田忠博告诉我们:「这一进程其实去年已经开始推动,我们认为目前国内市场上缺少天元这样的项目。」

这是一个需要勇气的行动。据了解,在做出开源的决定以前,旷视技术团队内部经过了多次讨论。这关系到框架技术是否成熟,生态环境是否发展完善,以及未来发展的方向。

田忠博指出,天元是一套训练推理一体化、动静态合一的工业级深度学习框架,具体架构包括五层:

训推一体,动静合一:深度学习框架「天元」出世

从最上层的接口层到最底层的计算内核,天元做了很多优化,例如内存管理中的亚线性优化和高性能算子库等。

天元架构是旷视在研发过程中遇到痛点,并逐步解决的成果。旷视相信这些痛点也是行业共通的难题,通过这一开源架构,我们可以一站式地解决这些问题。

早在 2014 年 8 月,深度学习框架天元就在旷视内部诞生了,它随后成为了 Brain++的核心组成部分。「自 2012 年起,陆续有研究者开发出了第一代深度学习框架。在旷视,我们在实践过程中发现手工编写每层配置文件的方式非常不灵活,」孙剑介绍道。「因此我们发展了第二代深度学习框架,通过计算图的方式设计模型并求导,大大提高了效率。2015 年谷歌正式发布了 TensorFlow,采用了和旷视殊途同归的思路。当时我们进行了比较,发现自己的方法更具优势,所以天元就继续发展下来了。」

天元与目前流行的 TensorFlow、PyTorch 相似,旨在让更多的人可以在其基础上构建自己的应用,创造属于自己的价值。

此前,百度等公司也推出了自己的深度学习框架。天元会有哪些不同?「在这其中,我们是唯一一个以 AI 为本业的公司,天然需要使用深度学习算法解决问题,」旷视副总裁谢忆楠表示,「我们把自己在 AI 解决各领域问题过程中的工具开源出来,从视角上看或许会获得更好的效果。」

天元跻身全球主流框架

机器之心很多读者都用过深度学习框架,很多读者也都想入门深度学习框架。那么假设我们有 Python 和 NumPy 数值计算方面的基础,旷视新开源的天元又会有哪些方面吸引我们?

孙剑表示,天元有三大特别吸引人的优点,「第一是框架与算法的协同,框架需要为硬件开发优化算子,这样才能结合框架、设备开发最好的网络,ShuffleNet 系列高效神经网络就是协同设计的结果之一。第二即高效与强大性能,一般训练 COCO 数据集需要 30 多个小时,2017 年基于天元的 MegDet 并行物体检测系统,2 小时就能完成,并且精度更高。」

「第三是很好地支持大数据、大规模训练。借天元开源之际,我们同时也发布最新版 Objects365 V2,它是世界上最大的物体检测数据集,是目前学界流行的 COCO 数据集 的 16 倍大小。有这么大规模的数据,模型也需要扩增。如果模型扩大 10 倍的话,总体训练量就会增加 160 倍。而天元对于这种大模型、大数据也是没问题的,」孙剑接着说。

训推一体,动静合一:深度学习框架「天元」出世


田忠博说:「天元是为工业级、研究院规模的研发机构设计的,它具备的一些核心特点都是用来解决现实研发过程中的痛点。」从具体体验与特性上,我们确实能发现天元解决很多开发痛点,它们从代码风格、编程范式到底层优化展现了不一样的思路。

一键切换训练推理

在机器学习中,训练与推理一直不是一体的,当我们设计算法时,首先需要训练框架的支持,然后再把训练好的模型转移到推理框架上,从而将后续的推理计算放到各种硬件上。这中间会存在训练与推理的转换,这个过程需要手动完成,甚至转换后也不能保证模型性能与进度。

「训练推理一体化能把繁杂的模型生产流程简化到一步、两步,我们也希望它能够极大缩短算法研发和部署的时间,真正支持大规模的生产级诉求」,田忠博说,「为此,天元框架需要做到三点:无需模型转换就能做推理;训练的速度、精度与推理保持一致;在不同设备上做推理需要保证模型精度可以对齐。」

训推一体,动静合一:深度学习框架「天元」出世


从算法直接到部署硬件,中间不再需要转换模型,只需要几行代码与 API,模型的实践效果就能看得到。 对于大多数算法工程师,可能比较精通深度学习模型,对推理与模型部署相对而言不是那么熟,天元无疑能降低大量工程实践成本。

更重要的是,在部署过程中,天元通过自动算法选择机制和一系列针对推理的自动优化,能帮我们删除冗余代码,找到最适宜该设备的算法实现,达到灵活高效的目标。

动静合一,图并存

从 Theano 到 TensorFlow 1.X,它们都遵循着「静态计算图」这条路,我们会发现在用这类方法写模型时,需要很强的「向量化思维」,For 循环之类的语句就不要多想了。此外,因为写代码只是建计算图,调试的时候异常困难,我们不知道图中的数据流到底是什么样的。

很快,在 PyTorch 等框架中出现了动态计算图,用它写模型就像写个普通 Python 脚本,但这样写出来的模型,却是难以高效部署的。天元同时支持动态图与静态图,在科研训练与调试时采用动态图,到部署的时候又切换到静态图,这样就能充分利用两者优势。

训推一体,动静合一:深度学习框架「天元」出世


如上图所示,天元可以直接通过 @trace 装饰器确定某个函数到底是动态图还是静态图,而且状态还可以手动调整。这不就意味着在调试时我们可以将函数设置为动态图,直接查看每个变量的信息,而要到了部署等实际应用时,再把静态图打开,提升训练与推断速度?

如果以这样的方式调用动态与静态计算图,那真的称得上整合了两种方式的优势。

此外,我们还发现有一种动、静态的「混合编程」,即在动态图中调用静态图。可以想象,定义网络结构等过程使用动态图比较直观,而后采用静态图的方式执行实际运算,这也是非常吸引人的方式。后文在代码示例中,也会展示这种新颖的「混合编程」。

人生苦短,Pythonic 好入门

如果深度学习建模一直采用静态计算图,估计框架就会劝退很多开发者。但是天元这种主要采用动态图的框架,构建模型就像搭积木,而且还能以一般的 Python 编程方式去搭。相信很多接触机器学习的开发者都会选择 Python,它加上 NumPy 等数值计算库,差不多就能完成大多数任务。

如果有了这些基础,再搭建深度模型就没问题了,天元一样承接 Pythonic API,学习成本非常低。此外,因为旷视本身在计算机视觉方面有非常雄厚的累积,田忠博表示:「天元内置了一些独特的深度学习算子,它们和旷视在 CV 上的独到能力息息相关,能针对 CV 模型的训练与应用实现深度优化。」

训推一体,动静合一:深度学习框架「天元」出世


对于 API 与代码风格,我们还是比较推荐直接查看本文后面的示例,可以直观感受到,不论把天元当做深度学习的入门框架,还是与 PyTorch、TensorFlow 等一起作为备选框架都没问题。天元的编程风格与 API 配置,和已有的编程习惯、现有框架的风格都是一致的。

当然,这些并不是天元所有特性,还有很多需要进一步探索。例如它还有很强的多平台、多设备适应能力,既能灵活调用硬件能力,又可以高效训练大模型。

天元框架实际体验怎么样?

那么实际用天元写模型是什么样的体验?机器之心体验了旷视发布的 MegStudio,通过在线开发的方式,我们可以快体验到天元的特性与编程方式。

MegStudio 上准备好了一些入门项目,它展示了新框架的使用方式,例如「基本概念」主要介绍什么是计算图、张量和算子等基础知识,每一个项目都是通过中文文字与可运行的代码组成的,就像常用的 JupyterLab 那样,通过运行这些基本项目可以让开发者快速掌握天元的基本使用。

训推一体,动静合一:深度学习框架「天元」出世


为了直接展示天元的风格,我们可以快速试试 DL 入门的「第一个模型」MNIST 图像识别。准备数据这里就不展示了,天元可以直接调用 API 来处理常见数据,准备 MNIST 数据两行代码就够了。如果要搭建一个简单的卷积神经网络,天元允许使用 PyTorch Module 的方式定义,搭建模型就是搭积木。

训推一体,动静合一:深度学习框架「天元」出世


如上所示,继承 M.Module 后,Net 类只需要定义初始化参数与重写前馈 forward 过程就可以了。卷积层、批归一化层、激活函数等模块的使用非常符合直接,只需要给定必要参数就没问题了。

这种继承 Module 的方式非常直观,是一种动态计算图编写方式。如果要实现前向传播,传给它输入数据就行了,要是需要调试,在 forward 函数下设置断点,或者打印变量的信息都没问题。

然而,一般写模型真正复杂的地方在于定义模型架构之外的过程,例如后面需要完成的训练与测试过程。天元的优势在于,它允许动态图结合静态图,即使定义模型使用的是动态图,但在定义训练与测试函数仍然可以用静态计算图。

训推一体,动静合一:深度学习框架「天元」出世


如上在最为核心的前向、反向传播与模型损失计算过程中,我们可以采用天元中的 @trace 装饰器,直接调用静态计算图模式。因为绝大多数计算都发生在这个过程,因此,由动态计算图转为静态计算图将更有优势,天元能采用更高效的方式训练模型。

最后就是迭代训练过程了,这里天元也采用了 DataLoader,这种方式非常便捷。后续的损失函数计算与最优化器更新,与现有的 DL 框架比较类似,我们差不多不需要学习额外的知识,了解一下 API 就能用。


当然,后续还有保存、加载模型,也是两条语句的功夫。总体而言,很明显天元类似 PyTorch 保持了最好理解与使用的接口,并在关键的计算过程提供装饰器以调用静态计算图,这可以称得上是结合了动态、静态图各自的优势。

因为整体上天元的 API 接口非常精简,且保持着主流框架所养成的编程习惯,入门门槛还是非常低的,之前了解过深度学习框架的同学,不需要文档都能快速读懂整个过程。此外天元作为新手入门框架也没是没问题的,学会了它,差不多等同于学会了深度学习常用框架。

此外,除了 MegStudio,旷视还发布了模型中心 ModelHub,它汇聚了全球顶尖算法的一些预训练的模型,和旷视研究院一些最新的技术、研发成果。

旷视联合创始人兼 CTO 唐文斌 发布会现场分享

在旷视的计划中,Brain++将作为「AI 基础设施」逐步开源、开放,将生产力共享给广大开发者,让每个拥有小场景需求的人都可以做出能够解决其关键问题的最优算法。此外,旷视还希望在未来面向高校课程、初创企业提供更多支持,以方便小规模深度学习部署。

值得一提的是,旷视本次发布的天元版本是 Alpha 版。旷视表示,更为「正式」的版本会在今年晚些时候上线,随着大量组件的更新,旷视会逐步将计划中开源的代码和能力进一步释放出来。「3 月份开源的版本包含前期整理的代码和关键组件,今年 6 月我们还会发布对 Arm 架构、深度学习加速芯片、低比特和量化环境的支持。在今年 9 月份,天元还会有动态图的核心升级,整个系统会走向第一个开源的稳定版。届时体验会达到更为理想的状态。」田忠博表示。

自 2012 年起,旷视就推出了人脸识别开放平台 Face++,近几年来,AI 已从实验室中快速走向实用化。旷视的研发人员们认为,「天元」的开源宣告着人工智能技术再次回到了算法探索的层面。

未来,旷视还会进一步增强这一框架的分布式机器学习能力,对底层编译与代码生成能力进行优化,并欢迎机器学习社区力量的加入。



文为机器之心报道,转载请联系本公众号获得授权
✄------------------------------------------------
加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com
投稿或寻求报道:content @jiqizhixin.com
广告 & 商务合作:bd@jiqizhixin.com

以上是关于MegEngine 动态执行引擎-Imperative Runtime 概述的主要内容,如果未能解决你的问题,请参考以下文章

训推一体,动静合一:深度学习框架「天元」出世

天元MegEngine训练推理

MegEngine 使用小技巧:使用 Optimizer 优化参数

MegEngine 使用小技巧:量化

国产深度学习框架MegEngine,旷视打造,三月底即将开源

JVM字节码执行引擎和动态绑定原理