0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

面向低功耗AI芯片上的神经网络设计介绍

电子设计 来源:电子设计 作者:电子设计 2020-12-14 23:40 次阅读

首发:GiantPandaCV
作者:ybai62868

【GiantPandaCV导语】

这篇文章为大家介绍了一下面向低功耗AI芯片上的神经网络设计,随着这几年神经网络硬件CPU,GPU,FPGA,ASIC)的迅猛发展,深度学习在包括互联网,自动驾驶,金融,安防等很多行业都得到了广泛的应用。然而当我们真正在实际部署深度学习应用的时候,许多场景例如无人驾驶对设备在功耗,成本,散热性等方面都有额外的限制,导致了无法大规模应用深度学习解决方案。感兴趣的同学可以了解一下有关如何面向AI芯片来设计神经网络。

一、目前算法和硬件co-design的一个大背景

从硬件方面来看,我们都知道,深度神经网络中的计算都是大量的稠密型运算。那么,当前的硬件发展其实已经很难满足这些稠密型的运算需求了。那么,设计低功耗,低成本,高性能的硬件计算部署平台就成为了当务之急。

对于算法来说,其实在某些公开的数据集上,已经有很多非常不错的算法了,但是这些算法仅仅是针对特定数据集(疯狂刷点...)而在真实的业务场景下,这些算法有时候就并不一定能表现的非常出色。这个时候,我们就要去设计那些不仅是针对一些public数据集能够表现的比较comparable的,同时在一些特定的业务场景下,也要能够表现令人满意的算法。

二、当前AI芯片的发展状况

总的来说,目前的硬件家族可以被分为两个大类。

一大类是以通用需求为主的:CPU, GPU

另一大类以特殊用途为主的:FPGA, ASIC

先有一个大体的宏观概念。然后在看看看算法和这些硬件是怎么结合的。

早期的代码都是跑在CPU上的,比如说,我们知道的LeNet,那会GPU并不像现在这么盛行。直到ImageNet的冠军Alex把网络跑到了GPU上。这个时候,大家都开始使用GPU作为自己的训练平台。其实,CPU并不能非常高效的去运行我们需要的神经网络。因为CPU的运行方式是以串行为主,并且CPU上有很多操作都是为了优化多级缓存,更加偏向的是对于数据IO处理的的能力。而这些方面的设计对于神经网络来说都是多余的。

那么,什么样的硬件结构设计才能更加满足神经网络的特性呢?

其实,这个问题上,超哥讲的很好。究竟什么样的硬件结构更加适合神经网络,还得从神经网络自身的特性来分析。

就拿我们熟悉的全连接层来讲,比如说,现在第i层的神经元和第i+1层的神经元之间是以全连接的方式沟通的,那么沟通每个神经元的运算实际上是非常简单的乘法和加法。那么在网络进行一次前向运算的过程中,硬件上能够支持乘法和加法的运算单元越多,那么此时就能够承载下更深的网络。

对于同一层上的不同神经元来说,我们需要他们能够相互独立的完成各自的运算,从这点来看,神经网络具有大规模的并行性。

不论是在网络进行前向计算还是反向计算的过程中,都会产生很多的中间计算结果。而这些中间结果并不是每个都会被复用,要能放下在网络运算过程中产生的中间结果,就需要我们的硬件有足够的带宽。对于一个理想的设备来说,它应该有比较大的片上存储,并且带宽也要足够。这个时候,对于属于的图片信息(以视觉任务为主)和网络的权重才能有足够的空间来做存储。就是说要它充分的利用片上资源,减少片外的访存。

其实,在我们对一个网络进行train和inference的过程中,网络本身对于计算精度并没有我们想象的那么敏感。那么,为了能够存下更多的权重(deep的网络),我们可以使用那些比较简单的数据类型,比如说,int8,fp16。因此,这些年来,大家对于CPU+(GPU, FPGA, TPU, ASIC)这些硬件所组成的异构计算平台。

第一种组合:CPU+GPU

其实,在我们平时做实验,训练模型的过程中,用的最多的就是CPU+GPU这样的组合。

借助现有的非常成熟的深度学习框架(mxnet,pytorch,tensorflow等),我们就能非常方便和容易的完成开发。

优点:编程容易,运算力和吞吐量大。

