qnq's not quantization
Project description
QNQ -- QNQ's not quantization
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(dongzhiwei2021@outlook.com) for adding ops and fixing bugs.
How to install
pip install qnq
How to quantize
-
Prepare your model.
- Check if your model contains non-class operator, like torch.matmul.
- If
True
, addfrom qnq.operators.torchfunc_ops import *
to your code. - 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
-
Prepare your loader.
- Your
loader.__getitem__()
should return a tuple like(data, label)
or(data, index)
, qnq will useloader.__getitem__()[0]
to forward your model.
- Your
-
Prepare pretrained checkpoints.
- Train your model and use
torch.save()
to save your checkpoints. - Use
checkpoints = torch.load(checkpoints_path)
andmodel.load_state_dict(checkpoints)
to load your checkpoints.
- Train your model and use
-
Quantize
- Add
from qnq import quantize
- Call
quantize(model, bit_width, data_loader, path)
.
- Add
How to eval with quantization
- In the program
quantize()
will turn on 'eval mode' for model, that will automatically quantize activation, and weight already be fixed-point right now.- Just call your origin version
eval()
- Eval
quantize.pth
- Coming soon!
How to debug
- Call
quantize(model, bit_width, data_loader, path, is_debug=True)
. - Debug mode will plot every layer's stats.
How QNQ work
Coming soon!
Operators supported
- Convolution Layers
- Conv
- Pooling Layers
- AveragePool
- AdaptiveAvgPool
- Activation
- Relu
- Normalization Layers
- BatchNorm
- Linear Layers
- Linear
- Torch Function
- Add, Minus, DotMul, MatMul, Div
- Sin, Cos
- SoftMax
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
qnq-0.1.5.tar.gz
(14.9 kB
view hashes)
Built Distribution
qnq-0.1.5-py3-none-any.whl
(33.1 kB
view hashes)