【问题标题】:How to run half precision inference on a TensorRT model, written with TensorRT C++ API?如何在使用 TensorRT C++ API 编写的 TensorRT 模型上运行半精度推理?
【发布时间】:2018-11-29 09:53:39
【问题描述】:

我正在尝试使用原生用 TensorRT C++ API 编写的模型运行半精度推理(未从其他框架解析,例如 caffe、tensorflow); 据我所知,这个问题没有公开的工作示例;我找到的最接近的是 sampleMLP 示例代码,与 TensorRT 4.0.0.3 一起发布,但 release notes 表示不支持 fp16;

我的玩具示例代码可以在this repo 中找到。它包含 API 实现的架构和推理例程,以及我用来将训练过的权重字典转换为 wtd TensorRT 格式的 python 脚本。

我的玩具架构只包含一个卷积;目标是在 fp32 和 fp16 之间获得相似的结果,除了一些合理的精度损失;该代码似乎适用于 fp32,而我在 fp16 推理的情况下获得的是完全不同数量级的值(~1e40);所以看起来我在转换过程中做错了什么;

如果能帮助我理解问题,我将不胜感激。

谢谢,

f

【问题讨论】:

    标签: c++ deep-learning precision inference-engine tensorrt


    【解决方案1】:

    在快速阅读您的代码后,我可以看到您为获得半精度优化网络所做的工作超出了必要的范围。您不应自己手动将加载的权重从 float32 转换为 float16。相反,您应该像往常一样创建网络,并使用您的 nvinfer1::IBuilder 对象调用 nvinfer1::IBuilder::setFp16Mode(true),让 TensorRT 在合适的地方为您进行转换。

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 2020-04-04
      • 2019-08-15
      • 1970-01-01
      • 2019-04-18
      • 2020-10-17
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      相关资源
      最近更新 更多