flops counter.pytorch
1.0.0
이 도구는 신경망에서 이론적 인 곱하기 작업을 계산하도록 설계되었습니다. 또한 주어진 네트워크의 매개 변수 및 인쇄 당 계산 비용을 계산할 수 있습니다.
ptflops 에는 pytorch 와 aten 두 가지 백엔드가 있습니다. pytorch 백엔드는 레거시 백엔드이며 nn.Modules 만 고려합니다. 그러나 CNN에 대한 더 나은 파라 레이어 분석을 제공하기 때문에 여전히 유용합니다. 다른 모든 경우에 aten Backend를 사용하는 것이 권장되며 Aten 작업을 고려하여 더 많은 모델 아키텍처 (변압기 포함)를 포함합니다. 기본 백엔드가 aten 입니다. 변압기 아키텍처에는 pytorch 백엔드를 사용하지 마십시오.
aten Backendverbose=True 사용하십시오.nn.Module 에 직접 중첩 된 모듈에 대해서만 모듈 당 통계를 인쇄합니다. 두 번째 둥지의 더 깊은 모듈은 층당 통계에 표시되지 않습니다.ignore_modules 옵션은 ptflops 나열된 모듈을 무시하도록 강요합니다. 이것은 연구 목적에 유용 할 수 있습니다. 예를 들어, ignore_modules=[torch.ops.aten.convolution, torch.ops.aten._convolution] 지정하는 계산 프로세스에서 모든 컨볼 루션을 삭제할 수 있습니다. pytorch 백엔드실험 지원 :
torch.nn.functional.* 및 tensor.* 작업 중 일부를 고려하지 않습니다. 따라서 지원되지 않는 작업은 최종 복잡성 추정에 기여하지 않습니다. 지원되는 OPS를 확인하려면 ptflops/pytorch_ops.py:FUNCTIONAL_MAPPING,TENSOR_OPS_MAPPING 참조하십시오. 때때로 기능 수준 후크는 nn.Module (예 : 사용자 정의)의 후크와 충돌합니다. 이 경우 backend_specific_config={"count_functional" : False} 를 전달하여 이러한 OPS를 세는 것은 비활성화 될 수 있습니다.ptflops 임의의 텐서에서 주어진 모델을 시작하고 추론 중 계산량을 추정합니다. 복잡한 모델에는 여러 입력이있을 수 있으며 일부는 선택 사항이 될 수 있습니다. 사소한 입력을 구성하려면 하나는 get_model_complexity_info 의 input_constructor 인수를 사용할 수 있습니다. input_constructor 입력 공간 해상도를 튜플로 취하고 모델의 입력 인수로 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) | MacS (G) ( pytorch ) | MacS (G) ( aten ) |
|---|---|---|---|---|
| Alexnet | 224x224 | 61.10 | 0.72 | 0.71 |
| condnext_base | 224x224 | 88.59 | 15.43 | 15.38 |
| Densenet121 | 224x224 | 7.98 | 2.90 | |
| 효율적인 NET_B0 | 224x224 | 5.29 | 0.41 | |
| 효율적인 NET_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) | MacS (G)