-
Notifications
You must be signed in to change notification settings - Fork 22.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to save quantized model in PyTorch1.3 with quantization information #28331
Comments
I think the zero_point and scale should be kept in the model. Can you let us know how to reproduce the issue? |
# load float model -> add observer -> calibration -> convert -> print
print(self.model_q) # original quantized model
# jit script save and load
torch.jit.save(torch.jit.script(self.model_q), "quant_model.pth")
mq = torch.jit.load("quant_model.pth")
print(mq) # script model The output as follows: MobileNetV2(
(features): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(3, 32, kernel_size=(3, 3), stride=(2, 2), scale=0.02576013095676899, zero_point=0, padding=(1, 1))
(1): Identity()
(2): Identity()
)
(1): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(32, 32, kernel_size=(3, 3), stride=(1, 1), scale=0.1074332669377327, zero_point=0, padding=(1, 1), groups=32)
(1): Identity()
(2): Identity()
)
(1): QuantizedConv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), scale=0.13626477122306824, zero_point=66)
(2): Identity()
)
(skip_add): QFunctional()
)
(2): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(16, 96, kernel_size=(1, 1), stride=(1, 1), scale=0.06834518909454346, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(96, 96, kernel_size=(3, 3), stride=(2, 2), scale=0.06564690172672272, zero_point=0, padding=(1, 1), groups=96)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(96, 24, kernel_size=(1, 1), stride=(1, 1), scale=0.07728171348571777, zero_point=61)
(3): Identity()
)
(skip_add): QFunctional()
)
(3): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(24, 144, kernel_size=(1, 1), stride=(1, 1), scale=0.01681913249194622, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(144, 144, kernel_size=(3, 3), stride=(1, 1), scale=0.026830462738871574, zero_point=0, padding=(1, 1), groups=144)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(144, 24, kernel_size=(1, 1), stride=(1, 1), scale=0.09138959646224976, zero_point=58)
(3): Identity()
)
(skip_add): QFunctional()
)
(4): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(24, 144, kernel_size=(1, 1), stride=(1, 1), scale=0.021155843511223793, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(144, 144, kernel_size=(3, 3), stride=(2, 2), scale=0.024789324030280113, zero_point=0, padding=(1, 1), groups=144)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(144, 32, kernel_size=(1, 1), stride=(1, 1), scale=0.05252280458807945, zero_point=69)
(3): Identity()
)
(skip_add): QFunctional()
)
(5): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(32, 192, kernel_size=(1, 1), stride=(1, 1), scale=0.011180322617292404, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(192, 192, kernel_size=(3, 3), stride=(1, 1), scale=0.014178555458784103, zero_point=0, padding=(1, 1), groups=192)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), scale=0.04321109130978584, zero_point=65)
(3): Identity()
)
(skip_add): QFunctional()
)
(6): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(32, 192, kernel_size=(1, 1), stride=(1, 1), scale=0.012100644409656525, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(192, 192, kernel_size=(3, 3), stride=(1, 1), scale=0.018376799300312996, zero_point=0, padding=(1, 1), groups=192)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), scale=0.05106690526008606, zero_point=59)
(3): Identity()
)
(skip_add): QFunctional()
)
(7): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(32, 192, kernel_size=(1, 1), stride=(1, 1), scale=0.01497643068432808, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(192, 192, kernel_size=(3, 3), stride=(2, 2), scale=0.021964795887470245, zero_point=0, padding=(1, 1), groups=192)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), scale=0.04775148257613182, zero_point=72)
(3): Identity()
)
(skip_add): QFunctional()
)
(8): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(64, 384, kernel_size=(1, 1), stride=(1, 1), scale=0.008965414948761463, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(384, 384, kernel_size=(3, 3), stride=(1, 1), scale=0.012472052127122879, zero_point=0, padding=(1, 1), groups=384)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), scale=0.03361879661679268, zero_point=71)
(3): Identity()
)
(skip_add): QFunctional()
)
(9): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(64, 384, kernel_size=(1, 1), stride=(1, 1), scale=0.006726221181452274, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(384, 384, kernel_size=(3, 3), stride=(1, 1), scale=0.011396719142794609, zero_point=0, padding=(1, 1), groups=384)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), scale=0.02584526129066944, zero_point=67)
(3): Identity()
)
(skip_add): QFunctional()
)
(10): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(64, 384, kernel_size=(1, 1), stride=(1, 1), scale=0.007458422798663378, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(384, 384, kernel_size=(3, 3), stride=(1, 1), scale=0.020480144768953323, zero_point=0, padding=(1, 1), groups=384)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), scale=0.036506373435258865, zero_point=78)
(3): Identity()
)
(skip_add): QFunctional()
)
(11): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(64, 384, kernel_size=(1, 1), stride=(1, 1), scale=0.00952215027064085, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(384, 384, kernel_size=(3, 3), stride=(1, 1), scale=0.019453968852758408, zero_point=0, padding=(1, 1), groups=384)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(384, 96, kernel_size=(1, 1), stride=(1, 1), scale=0.042090073227882385, zero_point=58)
(3): Identity()
)
(skip_add): QFunctional()
)
(12): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(96, 576, kernel_size=(1, 1), stride=(1, 1), scale=0.010614714585244656, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(576, 576, kernel_size=(3, 3), stride=(1, 1), scale=0.0174615029245615, zero_point=0, padding=(1, 1), groups=576)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), scale=0.027665885165333748, zero_point=66)
(3): Identity()
)
(skip_add): QFunctional()
)
(13): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(96, 576, kernel_size=(1, 1), stride=(1, 1), scale=0.013487894088029861, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(576, 576, kernel_size=(3, 3), stride=(1, 1), scale=0.024134499952197075, zero_point=0, padding=(1, 1), groups=576)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), scale=0.036522701382637024, zero_point=60)
(3): Identity()
)
(skip_add): QFunctional()
)
(14): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(96, 576, kernel_size=(1, 1), stride=(1, 1), scale=0.012434634380042553, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(576, 576, kernel_size=(3, 3), stride=(2, 2), scale=0.036095958203077316, zero_point=0, padding=(1, 1), groups=576)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(576, 160, kernel_size=(1, 1), stride=(1, 1), scale=0.027086306363344193, zero_point=61)
(3): Identity()
)
(skip_add): QFunctional()
)
(15): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(160, 960, kernel_size=(1, 1), stride=(1, 1), scale=0.012404436245560646, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(960, 960, kernel_size=(3, 3), stride=(1, 1), scale=0.022417496889829636, zero_point=0, padding=(1, 1), groups=960)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), scale=0.02385452575981617, zero_point=61)
(3): Identity()
)
(skip_add): QFunctional()
)
(16): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(160, 960, kernel_size=(1, 1), stride=(1, 1), scale=0.008413408882915974, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(960, 960, kernel_size=(3, 3), stride=(1, 1), scale=0.019144069403409958, zero_point=0, padding=(1, 1), groups=960)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), scale=0.03730720281600952, zero_point=67)
(3): Identity()
)
(skip_add): QFunctional()
)
(17): InvertedResidual(
(conv): Sequential(
(0): ConvBNReLU(
(0): QuantizedConvReLU2d(160, 960, kernel_size=(1, 1), stride=(1, 1), scale=0.007915135473012924, zero_point=0)
(1): Identity()
(2): Identity()
)
(1): ConvBNReLU(
(0): QuantizedConvReLU2d(960, 960, kernel_size=(3, 3), stride=(1, 1), scale=0.011366610415279865, zero_point=0, padding=(1, 1), groups=960)
(1): Identity()
(2): Identity()
)
(2): QuantizedConv2d(960, 320, kernel_size=(1, 1), stride=(1, 1), scale=0.026501065120100975, zero_point=63)
(3): Identity()
)
(skip_add): QFunctional()
)
(18): ConvBNReLU(
(0): QuantizedConvReLU2d(320, 1280, kernel_size=(1, 1), stride=(1, 1), scale=0.09207352995872498, zero_point=0)
(1): Identity()
(2): Identity()
)
)
(classifier): Sequential(
(0): Dropout(p=0.2, inplace=False)
(1): QuantizedLinear(in_features=1280, out_features=1000, scale=0.33595794439315796, zero_point=41)
)
(quant): Quantize(scale=tensor([0.0375]), zero_point=tensor([57]), dtype=torch.quint8)
(dequant): DeQuantize()
) ScriptModule(
original_name=MobileNetV2
(quant): ScriptModule(original_name=Quantize)
(features): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(original_name=Conv2d)
(2): ScriptModule(original_name=Identity)
)
)
(2): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(3): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(4): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(5): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(6): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(7): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(8): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(9): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(10): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(11): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(12): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(13): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(14): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(15): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(16): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(17): ScriptModule(
original_name=InvertedResidual
(skip_add): ScriptModule(original_name=QFunctional)
(conv): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(1): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
(2): ScriptModule(original_name=Conv2d)
(3): ScriptModule(original_name=Identity)
)
)
(18): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=ConvReLU2d)
(1): ScriptModule(original_name=Identity)
(2): ScriptModule(original_name=Identity)
)
)
(classifier): ScriptModule(
original_name=_ConstSequential
(0): ScriptModule(original_name=Dropout)
(1): ScriptModule(original_name=Linear)
)
(dequant): ScriptModule(original_name=DeQuantize)
) It's obvious that the latter has not quantization information, such as zero point, scale, etc. Thanks. |
It’s more likely that the special |
Closed in favor of #28517 |
❓ How to save the quantized model in PyTorch1.3 with quantization information
Is there any way to save the quantized model in PyTorch1.3, which keeps the original information remaining?
I have known that I can save it after tracing it by:
Although
mq
has the right result, it, however, losts the quantized information, such as module(layer) name, zero point, scale, etc.cc @jerryzh168 @jianyuh @dzhulgakov @raghuramank100
The text was updated successfully, but these errors were encountered: