qnq不是量子化
qnq的Python项目详细描述
QNQ—QNQ不量子化
版本0.1.8 2020.10.10
说明
该工具包是Techart算法团队用来量化他们定制的神经网络的预训练模型。 工具箱现在是测试版,你可以通过电子邮件(dongzhiwei2021@outlook.com)与我联系,以添加操作和修复错误。在
如何安装
pip install qnq
如何量化
您可以访问https://git.zwdong.com/zhiwei.dong/qnq_tutorial以获取有关QNQ的更多示例。在
- 在
准备好你的模型。在
- 检查模型是否包含非类运算符,例如火炬.马特姆. 在
- 如果
True
,请将from qnq.operators.torchfunc_ops import *
添加到代码中。在 - 然后使用class replace non-class运算符,您可以引用fellow
#! add by dongz
classBasicBlock(nn.Module):expansion=1def__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=downsampleself.stride=stride#! add by dongzself.torch_add=TorchAdd()defforward(self,x):identity=xout=self.conv1(x)out=self.bn1(out)out=self.relu1(out)out=self.conv2(out)out=self.bn2(out)ifself.downsampleisnotNone:identity=self.downsample(x)#! add by dongzout=self.torch_add(out,identity)# out += identityout=self.relu2(out)returnout
在 - 在
准备好装载机。在
- 你应该先用一个
- 你应该选择至少1k的数据来校准你的量化模型。在
- 你应该先用一个
- 在
准备预先训练的检查点。在
- 训练模型并使用
torch.save()
保存检查点。在 - 使用
checkpoints = torch.load(checkpoints_path)
和model.load_state_dict(checkpoints)
加载检查点。在
- 训练模型并使用
- 在
量化
- 添加
from qnq import quantize
- 呼叫
quantize(model, bit_width, data_loader, path)
。在
- 添加
如何量化评价
quantize()
将为模型启用“eval模式”,这将自动量化激活,并且权重现在已经是固定点。在- 只需调用您的原始版本
eval()
如何调试
- 呼叫
quantize(model, bit_width, data_loader, path, is_debug=True)
。在 - 调试模式将绘制每个层的统计信息。在
转换为ONNX模型
支持的运算符
- 卷积层
- 转换
- 转换
- 汇集层
- 平均池
- 自适应AVGPool
- 激活
- Relu、Relu6
- PRelu、LeakyRelu
- 标准化层
- 批量定额
- 层状结构
- 线性层
- 线性
- 视觉层
- 上采样
- 火炬功能
- 加法、减号、DotMul、MatMul、Div、Exp
- 罪恶,罪恶
- SoftMax,乙状结肠
- TorchTemplate,torchtummy
- 项目
标签: