×

签到

分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

相同输入下,量化模型的输出与融合推理的输出不一致 cll.dj2023-12-17 21:49:08 回复 查看 技术答疑 使用求助
相同输入下,量化模型的输出与融合推理的输出不一致
分享到:

使用MLU270做在线推理,相同的输入,但是模型量化后的输出与执行融合推理后的输出不一致,如下面显示的output1与output2,有差别,这正确吗?

简化代码:

#获取网络
net=IQinput().eval()
#加载原始权重
net.load_state_dict(torch.load('model_nozip.pth', map_location='cpu'), False)
# net.to(ct.mlu_device())
#调用量化接口进行模型量化
net_quantization = mlu_quantize.quantize_dynamic_mlu(net, {'firstconv':False}, dtype='int8', gen_quant=True)
#在cpu上运行推理,生成量化值,过一次量化后的模型
output1 = net_quantization(input1)
print(output1,output1.shape)
#保存量化后的模型
torch.save(net_quantization.state_dict(), 'model_quantization.pth')

#加载量化权重
net_quant = mlu_quantize.quantize_dynamic_mlu(net, gen_quant=False)
net_quant.load_state_dict(torch.load('model_quantization.pth'))
#将模型和输入数据拷贝到MLU上。
net_mlu = net_quant.to(ct.mlu_device())
input_mlu = input1.to(ct.mlu_device())


#执行融合推理
modeltrace= torch.jit.trace(net_mlu, input_mlu, check_trace=False)
#在tracedModel中保存了网络所对应的融合图,然后直接给定MLU的输入tensor就可以完成在MLU设备上的运算
output_mlu_fusion = modeltrace(input_mlu)
output2=output_mlu_fusion.cpu()
print(output2,output2.shape)

output1 与output2分别如下图第一、二行:

图片.png


版权所有 © 2024 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