点击进入专栏:
《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
一、前言
当年实习做算法时,主管给的第一个任务就是「把一个大的分割模型砍成一个小的」。当时并不理解模型「大」「小」的真正含义,就简单地选取 计算量 作为评价指标,疯狂砍计算量(backbone 换 MobileNet/ShuffleNet、Conv 换成 DepthWise Conv、以及一些奇奇怪怪的融合结构等等),把模型计算量砍了将近 10 倍,结果一部署发现速度并没有快多少,反而是把最初的 ResNet 简单砍掉几个 block 效果更好。
也是从那时起接触了访存量、流水线、RoofLine 模型等概念,对模型推理速度的问题产生了兴趣,从此踏上了深度学习推理优化的不归路。
如今做推理优化和 HPC 已经有一段时间了,还是偶尔能回想起当年不懂推理时设计的与硬件严重不匹配的模型。此外在工作中跟研究员沟通时,也会发现部分研究员对模型大小和模型推理速度的关系不太了解,设计出一些很难发挥硬件计算能力的模型结构。因此在这里对一些用于评价模型大小的指标 —— 计算量、参数量、访存量、内存占用 等指标进行详细探讨,分析这些指标会对模型的部署推理产生何种影响,详细讨论计算量和访存量对模型推理速度