缺点:GPU的功耗高,延迟大,部署实际的AI产品,没人会用服务器级别的GPU。

第二种组合:CPU+FPGA

这种组合方式的功耗相比CPU+GPU就要低很多。但是,对于FPGA的开发难度则会大很多。

优点:功耗低,方便落地

缺点:编程开发难度大,需要学习专用的硬件语言来支持相应的设备

第三种组合:CPU+ASIC

ASIC指的的是按照产品需求不同而定制化的特殊规格集成电路,由特定使用者要求和特定电子系统的需要而设计,制造。也就是说,ASIC在特定功能上进行了专项强化,可以根据需要进行复杂的设计,从而实现更高的处理速度和更低的功耗。那么,ASIC的生产成本就会更高!

那么其实,可以对上面讲的这些硬件进行一个归类,CPU,GPU叫做通用性芯片。ASIC叫做定制化芯片,而FPGA叫做半定制化芯片。

Google的TPU就是采用了定制化芯片的设计。

其中TPUv1采用了大量的乘法单元,有256x256个8位乘法器。片上有28MB的缓存,能够存储网络的参数和输入。同时,TPU上的数据和指令

说白了,就是将训练好的model拿来定点化做inference。

TPUv2支持了train的功能,并且也能够使用fp进行训练。

讲了这三种组合,其实如果就拿inference来说,FPGA才是合适的硬件。


各种硬件用于前向推理的优缺点

现在来看,要想设计一款适合深度神经网络的芯片,我们需要其具备什么特性呢?

支持主流的视觉任务(inference),不仅仅要支持int8,还要支持fp。

high performance,low engergy,low cost

方便开发和支持主流的DL框架

这里要提的就是地平线自己设计的BPU,它也属于ASIC的范畴。并且支持主流的CV任务。

BPU最大的特点就是设计了弹性的Tensor Core,它能够将那些对于image来说所需要的op硬件化,这些op包括CNN中常见的(卷积,池化等),从而非常高效的去执行这些操作。中间通过一个叫做数据路由桥(Data Routing Bridge)的结构从片上来读取数据,负责数据的传输和调度。同时,整个数据存储资源和计算资源都可以通过编辑器输出的指令来执行调度,从而方便实现各种算法,各种model的结构,和各种不同的任务。

三,如何从算法层面设计高效的神经网络

从AI的解决方案来看存在两种方式:

云端 AI

前端 AI

云端 AI 说的就是把我们的计算放在远程服务器上去执行,然后把最终的计算结果传回本地,这就要求我们的设备时时刻刻联网,并且存在很大的安全问题和计算传输延迟问题,也就是我们通常所说的通信代价。

前端 AI 说的就是设备本身就能进行运算,不需要联网。那么在安全性,实时性,适用性方面都要胜过云端 AI 。但是,他们在功耗,计算,内存存储等方面有很多受限。

其实关于AI 产品落地,还是回到上面硬件部分讲过的内容,如何去寻求一套 低功耗,高性能,低成本的解决方案。

这里拿IPC和TX2进行比较来说明这个问题。

IPC通过网线来供电,功耗非常低,只有12.5w,TX2的功耗是10-15w。TX2虽然在算力和计算成本方面都要胜过IPC,但是TX2的价位对于嵌入式的方案是不能接受的。。。

那么,要想做好前端AI方案(针对embedd AI)设备来说,我们就要在给定功耗(12.5w)和算力(IPC最大能力)的情况下,去优化我们的算法和神经网络模型,来达到符合场景落地的需要。

那么,说白了,我们最终加速网络的目的就是,在网络保持不错性能的的前提下,尽量去降低计算代价和带宽的需求。

关于网络加速方面看songhan的,补。我在cs231n上学到的东西。

网络量化,网络剪枝,参数共享,蒸馏以及模型结构优化。

工业界,用的最多的就是网络量化和模型结构化的方法。

下面重点来讲讲这些方法:

3.1 量化

量化其实说的就是离散化。将我们原先连续变化的量通过近似从而达到离散的目的。

神经网络的量化,值得就是将原先用浮点数表示的情况改成用更低的bit,从而继续完成原先浮点数能够完成的训练和测试。

