三者的主要关注点:

指标 关注点 单位 核心问题
Parameters 模型复杂度 M/G/B 模型有多大?
FLOPs 计算量 MFLOPs/TFLOPs 算一次要多快?
Model Memory 存储占用 MB/GB 装下它需要多少空间?

单位

在计算机和AI领域中,参数量的单位使用国际单位制(SI)词头,以下是完整的对照表:

符号 英文全称 中文名称 数值 科学计数法
K Kilo 1,000 10³
M Mega 百万 / 兆 1,000,000 10⁶
G Giga 十亿 / 千兆 1,000,000,000 10⁹
T Tera 万亿 / 兆兆 1,000,000,000,000 10¹²
P Peta 千万亿 / 千兆兆 1,000,000,000,000,000 10¹⁵

模型内存

定义:存储模型所有参数所需的内存容量 = 参数量 × 每个参数的精度(字节数) 即:

常见精度类型及内存占用:

精度类型 每参数字节数 示例:1B参数模型
FP32(单精度浮点) 4 bytes 4 GB
FP16/BF16(半精度) 2 bytes 2 GB
INT8(8位整型) 1 byte 1 GB
INT4(4位整型) 0.5 bytes 0.5 GB

模型计算量(FLOPs)

定义:完成一次前向传播所需的浮点运算总量,对应计算时间复杂度,其作用为衡量计算复杂度和推理速度

计算方式(以矩阵乘法为例):

  • 矩阵 A[m×n] × B[n×p] = C[m×p]
  • FLOPs ≈ 2 × m × n × p (乘法和加法各算1次)
指标 全称 含义 单位 类比
Parameters 参数 模型可学习的权重数量 M / G / B 大脑的神经元数量
FLOPs Floating Point Operations 浮点运算次数 MFLOPs / GFLOPs / TFLOPs 大脑的计算工作量

参数量(Params)

定义:模型中所有可学习的权重和偏置的总数,对应计算空间复杂度,其作用为衡量模型容量(Capacity)和存储需求

卷积、Transformer、线性层中的FLOPs与Params

线性层

指标 公式 说明
Parameters (I × O) + O 输入维度I,输出维度O,偏置O
FLOPs ≈ 2 × I × O × B B为batch size,系数2=乘+加

卷积

指标 公式 说明
Parameters K² × C_in × C_out + C_out K=核大小,C=通道数
FLOPs ≈ 2 × K² × C_in × C_out × H_out × W_out 输出特征图每个点都计算

Transformer

组件 Parameters FLOPs
Multi-Head Attention 4 × d_model² ≈ 2 × 4 × d_model² × seq_len
FFN 2 × d_model × d_ff ≈ 2 × 2 × d_model × d_ff × seq_len
标准配置:d_model=768, d_ff=3072, heads=12, seq_len=512
指标 计算 结果
Attention Params 4 × 768² 2.36M
FFN Params 2 × 768 × 3072 4.72M
总Parameters - ~7M/层
总FLOPs 2 × (4×768² + 2×768×3072) × 512 ~7.6 GFLOPs/层

实操代码

在Python中,测量模型的计算量和参数量时主要是调用thop库中的profile函数,详细代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
import torchvision
from thop import profile
from model import your_model

# Model
model = your_model()
model.to(device) # 这里改为调用你需要测试的模型

# Test
dummy_input = torch.randn(1, 3, 224, 224) # 设定一张输入图像的大小
flops, params = profile(model, (dummy_input,))
print('flops: ', flops, 'params: ', params)
print('flops: %.2f M, params: %.2f M' % (flops / 1000000.0, params / 1000000.0)) # 更改单位