模型加速概述与模型裁剪算法技术解析模型加速概述与模型裁剪算法技术解析
简介
将深度学习模型应用于自动驾驶的感知任务上,模型预测结果的准确性和实时性是两个重要指标。一方面,为了确保准确可靠
的感知结果,我们会希望选择多个准确性尽可能高的模型并行执行,从而在完成多种感知任务的同时,提供一定的冗余度,但
这不可避免的意味着更高的计算量和资源消耗。另一方面,为了确保车辆在各种突发情况下都能及时响应,我们会要求感知模
块的执行速度必须与自动驾驶场景的车速相匹配,这就对深度学习模型的实时性提出了很高的要求。另外,在保证高准确性和
高实时性的前提下,我们还希望降低模型对计算平台的算力、内存带宽、功耗等方面的要求,从而提高自动驾驶系统整体的效
能。为了应对上述挑战,我们需要从各种角度对深度学习模型进行压缩和加速。实际上,模型压缩和加速是一个相当庞大且活
跃的研究领域,包含众多的研究方向。本文接下来会简要介绍目前模型压缩和加速领域的主要技术方向,并聚焦于模型裁剪算
法这一方向进行详细探讨。在讨论具体的算法之前,首先让我们简要回顾一下深度学习模型的理论复杂度评价指标,以及影响
模型实际运行性能的各种因素。
1.复杂度分析
深度学习模型的复杂度主要体现在计算量、访存量和参数量上。
计算量:即模型完成一次前向传播所需的浮点乘加操作数,其单位通常写作 FLOPs (FLoating-point OPerations)。对卷积神经
网络而言,卷积操作通常是整个网络中计算量最为密集的部分,例如 VGG16 [1] 网络 99% 的计算量都来自于其卷积层。假设
卷积层的输出特征图空间尺寸为 H × W,输入通道数为 Cin,卷积核个数(输出通道数)为 Cout,每个卷积核空间尺寸为 KH
× KW,那么该卷积层的理论计算量为 H × W × KH × KW × Cin × Cout FLOPs。可以看到,卷积层的计算量由输出特征图的
大小、卷积核的大小以及输入和输出通道数所共同决定。对输入特征图进行下采样,或者使用更小、更少的卷积核都可以明显
降低卷积层的计算量。
访存量:即模型完成一次前向传播过程中发生的内存交换总量,单位是 Byte。访存量的重要性经常会被人们忽视,实际上,
模型在逐层进行前向传播的过程中,需要频繁的读写每层的输入特征图、权重矩阵和输出特征图,而读写速度取决于计算平台
的内存带宽。如果我们在尝试加速模型的时候,只关注减少模型计算量,而没有等比例减小其访存量,那么依据 Roofline [2]
理论,这将导致模型在实际运行过程中,发生单位内存交换所对应的计算量下降,模型会滑向越来越严重的内存受限状态(即
下图中的红色区域),从而无法充分的利用计算平台的算力,因此最后观察到的实际加速比与理论计算量的减小并不成正比。
图1:Roofline Model(图中左侧红色区域为带宽受限,右侧绿色区域为算力受限)
参数量:即模型所含权重参数的总量,单位是 Byte,表现为模型文件的存储体积大小。全连接层通常是整个网络参数量最为
密集的部分,例如 VGG16 网络中超过 80% 的参数都来自于最后三个全连接层。资源严重受限的移动端小型设备会对模型文
件的大小较为敏感。
并行度:如果以 GPU 作为计算平台,那么由于 GPU 本身所具有的高吞吐特性,模型的并行度会成为影响模型实际运行效率
的一个重要方面。模型的并行度越高,意味着模型越能够充分利用 GPU 的算力,执行效率越高。影响并行度的因素有很多,