无法在安卓上加载量化的 pytorch 移动模型



我正在努力让我的量化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解决了这个问题。