[Computer Vision] GFLOP、FLOPS、FLOP の違いと関連性 (コード例を含む)


これら 3 つの概念は実際には似ており、すべて浮動小数点演算を必要とします。ただし、小さな違いがいくつかあります。簡単にまとめると次のようになります。

一、GFLOPS、FLOP、FLOPS

GFLOPSこれは、Giga Floating-point Operations Per Second (1 秒あたり 10 億回の浮動小数点演算) であり、GPU のパフォーマンス パラメーターとしてよく使用されますが、必ずしも GPU の実際のパフォーマンスを表すわけではありません。ポリゴンとピクセルの分割、およびテクスチャの塗りつぶし。理論的には、値が高いほど優れています。1GFLOP = 1 0 9 10^91 09フロップ。

FLOPsこれは浮動小数点演算の略語で、浮動小数点演算の数であり、アルゴリズム/モデルの複雑さを測定するために使用できます。もちろん、GFLOP と TFLOP も一般的に使用されます。

FLOPS(すべて大文字) は、Floating-point Operations Per Second の略で、1 秒あたりの浮動小数点演算の数を意味します。ハードウェアのパフォーマンスを測定するために使用されます。

2. 単位換算

  • MFLOPS (メガFLOPS): 1秒あたり100万に等しい (= 1 0 6 10^6)1 06 ) 浮動小数点演算の回数
  • GFLOPS (ギガ FLOPS): 1 秒あたり 10 億に等しい (= 1 0 9 10^9)1 09 ) 浮動小数点演算
  • TFLOPS (テラFLOPS): 1 秒あたり 1 兆に等しい (= 1 0 12 10^{12}1 012 ) 浮動小数点演算、(1 テラ)
  • PFLOPS (ペタFLOPS): 1秒あたり1京に等しい (= 1 0 15 10^{15}1 015 ) 浮動小数点演算
  • EFLOPS (exaFLOPS): 1 秒あたり 100 キャピタルに等しい (= 1 0 18 10^{18}1 018 ) 浮動小数点演算
  • ZFLOPS (zettaFLOPS): 1 秒あたり 10 万資本に等しい (= 1 0 21 10^{21}1 021 ) 浮動小数点演算

3. FLOPの計算方法

これは計算量を指し、FLOP を示します。畳み込み層の場合、FLOP の計算式は次のとおりです。

FLOPs = 2 HW ( C in K 2 + 1 ) C out \text{FLOPs}=2HW(C_{in}K^2+1)C_{out}フロップス=2HW ( C ) _K2+1 ) Cあなた_
ここでC は C_{in} にありますC畳み込み層入力テンソルのチャネル数を指します、C out C_{out}Cあなた_畳み込み層出力テンソルのチャネル数を指します。株式会社K はコンボリューション カーネル サイズを指します。

次に、演算を単純化するために定数項を削除します。
FLOPs = HW ( C in K 2 ) C out \text{FLOPs}=HW(C_{in}K^2)C_{out}フロップス=HW ( C )K2 )Cあなた_
実際には、FLOP を自分で計算することは不可能であるため、FLOP を計算するための関連ライブラリが 3 つあり、1 つは torchstat、もう 1 つは thop です。

テストした後、基本的に 2 つは調整できるので、どちらかを選択するだけです。

4. 計算例

thop ライブラリを使用して、resnet50 モデルの計算コストを計算します。

import torch
from thop import profile
from torchvision.models import resnet50

model = resnet50()
input1 = torch.randn(4, 3, 224, 224) 
flops, params = profile(model, inputs=(input1, ))
print('FLOPs = ' + str(flops / 1000 ** 3) + 'G')

出力は次のとおりです。

[INFO] Register count_convNd() for <class 'torch.nn.modules.conv.Conv2d'>.
[INFO] Register count_normalization() for <class 'torch.nn.modules.batchnorm.BatchNorm2d'>.
[INFO] Register zero_ops() for <class 'torch.nn.modules.activation.ReLU'>.
[INFO] Register zero_ops() for <class 'torch.nn.modules.pooling.MaxPool2d'>.
[INFO] Register zero_ops() for <class 'torch.nn.modules.container.Sequential'>.
[INFO] Register count_adap_avgpool() for <class 'torch.nn.modules.pooling.AdaptiveAvgPool2d'>.
[INFO] Register count_linear() for <class 'torch.nn.modules.linear.Linear'>.
FLOPs = 16.534970368G

おすすめ

転載: blog.csdn.net/wzk4869/article/details/135260285