Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fatescript/nnprof
profile tools for pytorch nn models
https://github.com/fatescript/nnprof
Last synced: 3 months ago
JSON representation
profile tools for pytorch nn models
- Host: GitHub
- URL: https://github.com/fatescript/nnprof
- Owner: FateScript
- License: apache-2.0
- Created: 2021-01-03T10:48:46.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-01-11T11:10:22.000Z (almost 4 years ago)
- Last Synced: 2024-10-03T12:24:10.072Z (3 months ago)
- Language: Python
- Size: 13.7 KB
- Stars: 42
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# nnprof
## Introduction
nnprof is a profile tool for pytorch neural networks.
### Features
* **multi profile mode**: nnprof support 4 profile mode: Layer level, Operation level, Mixed level, Layer Tree level. Please check below for detail usage.
* **time and memory profile**: nnprof support both time and memory profile now. But since memory profile is first supported in pytorch 1.6, please use torch version >= 1.6 for memory profile.
* **support sorted by given key and show profile percent**: user could print table with percentage and sorted profile info using a given key, which is really helpful for optimiziing neural network.## Requirements
* Python >= 3.6
* PyTorch
* Numpy## Get Started
### install nnprof
* pip install:
```shell
pip install nnprof
```
* from source:
```shell
python -m pip install 'git+https://github.com/FateScript/nnprof.git'# or install after clone this repo
git clone https://github.com/FateScript/nnprof.git
pip install -e nnprof
```### use nnprf
```python3
from nnprof import profile, ProfileMode
import torch
import torchvisionmodel = torchvision.models.alexnet(pretrained=False)
x = torch.rand([1, 3, 224, 224])# mode could be anyone in LAYER, OP, MIXED, LAYER_TREE
mode = ProfileMode.LAYERwith profile(model, mode=mode) as prof:
y = model(x)print(prof.table(average=False, sorted_by="cpu_time"))
# table could be sorted by presented header.
```Part of presented table looks like table below, Note that they are sorted by cpu_time.
```
╒══════════════════════╤═══════════════════╤═══════════════════╤════════╕
│ name │ self_cpu_time │ cpu_time │ hits │
╞══════════════════════╪═══════════════════╪═══════════════════╪════════╡
│ AlexNet.features.0 │ 19.114ms (34.77%) │ 76.383ms (45.65%) │ 1 │
├──────────────────────┼───────────────────┼───────────────────┼────────┤
│ AlexNet.features.3 │ 5.148ms (9.37%) │ 20.576ms (12.30%) │ 1 │
├──────────────────────┼───────────────────┼───────────────────┼────────┤
│ AlexNet.features.8 │ 4.839ms (8.80%) │ 19.336ms (11.56%) │ 1 │
├──────────────────────┼───────────────────┼───────────────────┼────────┤
│ AlexNet.features.6 │ 4.162ms (7.57%) │ 16.632ms (9.94%) │ 1 │
├──────────────────────┼───────────────────┼───────────────────┼────────┤
│ AlexNet.features.10 │ 2.705ms (4.92%) │ 10.713ms (6.40%) │ 1 │
├──────────────────────┼───────────────────┼───────────────────┼────────┤
```You are welcomed to try diffierent profile mode and more table format.
## Contribution
Any issues and pull requests are welcomed.
## Acknowledgement
Some thoughts of nnprof are inspired by [torchprof](https://github.com/awwong1/torchprof) and [torch.autograd.profile](https://github.com/pytorch/pytorch/blob/749f8b78508c43f9e6331f2395a4202785068442/torch/autograd/profiler.py) .
Many thanks to the authors.