一、計算量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