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。
  • 使用对应的框架模型转换环境,进行模型量化、转换得到离线模型。
  • 开发支持离线模型的程序应用,调用离线模型进行推理并做其他处理。

  关于我司使用的基本流程,后续文章将会有一个实例来详细展开说明,这里就不多介绍了。

后记


  本文主要介绍了寒武纪加速平台的一些概念。更多的详情,请查看寒武纪官网相关的介绍。

  其实看到国内的各个软硬一体厂商发展的还是不错的,希望他们可以取得更加长足的发展,希望他们为国产争光。

参考文献


打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)

PS: 请尊重原创,不喜勿喷。

PS: 要转载请注明出处,本人版权所有。

PS: 有问题请留言,看到后我会第一时间回复。

寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍的更多相关文章

  1. 寒武纪加速平台(MLU200系列) 摸鱼指南(二)--- 模型移植-环境搭建

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. 寒武纪加速平台(MLU200系列) 摸鱼指南(四)--- 边缘端实例程序分析

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. 春节前“摸鱼”指南——SCA命令行工具助你快速构建FaaS服务

    春节将至,身在公司的你是不是已经完全丧失了工作的斗志? 但俗话说得好:"只要心中有沙,办公室也能是马尔代夫." 职场人如何才能做到最大效能地带薪"摸鱼",成为了 ...

  4. HTML5系列四(特征检测、Modernizr.js的相关介绍)

    Modernizr:一个HTML5特征检测库 Modernizr帮助我们检测浏览器是否实现了某个特征,如果实现了那么开发人员就可以充分利用这个特征做一些工作 Modernizr是自动运行的,无须调用诸 ...

  5. 【转】让Chrome化身成为摸鱼神器,利用Chorme运行布卡漫画以及其他安卓APK应用教程

    下周就是十一了,无论是学生党还是工作党,大家的大概都会有点心不在焉,为了让大家更好的心不在焉,更好的在十一前最后一周愉快的摸鱼,今天就写一个如何让Chrome(google浏览器)运行安卓APK应用的 ...

  6. Thief-Book 上班摸鱼神器

    Thief-Book 上班摸鱼神器 介绍 Thief-Book 是一款真正的摸鱼神器,可以更加隐秘性大胆的看小说. 隐蔽性 自定义透明背景,随意调整大小,完美融入各种软件界面 快捷性 三个快捷键,实现 ...

  7. AI解决方案:边缘计算和GPU加速平台

    AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...

  8. 菜鸡学C语言之摸鱼村村长

    题目描述 摸鱼村要选村长了! 选村长的规则是村里每个人进行一次投票,票数大于人数一半的成为村长. 然鹅摸鱼村的人都比较懒,你能帮他们写一个程序来找出谁当选村长吗? (每名村民的编号都是一个int范围内 ...

  9. [摸鱼]cdq分治 && 学习笔记

    待我玩会游戏整理下思绪(分明是想摸鱼 cdq分治是一种用于降维和处理对不同子区间有贡献的离线分治算法 对于常见的操作查询题目而言,时间总是有序的,而cdq分治则是耗费\(O(logq)\)的代价使动态 ...

随机推荐

  1. Jmeter系列(25)- 常用逻辑控制器 (4) | Include控制器Include Controller

    认识 Include Controller Include Controller :译为包含控制器,用来添加 Test Fragment(测试片段).具体是什么意思呢,我们先来了解下 Test Fra ...

  2. php laravel v5.1 消息队列

    * install https://laravel.com/docs/5.1#installationcomposer create-project laravel/laravel msgq &quo ...

  3. CI框架 模糊查询,链表查询

    $data = $this->db->from('flash_news') ->select('xx,xx,xx,xx') ->limit(2) ->like('tags ...

  4. P1712-[NOI2016]区间【线段树,尺取法】

    正题 题目链接:https://www.luogu.com.cn/problem/P1712 题目大意 \(n\)个区间,求出其中\(m\)个区间使得它们有覆盖同一个点且最长区间长度减去最短长度最小. ...

  5. 统计学习:线性支持向量机(SVM)

    学习策略 软间隔最大化 上一章我们所定义的"线性可分支持向量机"要求训练数据是线性可分的.然而在实际中,训练数据往往包括异常值(outlier),故而常是线性不可分的.这就要求我们 ...

  6. bzoj1503 郁闷的出纳员(平衡树,思维)

    题目大意: 现在有n个操作和一个最低限度m \(I\)命令\(I\ k\)新建一个工资档案,初始工资为k. \(A\)命令$A\ k $把每位员工的工资加上k \(S\)命令$S\ k $把每位员工的 ...

  7. 用C++实现的数独解题程序 SudokuSolver 2.1 及实例分析

    SudokuSolver 2.1 程序实现 在 2.0 版的基础上,2.1 版在输出信息上做了一些改进,并增加了 runtil <steps> 命令,方便做实例分析. CQuizDeale ...

  8. C++ 与 Visual Studio 2022 和 WSL(五)——WSL2

    Build and Debug C++ with WSL 2 Distributions and Visual Studio 2022 References Build and Debug C++ w ...

  9. 使用固件库点亮led灯

    1. 项目 使用STM32F103VE的固件库实现流水灯设计. 2. 代码 由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的. 点亮绿灯: main.c #include " ...

  10. 【数据结构 C++】排序——冒泡、插入、选择、希尔、归并、快排、堆排序

    LeetCode 912. 排序数组 给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = ...