Skip to main content

QNQ -- QNQ's not quantization

version 1.1.0 2021.2.5

Description

The toolkit is for Techart algorithm team to quantize their custom neural network's pretrained model. The toolkit is beta now, you can contact me with email(dongz.cn@outlook.com) for adding ops and fixing bugs.

How to install

pip install qnq

How to use

This README.MD is in very early stages, and will be updated soon. you can visit https://git.zwdong.com/zhiwei.dong/qnq_tutorial for more examples for QNQ.

  1. Prepare your model.

    1. Check if your model contains non-class operator, like torch.matmul.
    2. If True, add from qnq.operators.torchfunc_ops import * to your code.
    3. Then use class replace non-class operator, you can refer fellow #! add by dongz
    class BasicBlock(nn.Module):
        expansion = 1
    
        def __init__(self, inplanes, planes, stride=1, downsample=None):
            super(BasicBlock, self).__init__()
            self.conv1 = conv3x3(inplanes, planes, stride)
            self.bn1 = nn.BatchNorm2d(planes)
            self.relu1 = nn.ReLU(inplace=True)
            self.relu2 = nn.ReLU(inplace=True)
            self.conv2 = conv3x3(planes, planes)
            self.bn2 = nn.BatchNorm2d(planes)
            self.downsample = downsample
            self.stride = stride
    
            #! add by dongz
            self.torch_add = TorchAdd()
    
        def forward(self, x):
            identity = x
    
            out = self.conv1(x)
            out = self.bn1(out)
            out = self.relu1(out)
    
            out = self.conv2(out)
            out = self.bn2(out)
    
            if self.downsample is not None:
                identity = self.downsample(x)
    
            #! add by dongz
            out = self.torch_add(out, identity)
            # out += identity
            out = self.relu2(out)
    
            return out
    
  2. Prepare 'metrics', 'metrics_light'(optional) and 'steper'.

    1. Choose at least 1k data to calibration your quantized model.
    2. 'metrics' inference without input params, return metrics value(a float number).
    3. 'metrics_light' inference without input params, return metrics value(a float number), you can choose 1/10 testsets to test.
    4. 'steper' done inference and without input params too, but add quant.step(), and no return.
    5. Check qnq_tutorial for details.
  3. Prepare pretrained checkpoints.

    1. Train your model and use torch.save() to save your checkpoints.
    2. Use checkpoints = torch.load(checkpoints_path) and model.load_state_dict(checkpoints) to load your checkpoints.
  4. Quantize

    1. For code
      1. Add from qnq import QNQ
      2. Add quant = QNQ(model, save_path, config_path, metrics, metrics_light, steper).
      3. Add quant.search()
    2. First run the program will exit, but the config_path will show a yaml file.
    3. Edit config.yaml and rerun for quantization.

Operators supported

  • Convolution Layers
    • Conv
    • ConvTranspose
  • Pooling Layers
    • MaxPool
    • AveragePool
    • AdaptiveAvgPool
  • Activation
    • Relu、Relu6
    • PRelu、LeakyRelu
    • LogSoftmax
  • Normalization Layers
    • BatchNorm
    • LayerNorm
  • Recurrent
    • LSTM
  • Linear Layers
    • Linear
  • Vision Layers
    • Upsample
    • Embedding
  • Torch Function
    • Add, Sum, Minus, DotMul, MatMul, Div,
    • Sqrt, Exp
    • Sin, Cos
    • SoftMax, Sigmoid, Tanh
    • TorchTemplate, TorchDummy

Metadata

Release files for qnq 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qnq 1.1.2
File Size Uploaded
qnq-1.1.2.tar.gz 39.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qnq 1.1.2
File Interpreter ABI Platform
qnq-1.1.2-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 86.6 kB

Release files / qnq-1.1.2.tar.gz

Download URL qnq-1.1.2.tar.gz
Size 39.9 kB
Tags Source
SHA-256 checksum
How to use checksums
4a8c7f56155a71dd865d651a3ded597ec737563532827a135efef32565fa1b6a
BLAKE2b-256 checksum
How to use checksums
0f4a0d1cf687d7830e09f437f62ea2ed080253aec308a42819df35efa4873ed6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.6.13

Release files / qnq-1.1.2-py2.py3-none-any.whl

Download URL qnq-1.1.2-py2.py3-none-any.whl
Size 46.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
92b87402a8ae3ab0966c75a88d45e5b6d0a83a6561cc7fc73e5a3c1da4ce0214
BLAKE2b-256 checksum
How to use checksums
4fa37009fd9b29383cced2bf7db4cb9f7b7e25b151e8320ca165fa2c8ecb4e19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.6.13

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page