1. 概念
计算量(FLOPs)对应我们之前的时间复杂度,计算量要看网络执行时间的长短
PS:
FLOPS:全大写,意指每秒浮点运算次数,理解为计算速度,是一个衡量硬件性能的指标。
FLOPs:s小写,意指浮点运算数,理解为计算量,用来衡量模型的复杂度
(如果模型FLOPs为X,使用的GPU性能Y FLOPS,意味处理该模型只需X/Y秒)
参数量对应于我们之前的空间复杂度,参数量要看占用显存的量
2. 对硬件要求
- 计算量的要求是在于芯片的floaps(指的是gpu的运算能力)
- 参数量的要求是显存大小
3. 计算方式
计算量:
参数量:
BatchNorm层: 2N
PS:
常见模型大小描述方式
因为:参数都是FP32(4字节)存放,所以模型大小是参数量*4
1kb=1024字节;1MB=1024kb;1GB=1024MB;1TB=1024GB
因此:如果模型参数量为6000万个,则总的字节数是24000万字节,也就是228MB
(24000万/1024/1024)=228MB
4. 代码计算
1) 整体参数量 + 计算量
import torch
import torchvision
from thop import profilemodel = torchvision.models.alexnet(pretrained=False)dummy_input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, (dummy_input,))
print('FLOPs: ', flops, 'params: ', params)
2)每层参数量 + 整体参数量 + 可训参数量
import torch
import torchvision
from pytorch_model_summary import summarymodel = torchvision.models.alexnet(pretrained=False)
print(model)dummy_input = torch.randn(1, 3, 224, 224)
print(summary(model, dummy_input, show_input=False, show_hierarchical=False))
输出:
手动计算(示例)
Conv2d-1: 3*64*11*11 + 64 = 23296
Linear-21: 4096*1000 + 1000 = 4097000
5. 常见模型计算量 & 参数量
模型 | 参数量(百万个) | 模型大小(MB) | 计算量(百万) |
SqueezeNet | 1,248,424 | 4.8MB | |
AlexNet | 60百万(1e6) | 240MB | 720 (1*3*224*224) |
ResNet101 | 85百万 | 340MB | |
VGG16 | 138百万 | 552MB | 15300 |
TSN | 20MB | ||
I3D | 60MB | ||
ECO | 150MB | ||
GPT-3 (OpenAI) | 1750亿(1e9) | ||
鹏程. 盘古 (华为) | 2000亿(1e9) | 8TB | |
Switch Transformers (谷歌) | 1.6万亿 | ||
悟道2.0 (智源) | 17500亿 |
Reference:
经典神经网络参数的计算【不定期更新】 - 知乎 (zhihu.com)
(36条消息) 深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结_紫芝的博客-CSDN博客