NeurlPS2019 “高效能的深度神经网络处理:从算法到硬件架构”学习笔记和导读

简介: 前言 NeurlPS 2019 大会刚结束,看了看相关的内容,绝大部分是各种前沿理论的文章。这些和我工作的内容还有比较长的距离:不论是知识领域空间上的距离,还是相关理论转为工业界实践的时间上的距离。但有两篇还是吸引了我的注意。一篇是用于普及的教程:“Efficient Processing of Deep Neural Networks: from Algorithms to Har

前言

NeurlPS 2019 大会刚结束,看了看相关的内容,绝大部分是各种前沿理论的文章。这些和我工作的内容还有比较长的距离:不论是知识领域空间上的距离,还是相关理论转为工业界实践的时间上的距离。但有两篇还是吸引了我的注意。一篇是用于普及的教程:“Efficient Processing of Deep Neural Networks: from Algorithms to Hardware Architectures". 另一篇是PyTorch的简短设计理念的介绍:“PyTorch: An Imperative Style, High-Performance Deep Learning Library“。今天,谈一下对前一篇的细读和体会。

教程是一系列的主题的集合,主题是从算法模型到硬件架构,以及两者如何共同设计(co-design),高效地处理深度神经网络。涉及的面还是比较广的。演讲人是Vivienne Sze,MIT副教授,来自MIT的高效能多媒体组。里面的内容是团队的合作研究的一个总结。

教程的主要内容大家可以仔细看视频,也有对应的Slides。Slides里面有很多的链接,可以找到对应的论文,代码等,非常有用。他们团队的主页在这里rle.mit.edu/eems/public。里面有对应的材料。

总结

首先,上干货图,我总结的学习思维导图。

思维导图-Efficient Processing of DNNs: From Algorithm to HW

总体来说,里面谈到的内容挺广的了。因为是作为教程,里面的内容偏初级,偏理论一些,非常适合用于学习和总结。我选择一些自己认为比较感兴趣,或者值得讨论的地方来和大家一起讨论一下,并做适当地展开。

1. DNN运算

教程里的大部分篇幅强调的是MAC(Multiply and Accumulate)。为此,还特别地提到了矩阵乘在recurrent和attention层也使用得非常的多。可能一方面因为这是初级教程,另一方面也是因为有些材料是两年前就有的,稍显有些过时,属于所谓AI1.0的重点,所以会过于强调MAC。

当前AI2.0阶段,应用更丰富,作为对比,我们可以看看工业界的数据。来自Facebook的数据:

我们实际上也是同样遇到这样一个问题:随着深度神经网络在各方面的应用越来越多,DNN里面的操作也变得多样化起来。工业界对这些问题更需要进一步的研究:包括各类应用场景中,DNN的各类操作的比例,包括当前的以及未来一段时间的。

然后,对这个问题的解决有多种方式,并且这些方案可能结合起来:

  • 采用多种可并行的硬件计算单元:MatMul, vector op, reshape/transpose, etc. 做好比例的调研工作。
  • 灵活可变的(flexible)微架构(HW pipe),也就是同一个硬件模块可以用作不同的操作。可以由软件,比如编译器调整比例,驱动控制使用类型。
  • 软件栈做优化,包括算法,框架,编译器等,将一种类型的操作转化成另一种类型的操作,以适应硬件的能力。

2. 主要的效能评估标准

教程关于效能的评估标准谈得比较的全面,覆盖了计算准确性,吞吐,延迟,能耗,硬件费用,以及应用的灵活性。详细地介绍了一些对应的主要的设计目标,如何达到更高效的DNN处理器。

同时,教程也谈到了一些评估的规范标准,特别强调了各个度量标准有自己独立的意义,所有的评估度量都需要综合考虑,遗漏其中的一些度量会导致评估的不公平。

