当前位置: 首页 > news >正文

TensorRT模型部署剪枝

TensorRT模型部署剪枝

本文属于学习笔记,在重点章节或代码位置加入个人理解,欢迎批评指正!

参考:
CUDA与TensorRT部署部署实战第四章


一. Pruning

学习目标

  • 理解什么是模型剪枝
  • 模型剪枝的分类,以及各类剪枝的利弊都有哪些

1. 剪枝

“剪枝”是直接“删除”掉模型中没有意义的,或者意义较小的权重,来让推理计算量减少的过程。
为什么想要剪枝,原因?
主要是因为学习的过程中会产生过参数化导致会产生一些意义并不是很大的权重,或者经过ReLU值为0的权重(下游权重在后续计算中失去作用‌)。对于这些权重所参与的计算是占用计算资源且没有作用的,需要想办法找到这些权重并让硬件去skip掉这些权重所参与的计算。

2. 模型剪枝的流程

1)获取一个已经训练好的初始模型
2) 对这个模型进行剪枝, 剪枝方法有:

  • 我们可以通过训练的方式让DNN去学习哪些权重是可以归零的(e.g. 使用L1 regularization和BN中的scaling factor让权重归零)
  • 我们也可以通过自定义一些规则,手动的有规律的去让某些权重归零(e.g. 对一个1x4的vector进行2:4的weight prunning)
    3)对剪枝后的模型进行fine-tuning
  • 有很大的可能性,在剪枝后初期的网络的精度掉点比较严重,需要fine-tuning这个过程来恢复精度
  • Fine-tuning后的模型有可能会比之前的精度还要上涨
    4)获取到一个压缩的模型

3. 剪枝分类

按照减枝的方法按照一定规律与否可以分为结构化减枝,以及非结构化减枝
在这里插入图片描述
注意:
filter pruning = kernel pruning
图中白色的块并非真的去掉,只是将权重置为0。如果真去掉,kernel维度变化肯定不对。

同时,模型减枝也可以按照减枝的粒度与强度分为粗粒度减枝,以及细粒度减枝

4. Coarse Gain Pruning的优势劣势

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

5. Fine Grain Pruning(细粒度剪枝)优劣势

  • 结构化(Vector-wise 和 block-wise)
  • 非结构化:硬件支持不一定友好
    在这里插入图片描述
  • 优势:
    相比于Coarse Grain Pruning,精度的影响并不是很大
  • 劣势:
    需要特殊的硬件的支持(Tensor Core可以支持sparse)
    需要用额外的memory来存储哪些index是可以保留计算的
    memory的访问不是很效率(跳着访问)
    支持sparse计算的硬件内部会做一些针对sparse的tensor的重编,这个会比较耗时

二. Channel level Pruning

学习目标

理解channel-level pruning的算法,以及如何使用L1-Norm来让权重稀疏

1. channel-level pruning

整篇文章的核心点是围绕着通过使用BN中的scaling factor,与使用L1-regularization的训练可以让权重趋向零这一特点。找到conv中不是很重要的channel,实现channel-level的pruning。

做法:
通过在loss损失函数中添加L1/L2范数(L1/L2-norm)
在这里插入图片描述

2. fine-tuning

fine-tuning更新之后,还需要把为0的地方置为0, 得到稀疏sparse weight
在这里插入图片描述

3. channel-level pruning中的超参和技巧

超参就两个:lambda和channel的剪枝力度在这里插入图片描述


四. Sparse - tensor -core(拓展)

在这里插入图片描述

相关文章:

  • Day92 | 灵神 | 二叉树 路径总和
  • Information-Theoretic Limits of Bistatic Integrated Sensing and Communication
  • 危化品经营单位安全生产管理人员备考要点
  • 深入探究Linux编译器gcc/g++:从基础到进阶
  • B2B2C商城系统流程图解析
  • 从零构建机器学习流水线:Dagster+PyTorch实战指南
  • Vue3 SSR 工程化实践:日常工作中的性能优化与实战技巧
  • MySQL 中 `${}` 和 `#{}` 占位符详解及面试高频考点
  • Linux常用基本命令
  • Ubuntu服务器日志满audit:backlog limit exceeded了会报错解决方案-Linux 审计系统 (auditd) 工具
  • Linux红帽:RHCSA认证知识讲解(十 三)在serverb上破解root密码
  • 构建用户友好的记账体验 - LedgerX交互设计与性能优化实践
  • springboot 切面拦截自定义注解
  • 50%时效提升!中巴新航线如何重构ebay跨境电商物流成本?
  • win7/win10/macos如何切换DNS,提升网络稳定性
  • 若依改用EasyCaptcha验证码
  • UE5在场景3D物体上播放本地视频(带声音)
  • 数据挖掘案例-电力负荷预测
  • L2-052 吉利矩阵分
  • Sentinel源码—3.ProcessorSlot的执行过程一
  • 山东网站建设开发维护/关键词调价工具哪个好
  • 网站二级目录/百度seo发帖推广
  • 域名注册好了如何做网站/网络营销做得比较成功的企业
  • 网站建设与管理课程总结/互联网广告精准营销
  • 阿里巴巴做网站费用计入/广州新塘网站seo优化
  • 甘肃省路桥建设集团网站/郑州seo哪家专业