一、计算量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=100502=10000
  • 卷积层输入224∗224∗3224*224*32242243, 输出112∗112∗64112*112*6411211264, 卷积核3∗33*333, 步长2:FLOPs=112∗112∗3∗3∗3∗64∗2≈8.7亿FLOPs = 112 * 112 * 3 * 3 * 3 * 64 * 2 ≈ 8.7亿FLOPs=1121123336428.7亿

二、参数量Params

参数量是指模型可训练参数的总数量,包含权重和偏置,可以理解为模型的空间复杂度。
意义:参数越多,模型复杂度越高,可能过拟合风险越大,且对计算资源要求更高。
计算公式
全连接层Params=权重数量+偏置数量=(输入维度∗输出维度)+输出维度Params = 权重数量+偏置数量 = (输入维度 * 输出维度)+ 输出维度Params=权重数量+偏置数量=(输入维度输出维度)+输出维度
卷积层Params=权重数量+偏置数量=(卷积核高∗卷积核宽∗输入通道数∗输出通道数)+输出通道数Params = 权重数量+偏置数量 = (卷积核高 * 卷积核宽 * 输入通道数 * 输出通道数) + 输出通道数Params=权重数量+偏置数量=(卷积核高卷积核宽输入通道数输出通道数)+输出通道数
BN层:Params = 2 * 通道数

示例

  • 全连接层输入100维, 输出50维:Params=100∗50+50=5050Params = 100 * 50 + 50 = 5050Params=10050+50=5050
  • 卷积层输入224∗224∗3224*224*32242243, 输出112∗112∗64112*112*6411211264, 卷积核3∗33*333, 步长2:Params=3∗3∗3∗64+64=1792Params = 3 * 3 * 3 * 64 + 64 = 1792Params=33364+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/s4GB/s
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