一、计算量FLOPs
FLOPs,全称为Floating Point Operations, (s为复数缩写),浮点运算数,指模型完成一次前向传播所需的浮点运算次数,可以理解为计算量(模型的时间复杂度),用来衡量算法/模型的复杂度。
意义:FLOPs越高,模型计算复杂度越高,推理速度可能越慢。
关键规则:
- 一次乘加计算计为 2 F L O P s 2FLOPs 2FLOPs(乘法+加法)
计算公式:
全连接层: F L O P s = 输入维度 ∗ 输出维度 ∗ 2 FLOPs = 输入维度 * 输出维度 * 2 FLOPs=输入维度∗输出维度∗2
卷积层: F L O P s = 输出高 ∗ 输出宽 ∗ 卷积核高 ∗ 卷积核宽 ∗ 输入通道数 ∗ 输出通道数 ∗ 2 FLOPs = 输出高 * 输出宽 * 卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数 * 2 FLOPs=输出高∗输出宽∗卷积核高∗卷积核宽∗输入通道数∗输出通道数∗2
激活函数/池化层:操作计算量通常较小,一般不计入FLOPs
BN层: F L O P s = 4 ∗ 输入元素个数 FLOPs = 4*输入元素个数 FLOPs=4∗输入元素个数
示例:
- 全连接层输入100维, 输出50维: F L O P s = 100 ∗ 50 ∗ 2 = 10000 FLOPs = 100 * 50 * 2 = 10000 FLOPs=100∗50∗2=10000
- 卷积层输入 224 ∗ 224 ∗ 3 224*224*3 224∗224∗3, 输出 112 ∗ 112 ∗ 64 112*112*64 112∗112∗64, 卷积核 3 ∗ 3 3*3 3∗3, 步长2: F L O P s = 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
参数量是指模型可训练参数的总数量,包含权重和偏置,可以理解为模型的空间复杂度。
意义:参数越多,模型复杂度越高,可能过拟合风险越大,且对计算资源要求更高。
计算公式:
全连接层: P a r a m s = 权重数量 + 偏置数量 = (输入维度 ∗ 输出维度) + 输出维度 Params = 权重数量+偏置数量 = (输入维度 * 输出维度)+ 输出维度 Params=权重数量+偏置数量=(输入维度∗输出维度)+输出维度
卷积层: P a r a m s = 权重数量 + 偏置数量 = (卷积核高 ∗ 卷积核宽 ∗ 输入通道数 ∗ 输出通道数) + 输出通道数 Params = 权重数量+偏置数量 = (卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数) + 输出通道数 Params=权重数量+偏置数量=(卷积核高∗卷积核宽∗输入通道数∗输出通道数)+输出通道数
BN层:Params = 2 * 通道数
示例:
- 全连接层输入100维, 输出50维: P a r a m s = 100 ∗ 50 + 50 = 5050 Params = 100 * 50 + 50 = 5050 Params=100∗50+50=5050
- 卷积层输入 224 ∗ 224 ∗ 3 224*224*3 224∗224∗3, 输出 112 ∗ 112 ∗ 64 112*112*64 112∗112∗64, 卷积核 3 ∗ 3 3*3 3∗3, 步长2: P a r a m s = 3 ∗ 3 ∗ 3 ∗ 64 + 64 = 1792 Params = 3 * 3 * 3 * 64 + 64 = 1792 Params=3∗3∗3∗64+64=1792
基于pytorch计算参数量和FLOPs:
import torch
from thop import profilemodel = 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的峰值算力)。
单位:
- 1 G F L O P S = 1 0 9 F L O P S 1 GFLOPS = 10^{9} FLOPS 1GFLOPS=109FLOPS(十亿次/秒)
- 1 T F L O P S = 1 0 12 F L O P S 1 TFLOPS = 10^{12} FLOPS 1TFLOPS=1012FLOPS(万亿次/秒)
示例:NVIDIA A100 GPU的峰值算力维19.5TFLOPS。
四、TOPS
TOPS,全称为Tera Operations Per Second, 每秒万亿次操作( 1 T O P S = 1 0 12 1 TOPS = 10^{12} 1TOPS=1012 次/秒)。
意义:衡量硬件(如AI芯片)的算力性能,常以整数运算
计算公式: T O P S = 时钟频率 ∗ M A U 数量 ∗ 2 TOPS=时钟频率 * MAU数量 * 2 TOPS=时钟频率∗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匹配
模型推理时间 ≈ F L O P s ÷ 硬件 F L O P S 模型推理时间 ≈ FLOPs ÷ 硬件FLOPS 模型推理时间≈FLOPs÷硬件FLOPS
例如,模型 F L O P s = 1 0 12 FLOPs=10^{12} FLOPs=1012次,硬件算力为 10 T F L O P S 10TFLOPS 10TFLOPS,则理论耗时约为0.1秒。
若模型使用int8量化,需优先匹配TOPS(如AI芯片),浮点模型(FP16/32)需匹配FLOPS(如GPU)
2、Params与内存带宽关联
- 内存需求:Params决定模型存储占用,例如,100M参数需约400MB内存(每个参数4字节)
- 带宽限制:硬件内存带宽需支持快速加载参数,避免因带宽不足导致算力闲置。 带宽 ≥ ( P a r a m s ∗ 数据类型大小) ÷ 推理时间 带宽 ≥ (Params * 数据类型大小)÷ 推理时间 带宽≥(Params∗数据类型大小)÷推理时间。如 P a r a m s = 100 M = 400 M B Params = 100M=400MB Params=100M=400MB,推理时间需 ≤ 0.1 秒 ≤0.1秒 ≤0.1秒,则带宽需 ≥ 4 G B / s ≥4 GB/s ≥4GB/s