- Improve and analyse performance of your neural network (e.g. Tensor Cores compatibility)
- Record/analyse internal state of
torch.nn.Module
as data passes through it - Do the above based on external conditions (using single
Callable
to specify it) - Day-to-day neural network related duties (model size, seeding, time measurements etc.)
- Get information about your host operating system,
torch.nn.Module
device, CUDA
capabilities etc.
Version | Docs | Tests | Coverage | Style | PyPI | Python | PyTorch | Docker | Roadmap |
---|
| | | | | | | | | |
:bulb: Examples
Check documentation here: https://szymonmaszke.github.io/torchfunc
1. Getting performance tips
- Get instant performance tips about your module. All problems described by comments
will be shown by
torchfunc.performance.tips
:
class Model(torch.nn.Module):
def __init__(self):
super().__init__()
self.convolution = torch.nn.Sequential(
torch.nn.Conv2d(1, 32, 3),
torch.nn.ReLU(inplace=True),
torch.nn.Conv2d(32, 128, 3, groups=32),
torch.nn.ReLU(inplace=True),
torch.nn.Conv2d(128, 250, 3),
)
self.classifier = torch.nn.Sequential(
torch.nn.Linear(250, 64),
torch.nn.ReLU(),
torch.nn.Linear(64, 10),
)
def forward(self, inputs):
convolved = torch.nn.AdaptiveAvgPool2d(1)(self.convolution(inputs)).flatten()
return self.classifier(convolved)
print(torchfunc.performance.tips(Model()))
2. Seeding, weight freezing and others
- Seed globaly (including
numpy
and cuda
), freeze weights, check inference time and model size:
model = torch.nn.Linear(784, 10)
torchfunc.seed(0)
frozen = torchfunc.module.freeze(model, bias=False)
with torchfunc.Timer() as timer:
frozen(torch.randn(32, 784)
print(timer.checkpoint())
frozen(torch.randn(128, 784)
print(timer.checkpoint())
print(f"Overall time {timer}; Model size: {torchfunc.sizeof(frozen)}")
3. Record torch.nn.Module
internal state
- Record and sum per-layer activation statistics as data passes through network:
model = torch.nn.Sequential(
torch.nn.Linear(784, 100),
torch.nn.ReLU(),
torch.nn.Linear(100, 50),
torch.nn.ReLU(),
torch.nn.Linear(50, 10),
)
recorder = torchfunc.hooks.recorders.ForwardPre(reduction=lambda x, y: x+y)
recorder.children(model, types=(torch.nn.Linear,))
...
print(recorder[1])
For other examples (and how to use condition), see documentation
:wrench: Installation
:snake: pip
Latest release:
pip install --user torchfunc
Nightly:
pip install --user torchfunc-nightly
CPU standalone and various versions of GPU enabled images are available
at dockerhub.
For CPU quickstart, issue:
docker pull szymonmaszke/torchfunc:18.04
Nightly builds are also available, just prefix tag with nightly_
. If you are going for GPU
image make sure you have
nvidia/docker installed and it's runtime set.
:question: Contributing
If you find any issue or you think some functionality may be useful to others and fits this library, please open new Issue or create Pull Request.
To get an overview of things one can do to help this project, see Roadmap.