A "gym" style toolkit for building lightweight Neural Architecture Search systems. I know, the name is awful.
Installation
pip install gymnastics
If you want to use NAS-Bench-101, follow the instructions here.
Overview
Over the course of the final year of my PhD I worked a lot on Neural Architecture Search (NAS) and built a bunch of tooling to make my life easier. This is an effort to standardise the various features into a single framework and provide a "gym" style toolkit for comparing various algorithms.
The key use cases for this library are:
- test out new predictors on various NAS benchmarks
- visualise the cells/graphs of your architectures
- add new operations to NAS spaces
- add new backbones to NAS spaces
The framework revolves around three key classes:
ModelProxySearchSpace
Obligatory builder pattern README example
Using gymnastics we can very easily reconstruct NAS spaces (the goal being that it's easy to define new and exciting ones).
For example, here's how easy it is to redefine the NATS-Bench / NAS-Bench-201 search space:
from gymnastics.searchspace import SearchSpace, CellSpace, Skeleton
from gymnastics.searchspace.ops import Conv3x3, Conv1x1, AvgPool2d, Skip, Zeroize
search_space = SearchSpace(
CellSpace(
ops=[Conv3x3, Conv1x1, AvgPool2d, Skip, Zeroize], num_nodes=4, num_edges=6
),
Skeleton(
style=ResNetCIFAR,
num_blocks=[5, 5, 5],
channels_per_stage=[16, 32, 64],
strides_per_stage=[1, 2, 2],
block_expansion=1
),
)
# create an accuracy predictor
from gymnastics.proxies import NASWOT
from gymnastics.datasets import CIFAR10Loader
proxy = NASWOT()
dataset = CIFAR10Loader(path="~/datasets/cifar10", download=False)
minibatch, _ = dataset.sample_minibatch()
best_score = 0.0
best_model = None
# try out 10 random architectures and save the best one
for i in range(10):
model = search_space.sample_random_architecture()
y = model(minibatch)
score = proxy.score(model, minibatch)
if score > best_score:
best_score = score
best_model = model
best_model.show_picture()
Which prints:
Have a look in examples/ for more examples.
NAS-Benchmarks
If you have designed a new proxy for accuracy and want to test its performance, you can use the benchmarks available in benchmarks/.
The interface to the benchmarks is exactly the same as the above example for SearchSpace.
For example, here we score networks from the NDS ResNet space using random input data:
import torch
from gymnastics.benchmarks import NDSSearchSpace
from gymnastics.proxies import Proxy, NASWOT
search_space = NDSSearchSpace(
"~/nds/data/ResNet.json", searchspace="ResNet"
)
proxy: Proxy = NASWOT()
minibatch: torch.Tensor = torch.rand((10, 3, 32, 32))
scores = []
for _ in range(10):
model = search_space.sample_random_architecture()
scores.append(proxy.score(model, minibatch))
Additional supported operations
In addition to the standard NAS operations we include a few more exotic ones, all in various states of completion:
| Op | Paper | Notes |
|---|---|---|
| conv | - | params: kernel size |
| gconv | - | + params: group |
| depthwise separable | + no extra params needed | |
| mixconv | + params: needs a list of kernel_sizes | |
| octaveconv | Don't have a sensible way to include this as a single operation yet | |
| shift | no params needed | |
| ViT | ||
| Fused-MBConv | ||
| Lambda |
Metadata
Release files for gymnastics 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| gymnastics-0.0.1.tar.gz | 172.4 kB | Without provenance | Details for gymnastics-0.0.1.tar.gz |
Release files / gymnastics-0.0.1.tar.gz
| Download URL | gymnastics-0.0.1.tar.gz |
|---|---|
| Size | 172.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
020fc3c5b25a9af882791c6f77f2079e5fab81d2dc65fe54efa3397d3d63ee81
|
|
BLAKE2b-256 checksum How to use checksums |
e5411df53546d0ed8b58acb317a0fb7278c9f18a5520b8f0008f8c523246afff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10
|
Security for gymnastics 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.