×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

【CN-MM1】MagicMind 系统性概述 小飞人2023-07-17 14:33:32 回复 查看 社区交流 干货资源
【CN-MM1】MagicMind 系统性概述
分享到:

【CN-MM1】MagicMind 系统性概述

https://zhuanlan.zhihu.com/p/594256318


1、MagicMind 简介

MagicMind 是面向寒武纪 MLU 的推理加速引擎。MagicMind 能将 TensorFlow,PyTorch 等深度学习框架训练好的算法模型转换成 MagicMind 统一计算图表示,并提供端到端的模型优化、代码生成以及推理业务部署能力。MagicMind 致力于为用户提供高性能、灵活、易用的编程接口以及配套工具,让用户能够专注于推理业务开发和部署本身,而无需过多关注底层硬件细节。

1 背景

为什么要推出 MagicMind?

一句话解释就是为了提高推理速度。

深度学习推理应用具有计算和访存量大、实时性要求高的特点。同时深度学习框架繁多,基于以上四个难点,寒武纪推出了 MagicMind 推理引擎,对标 nvidia TensorRT,MagicMind 后端计算库是寒武纪定制化深度学习高性能库 CNNL,对标 nvidia CUDNN。



在 ResNet50 上对比了 MagicMind 推理和 PyTorch 框架推理的性能差异。在 MLU370-X4 设备上,float16 计算精度下,MagicMind 推理的速度是框架推理的6倍左右,因此学习和使用 MagincMind 是很有必要的。

2 框架

MagicMind 在寒武纪软件栈中的定位是 AI 加速库,他可以脱离 AI 框架单独使用,这时候他就是推理引擎,也可以作为后端被AI框架集成,如 Tensorflow,Pytorch 集成 MagicMindM 后端。



2、MagicMind 总体架构

  • 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。

  • 支持中间结果调试。

3、MagicMind 工作原理

若有了训练好的算法模型,可以按照以下三个步骤部署推理业务:创建网路,生成模型,部署模型。



1 创建网络

我们将训练好的算法模型转成 Network。MagicMind 支持两种创建 Network 的方式:

  • 第一种是使用 Parser 解析框架模型文件,转换成 Network。

  • 第二种是使用 Network 提供的算子添加接口,逐个算子搭建 Network。

前者能够做到脱离框架部署推理业务,后者多用于深度学习框架集成 MagicMind,此场景下,MagicMind 作为深度学习框架的一种可选后端,负责运行深度学习框架分配的某个子图。

2 生成模型

生成模型部分我们使用 Builder 生成模型,从 Network 生成出可以在 MLU 上部署的模型对象 Model。在模型生成过程中,Builder 会对原始的算法模型进行多级别的编译优化,然后生成 MLU 可支持代码,最终存储到 Model 对象中。

3 部署模型

  1. 从 model 对象实例化一个推理引擎 engine,将指令和权值部署到指定的设备上。

  2. 为 engine 初始化运行上下文 context。

  3. 为上下文绑定输入输出数据,执行推理。

MagicMind 提供了 c++和python 接口来完成创建网络、生成模型、部署模型的整套流程。

模型表示层和模型优化层我们统称为模型构建期,MagicMind提供了mm_build负责模型生成。提供了mm_run负责模型部署。mm_build和mm_run工具将在后续课程中学习到。

4、MagicMind 重要特性总结


相关链接

1.    在线课程:在线课程寒武纪开发者社区 (cambricon.com)

2.    文档资料:文档中心寒武纪开发者社区 (cambricon.com)

3.    代码库:pytorch_modelzoo: cambriocn pytorch训练和推理模型集合 (gitee.com)


版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