flops counter.pytorch
1.0.0
このツールは、ニューラルネットワークでのマルチプリADD操作の理論量を計算するように設計されています。また、特定のネットワークのパラメーターの数や層ごとの計算コストを印刷することもできます。
ptflopsには、 pytorchとaten 2つのバックエンドがあります。 pytorch Backendはレガシーのものであり、 nn.Modulesのみを考慮しています。ただし、CNNSにより優れた補給者分析を提供するため、依然として便利です。他のすべての場合、 atenバックエンドを使用することをお勧めします。これは、Atenの操作を考慮しているため、より多くのモデルアーキテクチャ(トランスを含む)をカバーしています。デフォルトのバックエンドはatenです。トランスアーキテクチャにはpytorchバックエンドを使用しないでください。
aten Backendverbose=Trueを使用して、複雑さの計算中に考慮されなかった操作を確認します。nn.Moduleに直接ネストされたモジュールに対してのみモジュール統計を印刷します。ネストの第2レベルのより深いモジュールは、層ごとの統計には示されていません。ignore_modulesオプションptflops 、リストされているモジュールを無視するように強制します。これは、研究目的に役立ちます。たとえば、 ignore_modules=[torch.ops.aten.convolution, torch.ops.aten._convolution]を指定するカウントプロセスからすべての畳み込みをドロップできます。 pytorchバックエンド実験的サポート:
torch.nn.functional.*およびtensor.*操作の一部を考慮していません。したがって、サポートされていない操作は、最終的な複雑さの推定に貢献していません。 ptflops/pytorch_ops.py:FUNCTIONAL_MAPPING,TENSOR_OPS_MAPPINGを参照して、サポートされているOPSを確認してください。機能的レベルのフックは、 nn.Moduleのフックと競合する場合があります(たとえば、カスタムのフック)。その場合、これらのOPSでカウントすることはbackend_specific_config={"count_functional" : False}を通過することで無効にできます。ptflops 、ランダムテンソル上の特定のモデルを起動し、推論中の計算量を推定します。複雑なモデルにはいくつかの入力があり、そのうちのいくつかはオプションである可能性があります。非自明の入力を構築するには、 get_model_complexity_infoのinput_constructor引数を使用できます。 input_constructor 、入力空間解像度をタプルとして取得し、モデルの指定された入力引数を含むDICTを返す関数です。次に、このDICTはキーワード引数としてモデルに渡されます。verboseパラメーターを使用すると、最終的な数字に貢献しないモジュールに関する情報を取得できます。ignore_modulesオプションptflops 、リストされているモジュールを無視するように強制します。これは、研究目的に役立ちます。たとえば、 ignore_modules=[torch.nn.Conv2d]を指定するカウントプロセスからすべての畳み込みをドロップできます。 pytorch> = 2.0。 pip install ptflops==0.7.2.2を使用して、Torch 1.xを使用します。
Pypiから:
pip install ptflopsこのリポジトリから:
pip install --upgrade git+https://github.com/sovrasov/flops-counter.pytorch.git import torchvision . models as models
import torch
from ptflops import get_model_complexity_info
with torch . cuda . device ( 0 ):
net = models . densenet161 ()
macs , params = get_model_complexity_info ( net , ( 3 , 224 , 224 ), as_strings = True , backend = 'pytorch'
print_per_layer_stat = True , verbose = True )
print ( '{:<30} {:<8}' . format ( 'Computational complexity: ' , macs ))
print ( '{:<30} {:<8}' . format ( 'Number of parameters: ' , params ))
macs , params = get_model_complexity_info ( net , ( 3 , 224 , 224 ), as_strings = True , backend = 'aten'
print_per_layer_stat = True , verbose = True )
print ( '{:<30} {:<8}' . format ( 'Computational complexity: ' , macs ))
print ( '{:<30} {:<8}' . format ( 'Number of parameters: ' , params ))PTFLOPSがあなたの論文または技術レポートに役立つ場合は、私を引用してください:
@online{ptflops,
author = {Vladislav Sovrasov},
title = {ptflops: a flops counting tool for neural networks in pytorch framework},
year = 2018-2024,
url = {https://github.com/sovrasov/flops-counter.pytorch},
}
@warmspringwindsとHoraceに感謝します。彼はスクリプトの最初のバージョンについて。
| モデル | 入力解決 | パラメーション(m) | Mac(g)( pytorch ) | Macs(g)( aten ) |
|---|---|---|---|---|
| alexnet | 224x224 | 61.10 | 0.72 | 0.71 |
| convnext_base | 224x224 | 88.59 | 15.43 | 15.38 |
| densenet121 | 224x224 | 7.98 | 2.90 | |
| EfficientNet_b0 | 224x224 | 5.29 | 0.41 | |
| EfficientNet_v2_m | 224x224 | 54.14 | 5.43 | |
| googleNet | 224x224 | 13.00 | 1.51 | |
| Inception_v3 | 224x224 | 27.16 | 5.75 | 5.71 |
| maxvit_t | 224x224 | 30.92 | 5.48 | |
| mnasnet1_0 | 224x224 | 4.38 | 0.33 | |
| Mobilenet_v2 | 224x224 | 3.50 | 0.32 | |
| mobilenet_v3_large | 224x224 | 5.48 | 0.23 | |
| regnet_y_1_6gf | 224x224 | 11.20 | 1.65 | |
| resnet18 | 224x224 | 11.69 | 1.83 | 1.81 |
| Resnet50 | 224x224 | 25.56 | 4.13 | 4.09 |
| resnext50_32x4d | 224x224 | 25.03 | 4.29 | |
| shufflenet_v2_x1_0 | 224x224 | 2.28 | 0.15 | |
| squeezenet1_0 | 224x224 | 1.25 | 0.84 | 0.82 |
| VGG16 | 224x224 | 138.36 | 15.52 | 15.48 |
| VIT_B_16 | 224x224 | 86.57 | 17.61(間違っている) | 16.86 |
| wide_resnet50_2 | 224x224 | 68.88 | 11.45 |
モデル|入力解像度|パラマ(m)| Mac(g)