PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=111)
环境说明
无
前言
从2019年开始,我们公司的智能分析平台核心架构就开始逐渐的转向了RK3399PRO,这是我们公司的第三代智能分析平台,前面两代分别是TK1和TX2,但是因为众所周知的原因,这一代分析平台选择了国内的一些替代商。经过了2019年和2020年的实际部署和使用,对于第三代智能分析平台来说,有一个硬性缺陷就是NPU算力过低(INT8 3T),导致了某些算法达不到实时帧率,其其他的性能还是不错的,如CPU计算力、编解码等等。正是由于这个算力的缺陷,所以在2020年,我们调研了市场上的其他算力平台的情况,经过某些渠道,我们和寒武纪联系上了。寒武纪给我们介绍了他们的MLU200系列智能分析平台的情况,并提供了相应测试板卡,经过相应的测试后,我们技术人员及公司领导对其比较认可,因此决定第四代平台会加入寒武纪的推理模块,最终形成了以RK作为主控,寒武纪作为推理模块的形式,为什么这样搭建,后文有所提及。由于现在市场上已经出现了类似我们公司的第四代智能分析平台的产品,于是相关介绍可以进行解密脱敏发布。本系列文章就是对这个寒武纪平台做一些简单的介绍及总结。
若文中引用部分存在侵权,请及时联系我删除。
寒武纪加速平台简介
寒武纪加速平台是有两个部分构成,一个部分是算力硬件,一部分是配套的软件。
寒武纪硬件部分
首先,这里介绍的是寒武纪的MLU200系列,在本文发布时,其实其MLU200系列的升级版,MLU300系列也在寒武纪内部及其相关的合作伙伴正在测试。
对于MLU200系列来说,我们从其官网可以看到,大概存在3个系列,一个是边缘端推理MLU220(只支持推理),一个是服务器端推理MLU270(只支持推理),一个是MLU290(支持训练和推理)。可以从其官网(https://www.cambricon.com/) 查看更加详细的介绍。
对于MLU220来说,这里介绍两个比较重要的参数,具备两种形态,一种是INT8 8T算力+8.25W功耗,一种是INT8 16T算力+16.5W功耗。MLU220边缘端模块正是我们公司第四代智能分析平台的核心部件之一,但是由于其CPU计算能力较弱,导致不能够进行大量的业务逻辑运算,这也是某些场景可能需要其他主控的原因。
对于MLU270来说,除了部署服务端的智能分析算法外,其对我们来说最重要的功能是作为模型移植的硬件。我们的智能分析算法想要比较好的工作在MLU220边缘端,就必须要经过MLU270上进行模型移植,这也是后续文章的重点之一。
对于MLU290来说,我们公司没有使用,但是看其介绍,一般来说都是应用在各云厂商、机房和服务中心等,其的最大亮点是支持模型训练。
寒武纪软件部分
寒武纪软件部分我大概可以分为3类,一个是驱动,一个是运行时库,一个是其相关的算法框架等。如其官网的结构图:
从上图来看,在相关的算法框架那块里面,还包含了两个我们实际用到了,但是其图中没有给出的介绍。图中的相关算法框架部分都是用于算法训练、推理、移植使用的。其实在推理部分来看(运行时之上),还应该包含寒武纪出的两个开源工程:EasyDK以及CNStream。
EasyDK是其基于其运行时库封装的一些常用和简易接口,对我们来说,可能最常用的就是关于离线模型推理部分。相关介绍请参见其官网: https://github.com/Cambricon/easydk
CNStream是其基于EasyDK封装的一套应用层库,我觉得其和deepstream和MediaPipe有异曲同工之妙。相关介绍请参见其官网:https://github.com/Cambricon/CNStream
其实从这里我们可以看出,一般来说,我们自己的推理端的程序和服务,有三种形态:
- 基于CNStream进行开发,其封装的还不错,并行处理的还行,但是可能就是不能够很好的和自己以前的程序框架移植和融合。
- 基于EasyDK进行开发,简化调用及开发流程,但是会有些坑需要去阅读EasyDk源码和运行时相关的SDK文档。
- 基于其运行时相关的SDK文档进行开发,需要花大量的时间进行学习,适合长期工作在此平台的相关人员。
对于我们公司来说,我们现在基本工作在EasyDK和其运行时之间,基于这两个进行混合编程,最终的理想状态是直接基于其运行时库进行开发。
寒武纪加速平台使用简介
在前言部分已经介绍过了,我们公司的第四代智能分析平台的核心构成部分是MLU220。因此,我们公司做的事情其实将已经训练好的Caffe、Pytorch等框架的模型移植到寒武纪平台。寒武纪平台根据其定位做了云端和终端的商业定位。其官网介绍图如下:
下面我对我司使用的基本流程做一个简介。
部署流程简介
寒武纪平台的部署流程有一条主线是将一个原始模型转为一个离线模型。基本流程如下:
- 得到算法的原始模型,如caffe/pytorch/tensorflow等框架的模型。
- 配置对应框架模型的模型转换环境,有两种一种是手动配置,一种是docker。
- 使用对应的框架模型转换环境,进行模型量化、转换得到离线模型。
- 开发支持离线模型的程序应用,调用离线模型进行推理并做其他处理。
关于我司使用的基本流程,后续文章将会有一个实例来详细展开说明,这里就不多介绍了。
后记
本文主要介绍了寒武纪加速平台的一些概念。更多的详情,请查看寒武纪官网相关的介绍。
其实看到国内的各个软硬一体厂商发展的还是不错的,希望他们可以取得更加长足的发展,希望他们为国产争光。
参考文献
- https://www.cambricon.com/
- 其他相关保密资料。
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。