这通常需要一系列比较复杂的基准测试,比如相对比较成熟和全面的MLperf,它通过多种不同的方式来尽量地让评估全面和公平。比如推理基准测试,

  • 包含4种模式:single stream, multiple stream, server, offline
  • 包含多种不同类型的模型,覆盖image classification,object detection,语言模型,翻译,语音识别,情感分析。
  • 定义了比较详细的一些规则。(github.com/mlperf/polic
  • 可以提供不同的scale: x1, x2, x4, x8,...,x32等多种成绩

除了使用主流的Benchmark外,在工业界,针对激烈的市场竞争,产品设计者需要考虑的是在多维评估度量之间如何定位自己的产品。通常会根据设计者对相应的产品定位,对上面提到的评估度量排出一定的优先级。比如,性能优先,还是通用性优先等。通常,还会使用一些组合的度量,比如PPA(Power-Performance-Area: power area per w)。会正对这些不同的度量具体化,给出一个可以度量的数字以明确设计目标。

3. 高效的数据流

这非常非常重要的一个话题。教程首先强调DNN计算,存储访问是瓶颈,数据流动是非常昂贵的。教程提供了四层存储架构(RF-寄存器,PE-本地存储,Buffer-全局存储,DRAM)的访问能量消耗比。从矩阵乘法MAC计算的角度,总结了各种类型的数据重用方法。这些数据重用的方法很基础,在各种不同的架构中,可能都有一些使用,虽然具体的方法有些差别。

教程在最后“Other Platforms"章节里提到了ASIC使用定制的存储层次架构和数据流来减少数据的移动。但比较遗憾的针对这个话题,教程没有继续展开深入的讨论。

导读:

近存计算(NMC: Near-memory Computing):

https://arxiv.org/pdf/1908.02640.pdf​arxiv.org

http://www.emc2-ai.org/assets/docs/neurips-19/emc2-neurips19-verma-talk.pdf​www.emc2-ai.org

 

存内计算(IMC: In-memory Computing) NeurlPS正好也有一篇IMC的文章:

https://www.emc2-workshop.com/assets/docs/neurips-19/emc2-neurips19-verma-talk.pdf​www.emc2-workshop.com

 

4. 算法硬件协同设计(Co-Design)

这是整个教程的后半部分。Sze教授从几个主要的协同设计点来讲述DSH(Domain Specific Hardware)的协同设计思想和实践:

首先是如何选择合适的精度,包括混合精度以及可变精度的一些实现。降低计算精度的目的是减少操作数的存储和计算量,教程里给出了各种精度乘/加/读的能量消耗。也提到了量化的问题。

其次如何利用和降低稀疏性。不过压缩的问题最近也不是热点了。这要是硬件代价和收益的对比比较大。

然后用了较大的篇幅讲高效DNN的网络架构。包括手动设计和自动的网路架构搜索。后面这个话题挺有意思的,虽然和我的工作没有直接关系,但这种自动搜索的理念是很方便应用在其他场景的。

协同设计时,很多方面需要考虑的是如何做平衡(Tradeoff):性能和延迟,延迟和准确性,硬件成本和精度,等等。做难的一个方面,是既要保证主流DNN计算高效能,又要保证整个设计的灵活性和扩展性,以能满足日益增长的多种类型的计算需求。

感兴趣的同学可以去学习一下相关的两个架构里的设计思想:

导引1: Graphcore IPU,已经在微软 AZURE 上开测。

https://www.graphcore.ai/​www.graphcore.ai

 

IPU创新的使用BSP(Bulk Synchronous Parallel)架构,在数据流处理上完全不同于传统的系统。感兴趣的同学可以去仔细阅读。我也还在学习当中。

导引2:AWS Inferentia推理芯片,存储层次和互联都是亮点,可惜我还没有找到更进一步材料。

https://www.eetimes.com/aws-rolls-out-ai-inference-chip/​www.eetimes.com

 
AWS: Each chip has 4 “Neuron Cores” alongside “a large amount” of on-chip memory. There is an SDK for the chip which can split large models across multiple chips using a high-speed interconnect.

讨论

整体来说这一教程作为初级入门学习非常好。建议感兴趣的同学可以慢慢品读一下。如果我来介绍的话,我还会多研究学习工业界Facebook,Graphcore,Habana,AWS等,加上其他的一些其他的话题,比如

软硬件的协同设计

首先是软件和硬件的协同设计。在上层应用和研究者眼里,通常会认为算法和硬件就是DNN计算的两大块。其实从真正的从业人员的角度来看,我们跟偏向于算法-软件-硬件的协同设计。比如上面引用的Facebook的在AI Hardware Submit 2019的一篇演讲: 《AI System Co-Design: How to Balance Performance & Flexibility》。演讲人是Facebook的AI Systems Co-Design Director。演讲里比较明确地谈论了一些软件和硬件协同的思想和方法。

DSH的架构,必然加大上层应用和底层硬件之间的逻辑距离。从框架,到DSL,通过编译器到特有的ISA。中间的转化和对接工作,是特定领域的软硬件协同核心价值所在。只有这个从算法到软件栈到硬件的通路设计得合理和高效,才能充分体现DSA的意义。

• Dave Kuck, software architect for Illiac IV (circa 1975)
“What I was really frustrated about was the fact, with Iliac IV, programming the machine was very difficult and the architecture probably was not very well suited to some of the applications we were trying to run. The key idea was that I did not think we had a very good match in Iliac IV between applications and architecture.”
• Achieving cost-performance in this era of DSAs will require matching the applications, languages, architecture, and reducing design cost.

很多的公司都在进行软硬件协同设计的实践,特别是AI方面的ASIC,FPGA。这些实践离理想的软硬件协同设计概念还比较远,但不可否认,这些实践在芯片和软件栈上的落地,推动了这一理念的发展。通过对相关行业和公司的研究,可以比较明显地看到,在硬件/芯片设计前期,如果脱离软件(框架,编译,驱动)的协同,即使硬件/芯片成功出来了,也会有很大的业务落地问题,包括但不限于:

  • 算法对接硬件难,编译,驱动实现工作量大,
  • 应用编程难,编程模型和编程接口不好用
  • 硬件性能很难发挥,算力的利用率低下

这大概就是大家在实践中体会到的“硬件好做,软件困难”的问题。而实践好的设计,在前期如果协同考虑和系统性地解决了一些主要问题,就能比较好的加速后期业务落地。

导引:

唐杉:AI芯片“软硬件协同设计”的理想与实践

semiengineering.com/har

总结

在原来的思维导图的基础上,我搜集并添加了相关的一些资料,产生一个新的知识图谱:

 

相关文章
|
1月前
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
435 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
2月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
92 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
6天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
31 5
|
20天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
119 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
55 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
1月前
|
机器学习/深度学习 算法 5G
基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP
本文介绍了基于Matlab 2022a的几种信道估计算法仿真,包括LS、OMP、NOMP、CoSaMP及改进的BP神经网络CoSaMP算法。各算法针对毫米波MIMO信道进行了性能评估,通过对比不同信噪比下的均方误差(MSE),展示了各自的优势与局限性。其中,BP神经网络改进的CoSaMP算法在低信噪比条件下表现尤为突出,能够有效提高信道估计精度。
36 2
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
102 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面

热门文章

最新文章