7.4.7. 常见问题

7.4.7.1. import 出错

错误一:Cannot find the extension library(_C.so)

解决方法:

  • 确定 horizon_plugin_pytorch 版本和 cuda 版本是对应的

  • 在 python3 中,找到 horizon_plugin_pytorch 的执行路径,检测该目录下是否有 .so 文件。可能同时存在多个 horizon_plugin_pytorch 的版本,需要卸载只保留一个需要的版本。


错误二:RuntimeError: Cannot load custom ops. Please rebuild the horizon_plugin_pytorch

解决方法:确认本地 CUDA 环境是否正常,如路径、版本等


7.4.7.2. 无法正常 prepare_calibration/qat

RuntimeError: Only Tensors created explicitly by the user (graph leaves) support the deepcopy protocol at the moment

解决方法:一般是模型中包含 non-leaf tensor 才会出现这样的错误,尝试以下方法:

  • 将 prepare_calibration/qat 的 inplace 设为 True

  • 正常 horizon_plugin_pytorch 定义的算子不会出现这种错误,检查模型中自定义的算子是否有 non-leaf tensor 的定义。


7.4.7.3. prepare_qat 后 forward 报错

TypeError: when calling function <built-in method conv2d of type object at >

解决方法:自定义算子继承了某个 torch 的 Module 算子,导致 prepare_qat 没有被成功转成 qat module。建议使用 submodule 的方式调用 conv2d。


7.4.7.4. 编译报错

ValueError 'unsupported node', aten::unbind

解决方法:将 tensor 当作 list 传入 zip 处理,最终调用了 tensor 原生的 iter,该方法内部使用了 unbind 操作导致以上错误。请检查您的代码。


7.4.7.5. 量化精度异常

QAT/Quantized 精度不符合预期、出现 NAN 或 QAT 初始 loss 相对 float 明显异常

解决方法:请参考 量化感知训练精度调优指南


7.4.7.6. 使用 torch.jit.load 加载 pt 文件报错

RuntimeError: Unknown builtin op: horizon::bpu_scale_quantization

解决方法:请检查在使用 torch.jit.load 前是否有 import horizon_plugin_pytorch。否则,加载时找不到对应的 horizon 算子。推荐使用 horizon.jit.save/load 保存和加载 pt 文件,避免这样的错误。此外,horizon.jit.save 在保存 pt 时还会额外保存 horizon_plugin_pytorch 的版本号,horizon.jit.load 会检查当前 horizon_plugin_pytorch 的版本是否和保存 pt 时的兼容,若不兼容,会输出相应的警告。