前面再将神经网络特性的时候,我们也提到了网络本身对于计算精度并没有我们想象的那么敏感。所以,比较常用的方法,就是用fp16代替fp32来做train和inference。

其实,使用fp16去训练,有时候还能得到比fp32更好的精度。从ML的角度来看,量化网络本身就是对数据集正则化的一种方式,可以增强模型的泛化能力,从而提高精度

其实还可以进一步的用int8来取代fp16,这样操作后,带宽只有fp32的四分之一。

当然,如果你不担心精度的损失,那么也可以使用4bit, 2bit, 1bit去代替int8。

神经网络的量化其实可以分为:网络权重的量化和网络特征的量化。

网络权重的量化对于最终的结果输出损失比较小,而特征量化对最终的结果输出损失就比较大。大模型和小模型对量化的敏感程度也不一样,一般小模型会更加敏感。

关于量化想更深入的了解可以看一下下面的这些讲解:

深度学习量化技术科普

Pytorch实现卷积神经网络训练量化(QAT)

MXNet实现卷积神经网络训练量化

深入了解NNIE量化技术

ICCV2019 高通Data-Free Quantization论文解读

EasyQuant 后量化算法论文解读

3.2 模型剪枝和参数共享

可以参考下面的讲解:

如何让你的YOLOV3模型更小更快?

YOLOV3剪枝方法汇总

深度学习算法优化系列八 | VGG,ResNet,DenseNe模型剪枝代码实战

3.3 知识蒸馏

蒸馏的思想非常简单,其实就是用一个小模型来取代一个大模型,从而使得小模型能够实现大模型的效果。大模型在这里一般叫做Teacher Net, 小模型叫做Student Net。从小模型到大模型的学习目标,包括最终的输出层,网络中间的特征结果,以及网络的连接方案。

其实,知识蒸馏本质是一种transfer learning,比直接用小数据从头开始训练一个model要得到更好的效果。

3.4 低秩近似

可以参考:https://blog.csdn.net/kathrynlala/article/details/82943291

3.5 二值化/三值化网络

可以参考下面的讲解:

基于Pytorch构建一个可训练的BNN

基于Pytorch构建三值化网络TWN

低比特量化之XNOR-Net

低比特量化之DoreFa-Net理论与实践

3.6 Winograd 变化

可以参考下面的讲解:

详解Winograd变换矩阵生成原理

详解卷积中的Winograd加速算法

3.7 模型结构化

模型结构化其实是对模型加速最有效的一种方式。

那么关于模型结构优化,又会涉及到很多的知识。

接下来,就要讲讲怎么去设计一个高效的神经网络结构,它需要遵循一些基本原则。

从最初的AlexNet到现在的MobileNetv2,网络的参数从最初的240MB降低到了35MB,

准确率从57%也提高了75%。那么,我们肯定是去设计小的模型结构从而完成相对于大模型难以完成的任务。那么在这个设计的过程中,会涉及哪些基本原则呢?

关于这些,超哥也讲的非常到位,我也总结下:

小模型其实并不一定比大模型运行(inference)的快。

一个网络计算量小,并不代表他就一定运行的快,因为运行速度还和带宽有关,计算量仅仅是其中的一个因素。

那么,结合上面两点,我们就能明白。一个好的,跑起来比较快的网络结构。必须要衡量计算量和带宽的需求。

4. 总结

总结下,如果要设计高效的神经网络结构来部署到硬件平台。那么我们应该尽可能的让网络中的operator去做并行化计算,同时减少这些operator对于带宽的需求。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4572

    浏览量

    98749
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230605
  • AI芯片
    +关注

    关注

    17

    文章

    1652

    浏览量

    34383
