TensorRT模型优化部署 (八)--模型剪枝Pruning

这篇具有很好参考价值的文章主要介绍了TensorRT模型优化部署 (八)--模型剪枝Pruning。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

第一章 TensorRT优化部署(一)–TensorRT和ONNX基础
第二章 TensorRT优化部署(二)–剖析ONNX架构
第三章 TensorRT优化部署(三)–ONNX注册算子
第四章 TensorRT模型优化部署(四)–Roofline model
第五章 TensorRT模型优化部署(五)–模型优化部署重点注意
第六章 TensorRT模型优化部署(六)–Quantization量化基础(一)
第七章 TensorRT模型优化部署(七)–Quantization量化(PTQ and QAT)(二)
第八章 TensorRT模型优化部署 (八)–模型剪枝Pruning



前言

自学视频笔记,专题内容后续有补充。


一、模型剪枝是什么?

模型剪枝是不同于量化的另外一种模型压缩的方式。如果说“量化”是通过改变权重和激活值的表现形式从而让内存占用变小和计算变快的话,“剪枝”则是直接“删除”掉模型中没有意义的,或者意义较小的权重,来让推理计算量减少的过程。更准确来说,是skip掉一些没有必要的计算。
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习
模型剪枝的目的:
主要是因为学习的过程中会产生过参数化导致会产生一些意义并不是很大的权重,或者值为0的权重(ReLU)。对于这些权重所参与的计算是占用计算资源且没有作用的。需要想办法找到这些权重并让硬件去skip掉这些权重所参与的计算。
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习
如图,我们可以把一个dense里面的不重要的权重归0,然后压缩,从88压缩成84和索引,再将压缩好的权重与激活值进行计算,就可以skip掉一些不重要的权重。
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习
在剪枝前一般是以0为中心呈高斯分布,剪枝后0附近的权重就稀疏了。

二、模型剪枝流程

  1. 获取一个已经训练好的初始模型
  2. 对这个模型进行剪枝
  3. 对剪枝后的模型进行fine-tuning
  4. 获取到一个压缩的模型

2.1 对模型进行剪枝

  • 可以通过训练的方式让DNN去学习哪些权重是可以归零的(使用L1 regularization和BN中的scaling factor让权重归零)
  • 可以通过自定义一些规则,手动的有规律的去让某些权重归零.(对一个1x4的vector进行2:4的weight prunning)

2.2 对剪枝后的模型进行fine-tuning

有很大的可能性,在剪枝后初期的网络的精度掉点比较严重,则需要fine-tuning这个过程来恢复精度,Fine-tuning后的模型有可能会比之前的精度还要上涨。

2.3 获取到一个压缩的模型

如果压缩不满足要求可以回到步骤2再次剪枝,然后fine-tuning,压缩,直至满足要求。
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

2.4 模型剪枝和量化

模型剪枝是可以配合着量化一起进行的。

TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

三、模型剪枝的分类

按照减枝的方法按照一定规律与否

