深度学习基础(四)——计算量(FLOPs)、参数量(Params)、计算速度(FLOPS/TOPS))
FLOPs,全称为Floating Point Operations, (s为复数缩写),浮点运算数,指模型完成一次前向传播所需的浮点运算次数,可以理解为计算量(模型的时间复杂度),用来衡量算法/模型的复杂度。FLOPS,全称为Floating Point Operations Per Sencond,表示设别每秒能完成的浮点运算次数,可以理解为计算速度。若模型使用int8量化,需优先匹配TOPS
一、计算量FLOPs
FLOPs,全称为Floating Point Operations, (s为复数缩写),浮点运算数,指模型完成一次前向传播所需的浮点运算次数,可以理解为计算量(模型的时间复杂度),用来衡量算法/模型的复杂度。
意义:FLOPs越高,模型计算复杂度越高,推理速度可能越慢。
关键规则:
- 一次乘加计算计为2FLOPs2FLOPs2FLOPs(乘法+加法)
计算公式:
全连接层:FLOPs=输入维度∗输出维度∗2FLOPs = 输入维度 * 输出维度 * 2FLOPs=输入维度∗输出维度∗2
卷积层:FLOPs=输出高∗输出宽∗卷积核高∗卷积核宽∗输入通道数∗输出通道数∗2FLOPs = 输出高 * 输出宽 * 卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数 * 2FLOPs=输出高∗输出宽∗卷积核高∗卷积核宽∗输入通道数∗输出通道数∗2
激活函数/池化层:操作计算量通常较小,一般不计入FLOPs
BN层:FLOPs=4∗输入元素个数FLOPs = 4*输入元素个数FLOPs=4∗输入元素个数
示例:
- 全连接层输入100维, 输出50维:FLOPs=100∗50∗2=10000FLOPs = 100 * 50 * 2 = 10000FLOPs=100∗50∗2=10000
- 卷积层输入224∗224∗3224*224*3224∗224∗3, 输出112∗112∗64112*112*64112∗112∗64, 卷积核3∗33*33∗3, 步长2:FLOPs=112∗112∗3∗3∗3∗64∗2≈8.7亿FLOPs = 112 * 112 * 3 * 3 * 3 * 64 * 2 ≈ 8.7亿FLOPs=112∗112∗3∗3∗3∗64∗2≈8.7亿
二、参数量Params
参数量是指模型可训练参数的总数量,包含权重和偏置,可以理解为模型的空间复杂度。
意义:参数越多,模型复杂度越高,可能过拟合风险越大,且对计算资源要求更高。
计算公式:
全连接层:Params=权重数量+偏置数量=(输入维度∗输出维度)+输出维度Params = 权重数量+偏置数量 = (输入维度 * 输出维度)+ 输出维度Params=权重数量+偏置数量=(输入维度∗输出维度)+输出维度
卷积层:Params=权重数量+偏置数量=(卷积核高∗卷积核宽∗输入通道数∗输出通道数)+输出通道数Params = 权重数量+偏置数量 = (卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数) + 输出通道数Params=权重数量+偏置数量=(卷积核高∗卷积核宽∗输入通道数∗输出通道数)+输出通道数
BN层:Params = 2 * 通道数
示例:
- 全连接层输入100维, 输出50维:Params=100∗50+50=5050Params = 100 * 50 + 50 = 5050Params=100∗50+50=5050
- 卷积层输入224∗224∗3224*224*3224∗224∗3, 输出112∗112∗64112*112*64112∗112∗64, 卷积核3∗33*33∗3, 步长2:Params=3∗3∗3∗64+64=1792Params = 3 * 3 * 3 * 64 + 64 = 1792Params=3∗3∗3∗64+64=1792
基于pytorch计算参数量和FLOPs:
import torch
from thop import profile
model = torch.nn.Conv2d(3, 64, kernel_size=3)
input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, inputs=(input,))
print(f"FLOPs: {flops / 1e9} G, Params: {params / 1e6} M")
三、FLOPS
FLOPS,全称为Floating Point Operations Per Sencond,表示设别每秒能完成的浮点运算次数,可以理解为计算速度。
意义:衡量计算设备的算力(如GPU/TPU的峰值算力)。
单位:
- 1GFLOPS=109FLOPS1 GFLOPS = 10^{9} FLOPS1GFLOPS=109FLOPS(十亿次/秒)
- 1TFLOPS=1012FLOPS1 TFLOPS = 10^{12} FLOPS1TFLOPS=1012FLOPS(万亿次/秒)
示例:NVIDIA A100 GPU的峰值算力维19.5TFLOPS。
四、TOPS
TOPS,全称为Tera Operations Per Second, 每秒万亿次操作(1TOPS=10121 TOPS = 10^{12}1TOPS=1012 次/秒)。
意义:衡量硬件(如AI芯片)的算力性能,常以整数运算
计算公式:TOPS=时钟频率∗MAU数量∗2TOPS=时钟频率 * MAU数量 * 2TOPS=时钟频率∗MAU数量∗2,其中MAU是乘加单元,每个MAU每周期执行一次乘加
与FLOPs的关系:
1、TOPS侧重整数/定点运算,FLOPS侧重浮点运算
2、若TOPS以int8为基准,FLOPS以FP16计算,则1 TFLOPS≈2 TOPS
3、TOPS专用于评估AI芯片算力;FLOPS评估通用计算硬件性能
四、根据FLOPs和Params匹配TOPS/FLOPS
1、FLOPs与硬件算力TOPS/FLOPS匹配
模型推理时间≈FLOPs÷硬件FLOPS模型推理时间 ≈ FLOPs ÷ 硬件FLOPS模型推理时间≈FLOPs÷硬件FLOPS
例如,模型FLOPs=1012FLOPs=10^{12}FLOPs=1012次,硬件算力为10TFLOPS10TFLOPS10TFLOPS,则理论耗时约为0.1秒。
若模型使用int8量化,需优先匹配TOPS(如AI芯片),浮点模型(FP16/32)需匹配FLOPS(如GPU)
2、Params与内存带宽关联
- 内存需求:Params决定模型存储占用,例如,100M参数需约400MB内存(每个参数4字节)
- 带宽限制:硬件内存带宽需支持快速加载参数,避免因带宽不足导致算力闲置。带宽≥(Params∗数据类型大小)÷推理时间带宽 ≥ (Params * 数据类型大小)÷ 推理时间带宽≥(Params∗数据类型大小)÷推理时间。如Params=100M=400MBParams = 100M=400MBParams=100M=400MB,推理时间需≤0.1秒≤0.1秒≤0.1秒,则带宽需≥4GB/s≥4 GB/s≥4GB/s
更多推荐
所有评论(0)