我正在尝试使用以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/