收藏 人收藏

    评论

    相关推荐

    用STM32CubeMX导入神经网络,aiRun的indata应该定义成什么格式呢?

    我用STM32CubeMX中的X-Cube-AI, 导入了一个处理时间序列的神经网络网络input是2维数据,如(10,256,2) 在Generate code之后,在main.c文件中,有一个aiRun函数,需要输入一个
    发表于 03-13 07:38

    NanoEdge AI的技术原理、应用场景及优势

    能耗并提高数据安全性。本文将对 NanoEdge AI 的技术原理、应用场景以及优势进行综述。 1、技术原理 NanoEdge AI 的核心技术包括边缘计算、神经网络压缩和低功耗
    发表于 03-12 08:09

    AI加速器架构设计与实现》+第一章卷积神经网络观后感

    AI加速器架构设计与实现》+第一章卷积神经网络观感    在本书的引言中也提到“一图胜千言”,读完第一章节后,对其进行了一些归纳(如图1),第一章对常见的神经网络结构进行了介绍
    发表于 09-11 20:34

    构建神经网络模型的常用方法 神经网络模型的常用算法介绍

    神经网络模型是一种通过模拟生物神经元间相互作用的方式实现信息处理和学习的计算机模型。它能够对输入数据进行分类、回归、预测和聚类等任务,已经广泛应用于计算机视觉、自然语言处理、语音处理等领域。下面将就神经网络模型的概念和工作原理,
    发表于 08-28 18:25 627次阅读

    人工神经网络和bp神经网络的区别

    人工神经网络和bp神经网络的区别  人工神经网络(Artificial Neural Network, ANN)是一种模仿人脑神经元网络结构和功能的计算模型,也被称为
    的头像 发表于 08-22 16:45 3435次阅读

    卷积神经网络模型搭建

    卷积神经网络模型搭建 卷积神经网络模型是一种深度学习算法。它已经成为了计算机视觉和自然语言处理等各种领域的主流算法,具有很大的应用前景。本篇文章将详细介绍卷积神经网络模型的搭建过程,为
    的头像 发表于 08-21 17:11 618次阅读

    卷积神经网络和深度神经网络的优缺点 卷积神经网络和深度神经网络的区别

    深度神经网络是一种基于神经网络的机器学习算法,其主要特点是由多层神经元构成,可以根据数据自动调整神经元之间的权重,从而实现对大规模数据进行预测和分类。卷积
    发表于 08-21 17:07 2335次阅读

    卷积神经网络介绍 什么是卷积神经网络算法

    卷积神经网络介绍 什么是卷积神经网络算法 卷积神经网络涉及的关键技术 卷积神经网络(Convolutional Neural Networ
    的头像 发表于 08-21 16:49 1427次阅读

    卷积神经网络的基本原理 卷积神经网络发展 卷积神经网络三大特点

    卷积神经网络的基本原理 卷积神经网络发展历程 卷积神经网络三大特点  卷积神经网络的基本原理 卷积神经网络(Convolutional Ne
    的头像 发表于 08-21 16:49 1448次阅读

    卷积神经网络模型有哪些?卷积神经网络包括哪几层内容?

    、视频等信号数据的处理和分析。卷积神经网络就是一种处理具有类似网格结构的数据的神经网络,其中每个单元只处理与之直接相连的神经元的信息。本文将对卷积神经网络的模型以及包括的层进行详细
    的头像 发表于 08-21 16:41 1511次阅读

    卷积神经网络的应用 卷积神经网络通常用来处理什么

    的前馈神经网络,卷积神经网络广泛用于图像识别、自然语言处理、视频处理等方面。本文将对卷积神经网络的应用进行详尽、详实、细致的介绍,以及卷积神经网络
    的头像 发表于 08-21 16:41 3997次阅读

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法 卷积神经网络(Convolutional Neural Network,CNN)是一种基于深度学习的人工
    的头像 发表于 08-17 16:30 919次阅读

    如何使用TensorFlow将神经网络模型部署到移动或嵌入式设备

    有很多方法可以将经过训练的神经网络模型部署到移动或嵌入式设备。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    发表于 08-02 06:43

    三个最流行神经网络

    在本文中,我们将了解深度神经网络的基础知识和三个最流行神经网络:多层神经网络(MLP),卷积神经网络(CNN)和递归神经网络(RNN)。
    发表于 05-15 14:19 1175次阅读
    三个最流行<b class='flag-5'>神经网络</b>

    MEMS神经网络:以零电路和低功耗同时执行传感和计算任务

    提出了一种集成传感和计算功能的MEMS神经网络以同时执行加速度传感和分类任务,这种一体化结构以零电路和低功耗运行。
    发表于 05-15 09:58 281次阅读
    MEMS<b class='flag-5'>神经网络</b>:以零电路和<b class='flag-5'>低功耗</b>同时执行传感和计算任务