深度学习模型压缩与优化加速
1. 簡介
深度學習(Deep Learning)因其計算復雜度或參數(shù)冗余,在一些場景和設備上限制了相應的模型部署,需要借助模型壓縮、優(yōu)化加速、異構計算等方法突破瓶頸。
- 模型壓縮算法能夠有效降低參數(shù)冗余,從而減少存儲占用、通信帶寬和計算復雜度,有助于深度學習的應用部署,具體可劃分為如下幾種方法(后續(xù)重點介紹剪枝與量化):
- 線性或非線性量化:1/2bits, int8 和 fp16等;
- 結構或非結構剪枝:deep compression, channel pruning 和 network slimming等;
- 其他:權重矩陣的低秩分解,知識蒸餾與網(wǎng)絡結構簡化(squeeze-net, mobile-net, shuffle-net)等;
- 模型優(yōu)化加速能夠提升網(wǎng)絡的計算效率,具體包括:
- Op-level的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;
- Layer-level的快速算法:Sparse-block net [1] 等;
- 優(yōu)化工具與庫:TensorRT (Nvidia), Tensor Comprehension (Facebook) 和 Distiller (Intel) 等;
- 異構計算方法借助協(xié)處理硬件引擎(通常是PCIE加速卡、ASIC加速芯片或加速器IP),完成深度學習模型在數(shù)據(jù)中心或邊緣計算領域的實際部署,包括GPU、FPGA或DSA (Domain Specific Architecture) ASIC等。異構加速硬件可以選擇定制方案,通常能效、性能會更高,目前市面上流行的AI芯片或加速器可參考 [2]。針對數(shù)據(jù)中心部署應用,通常選擇通用方案,會有較完善的生態(tài)支持,例如NVIDIA GPU的CUDA生態(tài),或者Xilinx即將推出的xDNN生態(tài):
2. 網(wǎng)絡剪枝
深度學習模型因其稀疏性,可以被裁剪為結構精簡的網(wǎng)絡模型,具體包括結構性剪枝與非結構性剪枝:、
- 非結構剪枝:通常是連接級、細粒度的剪枝方法,精度相對較高,但依賴于特定算法庫或硬件平臺的支持,如Deep Compression [5], Sparse-Winograd [6] 算法等;
- 結構剪枝:是filter級或layer級、粗粒度的剪枝方法,精度相對較低,但剪枝策略更為有效,不需要特定算法庫或硬件平臺的支持,能夠直接在成熟深度學習框架上運行。如局部方式的、通過layer by layer方式的、最小化輸出FM重建誤差的Channel Pruning [7], ThiNet [8], Discrimination-aware Channel Pruning?[9];全局方式的、通過訓練期間對BN層Gamma系數(shù)施加L1正則約束的Network Slimming [10];全局方式的、按Taylor準則對Filter作重要性排序的Neuron Pruning [11];全局方式的、可動態(tài)重新更新pruned filters參數(shù)的剪枝方法 [12];
- ?
3. 模型量化
模型量化是指權重或激活輸出可以被聚類到一些離散、低精度的數(shù)值點上,通常依賴于特定算法庫或硬件平臺的支持:
- 二值化網(wǎng)絡:XNORnet [13], ABCnet with Multiple Binary Bases [14], Bin-net with High-Order Residual Quantization [15], Bi-Real Net [16];
- 三值化網(wǎng)絡:Ternary weight networks [17], Trained Ternary Quantization [18];
- W1-A8 或 W2-A8量化:?Learning Symmetric Quantization [19];
- INT8量化:TensorFlow-lite [20], TensorRT [21];
- 其他(非線性):Intel INQ [22], log-net, CNNPack [23] 等;
參考文獻:
其中知識蒸餾相關的討論可參考:
https://blog.csdn.net/nature553863/article/details/80568658
Discrimination-aware Channel Pruning是一種結合鑒別力感知輔助Loss的分階段Channel Selection剪枝策略,具體可參考:
https://blog.csdn.net/nature553863/article/details/83822895
?
References
[1]https://arxiv.org/abs/1801.02108,, Github:?https://github.com/uber/sbnet
[3] ?https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/
[4]?https://devblogs.nvidia.com/int8-inference-autonomous-vehicles-tensorrt/
[5]?https://arxiv.org/abs/1510.00149
[6] ?https://arxiv.org/abs/1802.06367,??https://ai.intel.com/winograd-2/, Github: https://github.com/xingyul/Sparse-Winograd-CNN
[7] https://arxiv.org/abs/1707.06168,??Github:https://github.com/yihui-he/channel-pruning
[8]?https://arxiv.org/abs/1707.06342
[9]?https://arxiv.org/abs/1810.11809, Github:?https://github.com/Tencent/PocketFlow
[10]?https://arxiv.org/abs/1708.06519,? Github:?https://github.com/foolwood/pytorch-slimming
[11]?https://arxiv.org/abs/1611.06440,? Github:?https://github.com/jacobgil/pytorch-pruning
[12]?http://xuanyidong.com/publication/ijcai-2018-sfp/
[13] https://arxiv.org/abs/1603.05279,??Github: https://github.com/ayush29feb/Sketch-A-XNORNet
?????????????????????????????????????????????????????????????Github:?https://github.com/jiecaoyu/XNOR-Net-PyTorch
[14] https://arxiv.org/abs/1711.11294,??Github: ?https://github.com/layog/Accurate-Binary-Convolution-Network
[15] https://arxiv.org/abs/1708.08687
[16]?https://arxiv.org/abs/1808.00278, Github:https://github.com/liuzechun/Bi-Real-net
[17]?https://arxiv.org/abs/1605.04711
[18] https://arxiv.org/abs/1612.01064,??Github: https://github.com/czhu95/ternarynet
[19] http://phwl.org/papers/syq_cvpr18.pdf,??Github: https://github.com/julianfaraone/SYQ
[20] https://arxiv.org/abs/1712.05877
[21] http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf
[22] https://arxiv.org/abs/1702.03044
[23] https://papers.nips.cc/paper/6390-cnnpack-packing-convolutional-neural-networks-in-the-frequency-domain
?
參考:https://blog.csdn.net/nature553863/article/details/81083955
總結
以上是生活随笔為你收集整理的深度学习模型压缩与优化加速的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样看笔记本上有无无线网卡?
- 下一篇: 2021年安徽省安全员C证考试资料及安徽