MegEngine 动态执行引擎-Imperative Runtime 概述
当我们谈论 MegEngine 时,我们在谈论什么
众所周知,开源深度学习框架旷视天元(MegEngine)是旷视自主研发的国产工业级深度学习框架,是旷视新一代 AI 生产力平台 Brain++ 的最核心组件,在2020年3月正式向全球开发者开源。MegEngine 凭借其训练推理一体、超低硬件门槛和全平台高效推理 3 大核心优势,帮助企业与开发者大幅节省产品从实验室原型到工业部署的流程,真正实现小时级的转化能力。
MegEngine自上向下包含三个层次:Imperative、MegBrain和MegDNN。它们的角色定位分别是:
- Imperative:- MegEngine为动态训练设计的一套新接口,负责处理动态图运行时(- Imperative Runtime)。
- MegBrain:负责处理静态图运行时(- Graph Runtime)。
- MegDNN:- MegEngine的底层计算引擎。
下面再从下到上介绍一下这三个模块在MegEngine中的作用。
 (资料图)
(资料图)
MegEngine 的底层计算引擎 —— MegDNN
MegDNN在MegEngine中扮演的角色是底层计算引擎。MegDNN是一个跨平台的底层算子库,训练和推理过程中的所有计算操作最终都需要落到一个MegDNN的算子上进行,一个MegDNN算子可能会根据场景(如张量尺寸等)有一个或多个不同的实现(也叫kernel)。
作为一个跨平台的计算库,MegDNN为我们提供丰富的与Tensor相关的计算原语,比如Convolution、Pooling、MatrixMul、Transpose等。目前MegDNN支持的平台有:x86、arm、CUDA、RoCM、OpenCL、Hexagon等。
感兴趣的同学可以在这里看到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是类似加减乘除这样的计算操作(在深度学习中常用的有convolution、pooling等),SymbolVar就是我们用来进行加减乘除的“数”(在深度学习中就是Tensor)。
MegEngine 动态图接口——Imperative 登场
因为MegEngine是动静合一的深度学习框架,MegBrain解决了静态图的训练和推理问题,还需要有一个“组件”负责处理动态图的训练和推理、以及Python侧的训练接口,于是便有了Imperative,也就是说,Imperative Runtime是为了动态训练而单独设计的一套新接口。
实际上,在MegBrain的Computing Graph中已经有了非常多的算子实现,因此MegEngine的Imperative借助张量解释器Tensor Interpreter较多地复用了MegBrain中的op。这样做的原因是:
- 重写算子代价高,且容易写错。
- 若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 动态执行引擎-Imperative Runtime 概述
- hot是什么意思英语 hot是什么意思
- 青海警方破获电诈案件1417起,抓获犯罪嫌疑人2911名
- 服务经济社会高质量发展 河北有效认证证书达118928张 全球观天下
- 世界海洋日 | 保护海洋环境,向塑料垃圾说不_全球今热点
- 薄幸什么意思 薄幸的人是什么意思
- 985“爱心车厢”全程相伴莘莘学子
- 上银聚增富定期开放债券型发起式证券投资基金开放申购、赎回业务公告
- 焦点热门:汽车芯片「 舆芯半导体」完成近亿元天使轮融资,临芯资本领投
- 岱勒新材:公司5月份处于满产状态,产销量已创历史新高-播报
- 安溪以优秀文艺宣传贯彻党的二十大精神
- 环球即时看!让他们先考!淄博烧烤为高考停烤4天
- 全球速看:大晟文化06月07日主力资金大幅流出
- 开票系统上传不了发票怎么办-开票系统显示发票未上传什么意思 世界热讯
- 当前看点!股票红线和绿线分别代表什么
- 环球今亮点!2023年高考全国甲卷作文命题思路与解析
- 当前简讯:景津装备:公司产品可用于养殖行业的屠宰、粪便污水及沼渣沼液处理等
- 智能表面产品和新型底盘产品目前有没有获得订单?宁波华翔回应 实时
- 角的概念的推广教学设计_角的概念
- Lunaz展示其电动阿斯顿马丁DB6EV
- 刚刚,出考场啦!
- 头条焦点:中国台球协会:将从严处罚旅英涉赌球员,开展全行业警示教育
- 5月全国城市轨道交通客运量24.9亿人次
- Lunaz展示其电动阿斯顿马丁DB6EV_环球微头条
- 乐“职”不疲,天府四小学子在职业体验中学知识
- 回归法律服务初心 促行业高质量发展-环球今日讯
- 白云山(600332)6月7日主力资金净买入1226.24万元
- 白银市住房公积金管理中心的地址_白银市住房公积金管理中心
- 华为发布全栈自主GaussDB,国产数据库份额如何?|天天热消息
- 股票红线和绿线分别代表什么|世界动态
 
           
                     
                     
                     
                     
                     
                     
                     
                     
                     
                     
                    