第一步:去PaddleDetection\configs\runtime.yaml将print_flops设置true 在paddle环境安装paddleslim,我是paddlepaddle-gpu= legacy_C_ops' from 'paddle' 然后我换成2.3.4版本就好了pip install paddleslim==2.3.4 最后python tools/infer.py执行命令就可以看到flops
深度学习框架FLOPs的概念Floating point operations即:浮点运算数量 Paper里比较流行的单位是GFLOPs1 GFLOPs = 10^9 FLOPs即:10亿次浮点运算2. 深度学习框架FLOPs的组成1. 计算FLOPs的代码或包因为无人驾驶车载板子对模型复杂度有要求今天在Github上找了一下午代码(基于Pytorch)终于找到一个既傻瓜又好用的!!!示例代码(以VGG16为例):? 不仅输出了整个框架的复杂度Flops: 15.5 x 10^9 次浮点运算 Params: 138.36 百万个参数4. 常用框架的复杂度?
卷积操作的参数量和FLOPs 这里首先需要辨析一个概念就是FLOPs和FLOPS可以看到简写的差别仅仅是一个字母大小写的区别。 FLOPS(floating-point operations per second),这个缩写长这个样子确实也很奇怪,大致概念就是指每秒浮点数运算次数,最后一个S是秒(second)的缩写,是计组中的概念 FLOPs(floating-point operations),一旦s变为小写,就表示复数的概念,就是浮点数运算次数,这就和计算量相关了,和卷积或者其他算法联系起来基本上就表示计算次数,可用来衡量操作的复杂程度 衡量计算量除了FLOPs外还有一种概念是求MACs(Multiply Accumulate)乘积累加运算次数,一次乘积,然后把这个乘积和另外一个数求和就叫一次MAC,显然与上面计算结果的关系就在于是否要乘
然后是EfficientNet很低的FLOPs却伴随着较高的推理时间,比如B3版本的FLOPs不到ResNet50的一半,推理速度却是ResNet50的两倍。 今天主要谈一下FLOPs与模型推理速度的关系,为什么有些模型FLOPs很低,以EfficientNet为代表,其推理速度却很慢。 首先感谢飞哥的科普: 大部分时候,对于GPU,算力瓶颈在于访存带宽。 同时在feature的空间位置上逐元素重复,总的FLOPs为:3*3*10000*56*56。卷积核参数总量为:3*3*1*10000。 可以看到,两个layer的FLOPs和参数量完全相同。 因此EfficientNet可以声称自己是低FLOPs,但不得不说,这是一种“FLOPs假象”。 同时略“讽刺”的是,同等FLOPs情况下,RegNet跟EfficientNet比较“推理速度”,确实提升了5倍,但这其实相当于利用depthwise卷积低FLOPs高数据访存量的弱点,反过来打EfficientNet
分享一篇新出的 CVPR 2021 轻量级网络论文 Lite-HRNet: A Lightweight High-Resolution Network ,大名鼎鼎的HRNet的升级版。
1.区分FLOPs和FLOPS FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。 FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。 注意在深度学习中,我们用的是FLOPs,也就是说计算量,即用来衡量算法/模型的复杂度。 2.计算方法 注:以下不考虑activation function的运算。 2.1 卷积层: ?
MHSA的参数量为 ,FLOPs为 。对于双层MLP,可以写成: Hidden Layer dimension通常设置为 ,其参数量为 , FLOPs为 。 与MHSA和MLP相比,layer normalization、激活函数和Shortcut的参数或FLOPs可以忽略。 所以一个Transformer block约有 的参数量和 的FLOPs,其中MHSA和MLP占绝大多数计算量。 例如,当修剪40%的通道的模型训练0.0001稀疏率,参数saving是45.3%,FLOPs saving是43.0%。可以看到在精度保持不变的情况下,参数和FLOPs下降了。 当删除20%的通道时,22.0%的FLOPs被保存,准确率下降了0.96%。当删除40%的通道时,节省了45.3%的FLOPs,准确率也下降了1.92%。
金磊 梦晨 假装发自 张北县 量子位 | 公众号 QbitAI “全球最强智算”王座,刚刚易主。 来自中国河北省张北县的“中国选手”,一举击败谷歌。 △图:张北县草原 而其所凭借的算力值,每秒浮点运算次数已经高达12EFLOPS(百亿亿次)。 相比之下,谷歌单集群算力峰值是9EFLOPS,特斯拉也仅有1.9EFLOPS。 那么张北县的这个“速度”,到底有多快? 举个例子 。 以前要训练一个自动驾驶的模型,大概需要花费的时间是7天。 而在“全球最强算力”加持之下,这个时间直接缩短到了1小时之内,整整提速
二、FLOPs floating point operations,浮点运算数,计算量,衡量模型复杂度。 (注意区分另一个概念FLOPS: floating point operations per second,指每秒浮点运算次数) 1、普通卷积计算量: ?
这样一来,便可以提前预知并利用硬件效率收益(比如内存足迹减少量或每次前向传播的 FLOPs 减少量)。该团队的实验表明:可以在不损害网络整体性能的前提下获得这些收益。 一方面,使用者可以使用与常规 Transformer 同等的训练 FLOPs 来训练 MoD Transformer,这可为最终的对数概率训练目标带来多达 1.5% 的提升。 另一方面,MoD Transformer 使用更少的计算量就能达到与常规 Transformer 同样的训练损失 —— 每一次前向传播的 FLOPs 可少最多 50%。 下图 4 给出了总 FLOPs 为 6e18、2e19 和 1e20 时的 isoFLOP 分析。可以看到,当 FLOP 预算更大时,趋势依然继续。
Flops Profiler 对应原始的教程:https://www.deepspeed.ai/tutorials/flops-profiler/ 在这个教程中,我们将介绍 DeepSpeed Flops Profiler输出了模型的参数量,浮点运算数(flops),FLOPS,延迟,以及样本/秒的吞吐量。 Flops 测量 与现有的flops计算工具或方法类似,DeepSpeed Flops分析器测量Module前向传播的flops,而反向传播的flops则被估计为前向传播flops的两倍。 与计算PyTorch Op的flops的PyTorch分析器不同,DeepSpeed Flops分析器测量模型中模块内部的flops,并为用户提供关于模型执行的更多洞察。 FLOPS计算,还可以捕获在模块中调用的torch.nn.functional来估计flops。
例如,采用动态卷积技术可以为网络提供更多参数,同时仅略微增加FLOPs。提出的ParameterNet方案使得低FLOPs网络能够从大规模视觉预训练中受益。 如图2和图3所示,当模型的FLOPs逐渐增加时,模型的准确性持续提高。对于高FLOPs的模型,22K预训练模型优于1K模型。 然而,低FLOPs的模型无法从大规模预训练中获益,作者称之为低FLOPs陷阱。 在这篇论文中,作者通过增加更多的参数来构建低FLOPs的ParameterNet,同时保持低FLOPs的特性,用于大规模视觉预训练。 如下图所示,当FLOPs高于5G FLOPs时,基于Transformer的模型在计算成本相似的情况下始终表现出色于CNN。
MicroNet基于2个设计原则来处理极低的FLOPs: 1、通过降低节点连接性来避免网络宽度的减小; 2、通过在每层引入更复杂的非线性来补偿网络深度的减小。 基于Micro-Factorized卷积和动态Shift-Max,MicroNet系列在低FLOPs情况下比现有技术具有显著的性能提升。 ? 4 MicroNet架构 文中总共描述了4种MicroNet模型的结构,FLOPs在6M到44M之间。 4.4、Stem Layer 作者重新设计了Stem层,以满足低FLOPs的约束。它包括一个 的卷积和一个 的群卷积,然后是一个ReLU。第2次卷积将通道的数量增加了R倍。这大大节省了计算成本。 参考 [1] MicroNet: Towards Image Recognition with Extremely Low FLOPs 原文地址:https://pan.baidu.com/s/1ZrBIptCMGT6
具体来说,作者的方法在576的压缩比下实现了最小的性能损失,使得FLOPs减少了多达94.8%,推理时间加快了69.6%。 此外,作者观察到推理计算成本的降低,包括高达99.8%的缓存存储、94.8%的FLOPs和69.6%的推理时间。 作者在推理过程中对CUDA时间、FLOPs和KV缓存存储大小进行了比较分析,并将作者的方法与 Baseline 方法和完整缓存方法进行了比较。 与没有缓存策略的 Baseline 模型相比,通过使用长度为一的KV缓存缓存压缩标记,VoCo-LLaMA在CUDA时间和FLOPs上分别实现了69.6%和94.8%的显著减少。 与完整缓存策略相比,作者的方法在节省99.8%的缓存存储的同时,实现了更低的CUDA时间和FLOPs,这证明了作者视觉压缩方法带来的推理效率增益。有关推理效率的进一步讨论和详细信息,请参考附录B。
这些工作表明,较少的冗余滤波器可以在保持模型性能的同时大幅减少FLOPs和参数。Group卷积已被视为现代紧凑模型中的一个标准算子。
图4 Fast-SCNN网络结构图 Fast-SCNN最大的特点是“小快灵”,即该模型在推理计算时仅需要较小的FLOPs,就可以快速推理出一个不错的结果。 如下表所示,在不需要预训练模型的情况下,输入尺寸为(1024,2048)的图片推理时, PaddleSeg实现的Fast-SCNN的FLOPs仅为7.21G,推理时间只需要6.28ms,而在基于Cityscapes github.com/PaddlePaddle/PaddleSeg/blob/release/v0.4.0/turtorial/finetune_fast_scnn.md 03 分割模型压缩方案助力模型部署,FLOPs 如下表所示,实验表明在Cityscapes数据集上,使用PaddleSlim对Fast-SCNN模型进行裁剪,能够确保在模型精度几乎无损的情况下,减少51%的FLOPs(每秒浮点运算次数),可以有效的提高运算速度
特别是,配备MCTF的DeiT-T和DeiT-S将FLOPs减少了大约44%,同时相对于基础模型分别提升了性能(+0.5%和+0.3%)。 作者证明,在DeiT中,MCTF以最低的FLOPs实现了最佳性能,超过了所有以前的工作。此外,值得注意的是,MCTF是唯一一项在DeiT-T和DeiT-S中均以最低FLOPs避免性能下降的工作。 通过针对DeiT-T微调30个周期,MCTF在几乎减少了一半FLOPs的情况下,相较于基础模型准确度显著提升了+0.5%。 同样地,作者在提升FLOPs减少2.0 (G)的同时,观察到DeiT-S的准确度提升了+0.3%。 作者通过调整每层减少的标记数 r\in[1,20] ,提供了FLOPs-准确度图表。 多准则。作者在图6(a)中探讨了多准则的有效性。
近日,GitHub 开源了一个小工具,它可以统计 PyTorch 模型的参数量与每秒浮点运算数(FLOPs)。有了这两种信息,模型大小控制也就更合理了。 因此,PyTorch-OpCounter 这种能直接统计 FLOPs 的工具还是非常有吸引力的。 对于 torchvision 中自带的模型,Flops 统计通过以下几行代码就能完成: from torchvision.models import resnet50 from thop import profile model = resnet50() input = torch.randn(1, 3, 224, 224) flops, params = profile(model, inputs flops: 2914598912.0 parameters: 7978856.0 OpCouter 是怎么算的 我们可能会疑惑,OpCouter 到底是怎么统计的浮点运算数。
近日,GitHub 开源了一个小工具,它可以统计 PyTorch 模型的参数量与每秒浮点运算数(FLOPs)。有了这两种信息,模型大小控制也就更合理了。 因此,PyTorch-OpCounter 这种能直接统计 FLOPs 的工具还是非常有吸引力的。 对于 torchvision 中自带的模型,Flops 统计通过以下几行代码就能完成: from torchvision.models import resnet50 from thop import profile model = resnet50() input = torch.randn(1, 3, 224, 224) flops, params = profile(model, inputs flops: 2914598912.0 parameters: 7978856.0 OpCouter 是怎么算的 我们可能会疑惑,OpCouter 到底是怎么统计的浮点运算数。
值得注意的是,ViG-S在仅使用27%的参数和20%的FLOPs的情况下与DeiT-B的准确度相匹配,在图像上运行速度提高了。 例如,在微小尺寸模型中,ViG比ViT在mIoU上高1.2,FLOPs低5G,比VRWKV在mIoU上高0.5,FLOPs低1.7G。 在小尺寸模型中,ViG比ViT在mIoU上高1.7,FLOPs低14G,比VRWKV在mIoU上高0.7,FLOPs低6.3G。 当分辨率达到时,ViG-T使用的FLOPs降低了5.2,节省了90%的GPU内存,并且比DeiT-T快4.8。 与具有线性复杂度的Vim相比,ViG也展示了1.6更低的FLOPs,节省了26%的GPU内存,并且运行速度快2.2。此外,在FLOPs、延迟和内存方面,ViG超越了VRWKV。 准确率_与_分辨率。