{ 结构化减枝 非结构化减枝 \left\{ \begin{array}{l} 结构化减枝 \\ \\ 非结构化减枝 \\ \end{array}\right. 结构化减枝非结构化减枝

按照减枝的粒度与强度

{ 粗粒度减枝 细粒度减枝 \left\{ \begin{array}{l} 粗粒度减枝 \\ \\ 细粒度减枝 \\ \end{array}\right. 粗粒度减枝细粒度减枝

3.1 Coarse Grain Pruning (粗粒度剪枝)

粗粒度剪枝包括Channel/Kernel Pruning,但Channel/Kernel Pruning也是结构化减枝(Structured pruning)。

TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

Kernel Pruning也就是直接把某些卷积核给去除掉,比较常见的方法就是通过L1Norm寻找权重中影响度比较低的卷积核。Channel Pruning就是把部分channel去除掉 。

Coarse Grain Pruning的优势劣势

  • 优势:
    不依赖于硬件,可以在任何硬件上跑并且得到性能的提升
  • 劣势:
    1. 由于减枝的粒度比较大(卷积核级别的),所以有潜在的掉精度的风险
    2. 不同DNN的层的影响程度是不一样的
    3. 减枝之后有可能反而不适合硬件加速(比如Tensor Core的使用条件是channel是8或者16的倍数)

3.1 Fine Grain Pruning(细粒度剪枝)

Fine Grain Pruning(细粒度剪枝)主要是对权重的各个元素本身进行分析减枝。这里面可以分为结构化减枝(structed)与非结构化减枝(unstructed)。

  1. 结构化减枝

    Vector-wise的减枝: 将权重按照4x1的vector进行分组,每四个中减枝两个的方式减枝权重 Block-

    wise的减枝: 将权重按照2x2的block进行分区,block之间进行比较的方式来减枝block

  2. 非结构化减枝

    Element-wise的减枝:每一个每一个减枝进行分析,看是不是影响度比较高

TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

Fine Grain Pruning的优势劣势

  • 优势:
    相比于Coarse Grain Pruning,精度的影响并不是很大
  • 劣势:
    1. 需要特殊的硬件的支持(Tensor Core可以支持sparse)
    2. 需要用额外的memory来存储哪些index是可以保留计算的
    3. memory的访问不是很效率(跳着访问)数)
    4. 支持sparse计算的硬件内部会做一些针对sparse的tensor的重编,这个会比较耗时

四、channel-level pruning

原文地址:https://arxiv.org/pdf/1708.06519.pdf

结构化剪枝中比较常用以及使用起来比较简单的方式是channel-level pruning,不依赖于硬件的特
性可以简单的实现粗粒度的剪枝。

TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习
通过使用BN中的scaling factor,与使用L1-regularization的训练可以让权重趋向零这一特点,找到conv中不是很重要的channel,实现channel-level的pruning。通过对scaling factor进行L1正则,这里面的𝐶𝑖2和𝐶𝑖4会逐渐趋向零,我们可以认为这些channel不是很重要,可以称为pruning的候选。

4.1 L1 & L2 regularization

两者都是通过在loss损失函数中添加L1/L2范数(L1/L2-norm),实现对权重学习的惩罚(penalty)来限制权重的更新方式。根据L1/L2范数的不同,两者的作用也是不同的。训练的目的是让loss function逐渐变小。

• L1 regularization: 可以用来稀疏参数,或者说让参数趋向零。Loss function的公式是:
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

• L2 regularization: 可以用来减少参数值的大小。Loss function的公式是:
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

4.2 BN中的scaling factor

Batch normalziation一般放在conv之后,对conv的输出进行normalization。整个计算是channel-wise的,所以每一个channel都会有自己的BN参数(均值、方差、缩放因子、偏移因子)。如果BN之后发现某一个channel的scaling非常小,或者为零,可以认为这个channel做参与的计算并没有非常大强度的改变/提取特征,并不是那么重要。

使用BN和L1-norm对模型的权重进行计算以及重要度排序

在channel-wise pruning中,同样使用L1-norm作为惩罚项添加到loss中,但是L1-norm的参数不再是每一个权重,而是BN中对于conv中每一个channel的scaling factor。从而在学习过程中让scaling factor趋向零,并最终变为零。(负的scaling factor会变大,正的scaling factor会变小)。

TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习
整个pruning的过程中𝜆和𝑐ℎ𝑎𝑛𝑛𝑒𝑙的剪枝力度是超参,需要不断的实验找到最优。𝜆表示的是在
loss中L1-norm这个penalty所占的比重。𝜆越大就整个模型就会越趋近稀疏。

对于scaling factor不是很大的channel,在pruning的时候可以把这些channel直接剪枝掉,但同时也需要把这些channel所对应的input/outputd的计算也skip掉。最终得到一个紧凑版的网络。这个方法比较方便去选择剪枝的力度,通过不断的实验找到最好的剪枝百分比。

• 0% pruning
• 25% pruning
• 50% pruning
• 75% pruning

注意:

  1. 刚剪枝完的网络,由于权重信息很多信息都没了,所以需要fine-tuning来提高精度(需要使用mask)

  2. 剪枝完的channel size可能会让计算密度变低(64channel通过75% pruning后变成16channel)

  3. pruning后的channel尽量控制在64的倍数

    • 要记住最大化tensor core的使用
    • 对哪些层可以大力度的pruning需要进行sensitive analysis
    • 要记住DNN中哪些层是敏感层

五、Pruning和fine-tuning

Pruning
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习

fine-tuning
TensorRT模型优化部署 (八)--模型剪枝Pruning,TensorRT模型优化部署,剪枝,算法,机器学习
先训练,更新权重,然后根据weight mask 决定哪部分更新,与weight mask相乘,为1的部分不变,为0的相乘后为0。


总结

本章为专题内容,主要介绍TensorRT优化部署,可移步专题查看其他内容。文章来源地址https://www.toymoban.com/news/detail-807632.html

到了这里,关于TensorRT模型优化部署 (八)--模型剪枝Pruning的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)

    2022.10.30 复现TPH-YOLOv5 2022.10.31 完成替换backbone为Ghostnet 2022.11.02 完成替换backbone为Shufflenetv2 2022.11.05 完成替换backbone为Mobilenetv3Small 2022.11.10 完成EagleEye对YOLOv5系列剪枝支持 2022.11.14 完成MQBench对YOLOv5系列量化支持 2022.11.16 完成替换backbone为EfficientNetLite-0 2022.11.26 完成替换backbone为

    2024年01月17日
    浏览(68)
  • 模型优化之模型剪枝

    一、概述 模型剪枝按照结构划分,主要包括结构化剪枝和非结构化剪枝: (1)结构化剪枝:剪掉神经元节点之间的不重要的连接。相当于把权重矩阵中的单个权重值设置为0。 (2)非结构化剪枝:把权重矩阵中某个神经元节点去掉,则和神经元相连接的突触也要全部去除。

    2024年02月14日
    浏览(43)
  • 【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)

    在零和博弈(有完整信息的,确定的、轮流行动的,两个参与者收益之和为0的博弈)中,双方都希望自己获胜,因此每一步都选择对自己最有利,对对方最不利的做法。 假设我们是参与博弈的一方。我们用静态估计函数 f ( p ) f(p) f ( p ) 来估计博弈双方的态势: 有利于我方的

    2023年04月16日
    浏览(38)
  • 【深度学习之模型优化】模型剪枝、模型量化、知识蒸馏概述

            模型部署优化这个方向其实比较宽泛。从模型完成训练,到最终将模型部署到实际硬件上,整个流程中会涉及到很多不同层面的工作,每一个环节对技术点的要求也不尽相同。但本质的工作无疑是通过减小模型大小,提高推理速度等,使得模型能够成功部署在各个硬

    2024年01月23日
    浏览(51)
  • 【TensorRT】TensorRT 部署Yolov5模型(C++)

      该项目代码在本人GitHub代码仓库开源,本人GitHub主页为:GitHub   项目代码:   NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK,可为深度学习推理应用提供低延迟和高吞吐量。详细安装方式参考以下博客: NVIDIA TensorRT 安装 (Windows C++)   经典的一个TensorRT部署模型步骤为

    2023年04月26日
    浏览(48)
  • Apollo官方课程算法解读笔记——激光雷达感知模块、基于PointPillars的激光雷达点云检测算法、PointPillars模型的部署和优化模型的部署和优化

    感知模块检测效果: 左边为摄像头拍摄图像,激光雷达感知不依赖左边CAMERA,而是点云数据对应的效果图(黄色上方数字为Tracking ID) 主车红灯时的激光点云检测效果图 车道线给CAMERA提供一个标定参考,使得camera检测出来的障碍物从2维转化为3维的信息,因为此标定的参考,

    2024年02月14日
    浏览(40)
  • 【模型部署】TensorRT的安装与使用

    https://blog.csdn.net/qq_44747572/article/details/122453926?spm=1001.2014.3001.5502 下载链接:https://developer.nvidia.com/nvidia-tensorrt-8x-download 我的cuda版本是11.0,因此下面以此做演示: 下载tensorRT的zip文件 将下载好的文件夹进行解压: 系统环境配置: 高级系统环境–环境变量–系统变量–Path(添

    2024年02月15日
    浏览(39)
  • 【算法心得】正确估计dfs时间复杂度;剪枝优化不怕重构

    https://leetcode.cn/problems/verbal-arithmetic-puzzle/ 这题看到题,“表达式中使用的不同字符数最大为 10”,就觉得dfs就完事了,最多不过10!,10!才1e6,1e7这样。如果字符再少点,6! 7! 8!的,那简直就是嗖的一下就跑完了 结果TLE了 比方说,有7个字符,不是想象中的 7!,而是 10*9*...*4 ,

    2024年02月12日
    浏览(43)
  • ubuntu下yolox tensorrt模型部署

    TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署 TensorRT系列之 Linux下 yolox tensorrt模型加速部

    2024年02月06日
    浏览(52)
  • 目标检测与跟踪 (3)- TensorRT&YOLO V8性能优化与部署测试

    目标检测与跟踪 (1)- 机器人视觉与YOLO V8_Techblog of HaoWANG的博客-CSDN博客 目标检测与跟踪 (2)- YOLO V8配置与测试_Techblog of HaoWANG的博客-CSDN博客 目录 系列文章目录 前言 YOLO v8 TensorRT 一、TensorRT 1.1 原理 1.2 架构 1.3 功能 1.4 性能 1.5 GPU并行计算 二、安装配置 1.下载 2.安装 3. 测

    2024年02月14日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包