MIT-TinyML学习笔记【0】Neural Network Efficiency Metrics

image.png

Latency,Energy,Storage
计算延迟,消耗的能量,存储

Latency

image.png
由于数据搬运和计算可以重叠,所以一般而言Latency等于计算和存储中耗时的最大值

Energy Consumption

image.png
一次数据搬运消耗的能量等价于200次乘加运算!!
这就体现流式架构的重要性了,读取DRAM实在是能耗太大了

Memory-Related

Parameters 计算

不同层的参数量计算方法如下(令 batchsize n = 1)
image.png

  • 对于全连接层,每个输入要连接到所有hidden layer的神经元上,即参数量为输入通道数乘以输出通道数
    image.png
  • 对于卷积层,则为输入通道x输出通道xkernel size
    image.png
  • 对于分组卷积,由于每个卷积核只对应部分输入通道,相当于卷积核的kernel size变小了
    image.png c o × c i × k h × k w / g c_{o}\times c_{i}\times k_{h}\times k_{w} / g co×ci×kh×kw/g
  • 对于深度卷积, g = c i g=c_i g=ci 进一步减少参数数量
    = c o × c i × k h × k w / g = c o × k h × k w =c_{o}\times c_{i}\times k_{h}\times k_{w} / g =c_{o}\times k_{h}\times k_{w} =co×ci×kh×kw/g=co×kh×kw

示例:AlexNet参数计算

image.png

Model Size 计算

N u m b e r − o f − P a r a m e t e r s ⋅ B i t W i d t h Number-of-Parameters\cdot Bit Width NumberofParametersBitWidth
image.png

这里又体现出了Quantization的重要性
同样参数量的情况下,32bits和4bits的模型差的不是一点半点

Number of Activations

image.png
MobileNet这种经典的轻量化模型,对于ResNet而言参数量几乎是1/5,
然而,peak activation却是其1.8倍
image.png
对于推理而言,影响最大的是Peak Memory消耗,因为不管其它Memory消耗有多低,最大的内存占用决定了选型(毕竟如果装不下peak 这层你就没法算)
这张图就是MCUNet的motivation!
image.png
(x轴是layer id)
产生不同层对于activation和weight memory的规律变化的根本原因很简单:前面的图像分辨率大,卷积通道数少;后面层分辨率小,但卷积通道数量激增
image.png

Computation-Related

MACs计算

  • MACs定义:n次点乘后累加 进行m次
  • 即计算每一个输出,都需要n次乘累加
  • 例如:对于矩阵乘法而言,输出为nxm,每个输出需要进行k次乘法并累加
    image.png

不同层的MACs计算方法如下(n=1)
image.png
这里主要注意跟参数量parameters计算的差异

  • 对于全连接层fc而言,每个synapse只计算一次乘累加,因此MACs计算与parameters相同
    (便于理解和记忆的方法是,先看有多少个输出,然后考虑计算每个输出需要计算多少次乘累加)
  • 对于卷积层:输出元素个数为 h o ⋅ w o ⋅ c o h_{o}\cdot w_{o}\cdot c_{o} howoco,为了得到每一个output需要计算 c i ⋅ k h ⋅ k w c_{i}\cdot k_{h}\cdot k_{w} cikhkw次,即卷积核的kernel size 乘上输入通道数(卷积核的深度)
  • 对于分组卷积:输出元素与普通卷积相同,但是计算output时使用的kernel元素个数减少g倍(groups数量)
  • 对于深度卷积:同理, c i / g = 1 c_{i}/g=1 ci/g=1

示例:AlexNet的MACs计算

image.png

FLOP && FLOPS

  • FLOP定义:一次浮点数运算
  • 一次加法也算是一次FLOP
  • 因此一次乘累加运算相当于两次FLOP
  • FLOPS定义:每秒的浮点数运算次数
    image.png

Summary

image.png
评估神经网络的efficiency,分为内存消耗和计算消耗两个维度。

  • 对于内存消耗,主要是parameter(有了parameters再根据量化bit width得到model size)和activations
  • 对于计算消耗,常用的是MACs,因为FLOP&&FLOPS局限于浮点数运算,当量化为int8甚至int4时,不存在FLOP&&FLOPS

References

image.png
PS:感觉最后一篇大佬们的Survey很值得一读,有机会拜读一下有个世界观再继续看课程可能会有更好的理解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值