記事ディレクトリ
これら 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