打开微信,使用扫一扫进入页面后,点击右上角菜单,
点击“发送给朋友”或“分享到朋友圈”完成分享
【CN-MM1】MagicMind 系统性概述
https://zhuanlan.zhihu.com/p/594256318
MagicMind 是面向寒武纪 MLU 的推理加速引擎。MagicMind 能将 TensorFlow,PyTorch 等深度学习框架训练好的算法模型转换成 MagicMind 统一计算图表示,并提供端到端的模型优化、代码生成以及推理业务部署能力。MagicMind 致力于为用户提供高性能、灵活、易用的编程接口以及配套工具,让用户能够专注于推理业务开发和部署本身,而无需过多关注底层硬件细节。
为什么要推出 MagicMind?
一句话解释就是为了提高推理速度。
深度学习推理应用具有计算和访存量大、实时性要求高的特点。同时深度学习框架繁多,基于以上四个难点,寒武纪推出了 MagicMind 推理引擎,对标 nvidia TensorRT,MagicMind 后端计算库是寒武纪定制化深度学习高性能库 CNNL,对标 nvidia CUDNN。
在 ResNet50 上对比了 MagicMind 推理和 PyTorch 框架推理的性能差异。在 MLU370-X4 设备上,float16 计算精度下,MagicMind 推理的速度是框架推理的6倍左右,因此学习和使用 MagincMind 是很有必要的。
MagicMind 在寒武纪软件栈中的定位是 AI 加速库,他可以脱离 AI 框架单独使用,这时候他就是推理引擎,也可以作为后端被AI框架集成,如 Tensorflow,Pytorch 集成 MagicMindM 后端。
MagicMind :寒武纪推理加速引擎
提供端到端的模型表示、优化以及部署能力
支持多种框架、多种业务场景算法模型
兼容寒武纪全系列硬件(MLU300 系列起)多后端支持(MLU&CPU)
总体架构上分为三个部分,模型表示,模型优化,以及模型部署。
1)模型表示层:
该层主要包含计算图表示和网络构建API两部分:
MagicMind 基于 MLIR 定义了自己的中间表示:MagicMind IR(MagicMind Intermediate Representation)。用户训练好的算法模型会统一转换为用MagicMind IR表示的计算图,后续的模型优化和代码生成都基于该计算图完成。
MagicMind 向用户提供构建 MagicMind IR 的 C++/python 接口封装。这套接口允许用户用两种方式完成训练好的算法模型到 MagicMind IR 的转换:
2)模型优化层:
该层主要包含计算图高级别优化、计算图低级别优化和代码生成三部分:
计算图高级别优化负责完成与硬件无关的、算法层级的优化,包括但不限于算子融合、常量折叠、冗余分支消除等。
计算图低级别优化负责完成硬件相关的优化,包括但不限于物理布局转换、前后融合等。
代码生成部分负责完成指令和模型对象生成。该部分支持自动代码生成和手写算子库匹配两种代码生成方式,最终将指令和权重数据打包,生成模型对象(可序列化到文件)。
同时支持注册优化 pattern,pass,以及支持用户控制优化行为等。
3)模型部署层:
MagicMind Runtime 提供了运行模型对象的接口以及运行环境。主要支持以下功能:
能够脱离图编译引擎独立部署。
支持任务多队列发射,并发执行。
支持 CPU(部分算子)、MLU 两种后端,支持异构并行。
支持中间结果内存复用。
支持融合后的网络层级的 profiling。
支持中间结果调试。
若有了训练好的算法模型,可以按照以下三个步骤部署推理业务:创建网路,生成模型,部署模型。
我们将训练好的算法模型转成 Network。MagicMind 支持两种创建 Network 的方式:
第一种是使用 Parser 解析框架模型文件,转换成 Network。
第二种是使用 Network 提供的算子添加接口,逐个算子搭建 Network。
前者能够做到脱离框架部署推理业务,后者多用于深度学习框架集成 MagicMind,此场景下,MagicMind 作为深度学习框架的一种可选后端,负责运行深度学习框架分配的某个子图。
生成模型部分我们使用 Builder 生成模型,从 Network 生成出可以在 MLU 上部署的模型对象 Model。在模型生成过程中,Builder 会对原始的算法模型进行多级别的编译优化,然后生成 MLU 可支持代码,最终存储到 Model 对象中。
从 model 对象实例化一个推理引擎 engine,将指令和权值部署到指定的设备上。
为 engine 初始化运行上下文 context。
为上下文绑定输入输出数据,执行推理。
MagicMind 提供了 c++和python 接口来完成创建网络、生成模型、部署模型的整套流程。
模型表示层和模型优化层我们统称为模型构建期,MagicMind提供了mm_build负责模型生成。提供了mm_run负责模型部署。mm_build和mm_run工具将在后续课程中学习到。
相关链接
1. 在线课程:在线课程 – 寒武纪开发者社区 (cambricon.com)
2. 文档资料:文档中心 – 寒武纪开发者社区 (cambricon.com)
3. 代码库:pytorch_modelzoo: cambriocn pytorch训练和推理模型集合 (gitee.com)
热门帖子
精华帖子