Skip to main content

A Python to count flops of pytorch models.

Project description

Flopper - A FLOP counter for PyTorch

An FLOP counter based on fvcore with a more extensive support for any (we're trying) PyTorch modules. This tool is a lightweight wrapper around fvcore flop counter, which does all the work under the hood. We provide an easy to use API to count the number of FLOPs of any PyTorch model.

It's going to be a bit slower than fvcore, but more accurate.

Installation

pip install flopper

Usage

The simplest way to use flopper is to use the count_flops function. It takes a model and an input batch as input and prints the total number of FLOPs.

from flopper import count_flops

model = YourRandomModel()
batch = torch.randn(1, 3, 224, 224)

flops = count_flops(model, batch) # This will print the total number of FLOPs

n_flops = flops.total()

To get more detailed information, you can do the following:

print(flops.by_operator())
print(flops.by_module())
print(flops.by_module_and_operator())
print(flops.get_table())

Out API supports also the usage of keyword arguments in the model's forward function. Let's look at an example:

input_1, input_2 = ...
mode = "advanced"

flops = count_flops(model, input_1, input_2, mode=mode)

Adding support for custom new modules

If you want to add support for a new module, you can do so by creating a dictionary with the following structure:

import numpy as np
from fvcore.nn.jit_handles import get_shape
from flopper import count_flops

model = YourRandomModel()
batch = torch.randn(1, 3, 224, 224)

def mean_flop_jit(inputs, outputs):
    input_shape = get_shape(inputs[0])
    return np.prod(input_shape)

custom_ops = {"aten::mean": mean_flop_jit}
flops = count_flops(model, batch, custom_ops=custom_ops)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flopper-0.2.2.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

flopper-0.2.2-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file flopper-0.2.2.tar.gz.

File metadata

  • Download URL: flopper-0.2.2.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for flopper-0.2.2.tar.gz
Algorithm Hash digest
SHA256 364a83ed558ebd50da9cbee219339cdeec92ccc44d105bd29c472bfa95a69709
MD5 b033f02609e65aa1a2ba0f924f9fab33
BLAKE2b-256 90c81cac086317ae4cefb64dbc0215867a8b0590a1397d8edb2027618707be0b

See more details on using hashes here.

File details

Details for the file flopper-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: flopper-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for flopper-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 312ffc55aff7e477313675ce7bee21d439f6340571233e86abe446e34d9e9c70
MD5 20740a73886eb7cd3cc6389e0c1f119f
BLAKE2b-256 0977e9c7de712d0874710e582e5bbe4333773fbbd18d5e245588386238c37717

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page