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

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

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

感谢您在理解问题上的帮助。

谢谢,

F

最佳答案

快速阅读完您的代码后,我发现您所做的工作超出了获得半精度优化网络所需的工作。您不应该自己手动将加载的权重从float32转换为float16。取而代之的是,您应该像往常一样创建网络,并使用nvinfer1::IBuilder::setFp16Mode(true)对象调用nvinfer1::IBuilder以让TensorRT在适当的时候为您完成转换。

关于c++ - 如何在使用TensorRT C++ API编写的TensorRT模型上运行半精度推理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50945257/

10-11 18:08