1. 简介

深度学习(Deep Learning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、优化加速、异构计算等方法突破瓶颈。

  • 模型压缩算法能够有效降低参数冗余,从而减少存储占用、通信带宽和计算复杂度,有助于深度学习的应用部署,具体可划分为如下几种方法(后续重点介绍剪枝与量化):
  1. 线性或非线性量化:1/2bits, int8 和 fp16等;
  2. 结构或非结构剪枝:deep compression, channel pruning 和 network slimming等;
  3. 网络结构搜索 (NAS: Network Architecture Search):DARTS, DetNAS、NAS-FCOS、Proxyless NAS和NetAdapt等;
  4. 其他:权重矩阵的低秩分解,知识蒸馏与网络结构简化(squeeze-net, mobile-net, shuffle-net)等;
  • 模型优化加速能够提升网络的计算效率,具体包括:
  1. Op-level的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;
  2. Layer-level的快速算法:Sparse-block net [1] 等;
  3. 优化工具与库:TensorRT (Nvidia), TVM (Tensor Virtual Machine), Tensor Comprehension (Facebook) 和 Distiller (Intel) 等;
  • 异构计算方法借助协处理硬件引擎(通常是PCIE加速卡、ASIC加速芯片或加速器IP),完成深度学习模型在数据中心或边缘计算领域的实际部署,包括GPU、FPGA或DSA (Domain Specific Architecture) ASIC等。异构加速硬件可以选择定制方案,通常能效、性能会更高,目前市面上流行的AI芯片或加速器可参考 [2]。显然,硬件性能提升带来的加速效果非常直观,例如2080ti与1080ti的比较(以复杂的PyramidBox人脸检测算法为例,约提速36%);另外,针对数据中心部署应用,通常选择通用方案,会有完善的生态支持,例如NVIDIA的CUDA,或者Xilinx的xDNN。

2. 网络剪枝

深度学习模型因其稀疏性过拟合倾向,可以被裁剪为结构精简的网络模型,具体包括结构性剪枝与非结构性剪枝:

  • 非结构剪枝:通常是连接级、细粒度的剪枝方法,精度相对较高,但依赖于特定算法库或硬件平台的支持,如Deep Compression [5], Sparse-Winograd [6] 算法等;
  • 结构剪枝:是filter级或layer级、粗粒度的剪枝方法,精度相对较低,但剪枝策略更为有效,不需要特定算法库或硬件平台的支持,能够直接在成熟深度学习框架上运行:
  1. 如局部方式的、通过layer by layer方式的、最小化输出FM重建误差的Channel Pruning [7], ThiNet [8], Discrimination-aware Channel Pruning [9];
  2. 全局方式的、通过训练期间对BN层Gamma系数施加L1正则约束的Network Slimming [10];
  3. 全局方式的、按Taylor准则对Filter作重要性排序的Neuron Pruning [11];
  4. 全局方式的、可动态重新更新pruned filters参数的剪枝方法 [12];
  5. 基于GAN思想的GAL方法 [24],可裁剪包括Channel, Branch或Block等在内的异质结构;
  6. 借助Geometric Median确定卷积滤波器冗余性的剪枝策略 [28];
  7. 基于Reinforcement Learning (RL),实现每一层剪枝率的连续、精细控制,并可结合资源约束完成自动模型压缩 [31];

Channel Pruning为例,结构剪枝的规整操作如下图所示,可兼容现有的、成熟的深度学习框架:

 

 

3. 模型量化

模型量化是指权重或激活输出可以被聚类到一些离散、低精度(reduced precision)的数值点上,通常依赖于特定算法库或硬件平台的支持:

  • 二值化网络:XNORnet [13], ABCnet with Multiple Binary Bases [14], Bin-net with High-Order Residual Quantization [15], Bi-Real Net [16];
  • 三值化网络:Ternary weight networks [17], Trained Ternary Quantization [18];
  • W1-A8 或 W2-A8量化: Learning Symmetric Quantization [19];
  • INT8量化:TensorFlow-lite [20], TensorRT [21], Quantization Interval Learning [25];
  • INT4量化:NVIDIA Iterative Online Calibration [29], LSQ [30];
  • 其他(非线性):Intel INQ [22], log-net, CNNPack [23] 等;
  • Post-training量化策略:针对预训练模型,通过适当调整kernel参数分布、或补偿量化误差,可有效提升量化效果;
  • 关于量化的比较系统性的论述,参考论文:Quantizing deep convolutional networks for efficient inference: A whitepaper;

若模型压缩之后,推理精度存在较大损失,可以通过fine-tuning予以恢复,并在训练过程中结合适当的Tricks,例如Label Smoothing、Mix-up、Knowledge Distillation、Focal Loss等。 此外,模型压缩、优化加速策略可以联合使用,进而可获得更为极致的压缩比与加速比。例如结合Network Slimming与TensorRT int8优化,在1080ti Pascal平台上,Resnet101-v1d在压缩比为1.4倍时(Size=170MB->121MB,FLOPS=16.14G->11.01G),经TensorRT int8量化之后,推理耗时仅为7.4ms(Batch size=8)。
 

其中知识蒸馏(Knowledge Distillation)相关的总结可参考:

https://blog.csdn.net/nature553863/article/details/80568658

其中网络结构搜索(NAS: Network Architecture Search)相关的总结可参考:

https://blog.csdn.net/nature553863/article/details/107321572

https://blog.csdn.net/nature553863/article/details/103825717

其中Post-training量化策略可参考(PAI PTQ工具):

https://blog.csdn.net/nature553863/article/details/109772111

移动端通过OAQ量化训练,可进一步实现INT8计算加速:

https://blog.csdn.net/nature553863/article/details/112479364

另外,Transformer端侧模型压缩可参考:

https://blog.csdn.net/nature553863/article/details/106855786
 

参考[1]:深度学习模型压缩与优化加速(Model Compression and Acceleration Overview)

更多推荐