تم تصميم هذه الأداة لحساب الكمية النظرية للعمليات الضاعفة في الشبكات العصبية. يمكنه أيضًا حساب عدد المعلمات وطباعة التكلفة الحسابية لكل طبقة لشبكة معينة.
ptflops لديه اثنين من الخلفية ، pytorch و aten . الواجهة الخلفية pytorch هي واحدة قديمة ، فهي تعتبر nn.Modules فقط. ومع ذلك ، لا يزال مفيدًا ، لأنه يوفر تحليلات أفضل للطبقة لل CNN. في جميع الحالات الأخرى ، يوصى باستخدام aten الخلفية ، والتي تعتبر عمليات ATEN ، وبالتالي تغطي المزيد من بنيات النماذج (بما في ذلك المحولات). الواجهة الخلفية الافتراضية هي aten . من فضلك ، لا تستخدم الواجهة الخلفية pytorch للبنية المحولات.
atenverbose=True لرؤية العمليات التي لم يتم النظر فيها أثناء حساب التعقيد.nn.Module . لا تظهر وحدات أعمق في المستوى الثاني من التعشيش في إحصائيات كل طبقة.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 للتحقق من العمليات المدعومة. في بعض الأحيان تتعارض السنانير على المستوى الوظيفي مع السنانير لـ nn.Module (على سبيل المثال ، الخطوط المخصصة). في هذه الحالة ، يمكن تعطيل العد مع هذه العمليات عن طريق تمرير backend_specific_config={"count_functional" : False} .ptflops نموذجًا معينًا على موتر عشوائي ويقدر مقدار الحسابات أثناء الاستدلال. يمكن أن تحتوي النماذج المعقدة على العديد من المدخلات ، وقد يكون بعضها اختياريًا. لبناء إدخال غير تافهة يمكن للمرء استخدام وسيطة input_constructor من get_model_complexity_info . input_constructor هي دالة تأخذ الدقة المكانية الإدخال باعتبارها tuple وإرجاعيل مع وسيط إدخال مسماة للنموذج. بعد ذلك ، سيتم نقل هذا القول إلى النموذج كوسائط للكلمة الرئيسية.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 هو للإصدار الأولي من البرنامج النصي.
| نموذج | قرار المدخلات | params (M) | Macs (G) ( pytorch ) | Macs (G) ( aten ) |
|---|---|---|---|---|
| اليكسنيت | 224x224 | 61.10 | 0.72 | 0.71 |
| invnext_base | 224x224 | 88.59 | 15.43 | 15.38 |
| Densenet121 | 224x224 | 7.98 | 2.90 | |
| effaiveNet_B0 | 224x224 | 5.29 | 0.41 | |
| effaivenet_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 |
نموذج | قرار المدخلات | params (M) | Macs (ز)