我正在努力让我的量化pytorch移动模型(自定义MobilenetV3(在Android上运行。我已经按照本教程 https://pytorch.org/tutorials/advanced/static_quantization_tutorial.html,我设法量化了我的模型,没有任何问题。但是,当我尝试通过以下方式加载模型时。module = Module.load(assetFilePath(this, MODEL_NAME));
我得到以下异常:
未知内置操作:量化::linear_unpack_fp16。
找不到任何与量化::linear_unpack_fp16类似的操作。这 op 可能不存在,或者目前在 TorchScript 中不受支持。
为什么量化模型中甚至有 float16 值,我认为量化会用 qint8/quint8 替换所有 float32 vlaues?关于如何解决这个问题的任何想法?
这就是 pytorch 模型的量化和保存方式:
torch.quantization.get_default_qconfig(backend='qnnpack')
model.qconfig = torch.quantization.default_qconfig
torch.quantization.prepare(model, inplace=True)
torch.quantization.convert(model, inplace=True)
traced_script_module = torch.jit.trace(model,dummyInput)
traced_script_module.save("model/modelQuantized.pt")
我发现此错误是由用于模型量化的 pytorch 版本与pytorch_android之间的版本不匹配引起的。
该模型使用 pytorch 1.5.1 torchvision 0.6.1 cudatoolkit 10.2.89 量化,但我使用 org.pytorch:pytorch_android:1.4.0 进行构建。
切换到org.pytorch:pytorch_android:1.5.0解决了这个问题。