ncnn
ncnn copied to clipboard
PNNX failed to convert Pytorch eager mode QAT model with single Conv2d layer
error log | 日志或报错信息 | ログ
pnnxparam = model.pnnx.param
pnnxbin = model.pnnx.bin
pnnxpy = model_pnnx.py
pnnxonnx = model.pnnx.onnx
ncnnparam = model.ncnn.param
ncnnbin = model.ncnn.bin
ncnnpy = model_ncnn.py
fp16 = 1
optlevel = 2
device = cpu
inputshape = [1,8,60,80]f32
inputshape2 =
customop =
moduleop =
############# pass_level0
inline module = torch.ao.nn.quantized.modules.DeQuantize
inline module = torch.ao.nn.quantized.modules.Quantize
inline module = torch.ao.nn.quantized.modules.conv.Conv2d
inline module = torch.ao.nn.quantized.modules.DeQuantize
inline module = torch.ao.nn.quantized.modules.Quantize
inline module = torch.ao.nn.quantized.modules.conv.Conv2d
----------------
############# pass_level1
Segmentation fault (core dumped)
context | 编译/运行环境 | バックグラウンド
linux pytorch 2.0.0 libtorch 2.0.0+cpu
how to reproduce | 复现步骤 | 再現方法
python code for converting torchscript
import copy
import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self, in_channels, out_channels):
super(Model, self).__init__()
self.quant = torch.ao.quantization.QuantStub()
self.dequant = torch.ao.quantization.DeQuantStub()
self.layer1 = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=3, padding=1)
def forward(self, x):
x = self.quant(x)
x = self.layer1(x)
x = self.dequant(x)
return x
# def fuse_model(self):
# pass
if __name__ == '__main__':
model = Model(8, 32)
# model.fuse_model()
model.qconfig = torch.ao.quantization.get_default_qat_qconfig('x86')
torch.ao.quantization.prepare_qat(model, inplace=True)
model.apply(torch.ao.quantization.enable_observer)
model.apply(torch.ao.quantization.enable_fake_quant)
model.train()
out = model(torch.rand((1, 8, 60, 80)))
with torch.inference_mode():
quantized_model = copy.deepcopy(model)
quantized_model.eval()
torch.ao.quantization.convert(quantized_model, inplace=True)
print(quantized_model)
torch.jit.trace(quantized_model, torch.rand((1, 8, 60, 80))).save("model.pt")
I'm using the following command for pnnx convertion
pnnx model.pt inputshape=[1,8,60,80]
more | 其他 | その他
I'm also curious about whether pnnx support module fusion that pytorch recommanded when doing model quantization.
ncnn支持QAT模型的转换吗