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

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

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

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

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

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

MegEngine 的底层计算引擎 —— MegDNN

MegDNNMegEngine 中扮演的角色是底层计算引擎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 GraphSymbolVar 以及许多 op (算子,operator)组成。SymbolVar 是在 MegBrain 层面 Tensor 的表示,可以理解为传递给 op 进行计算的数据。作个类比,op 是类似加减乘除这样的计算操作(在深度学习中常用的有 convolutionpooling 等),SymbolVar 就是我们用来进行加减乘除的“数”(在深度学习中就是 Tensor)。

MegEngine 动态图接口 —— Imperative 登场

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

实际上,在 MegBrainComputing Graph 中已经有了非常多的算子实现,因此 MegEngineImperative 借助张量解释器 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 还是 Imperativeop,最终都需要通过调用 MegDNN kernel 来完成计算。

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容