我正在尝试使用TensorRT C ++ API原生编写的模型(不从其他框架(例如caffe,tensorflow)解析)运行半精度推理; 据我所知,没有这个问题的公共工作实例。我发现最接近的是与TensorRT 4.0.0.3一起发布的sampleMLP示例代码,但是release notes说不支持fp16;
我的玩具示例代码可在this repo中找到。它包含API实现的体系结构和推理例程,以及用于将训练后的权重字典转换为wtd TensorRT格式的python脚本。
我的玩具架构只包含一个卷积;目标是在fp32和fp16之间获得相似的结果,除了一些合理的精度损失外;该代码似乎适用于fp32,而在fp16推理的情况下,我得到的是完全不同数量级的值(〜1e40);所以看起来我在转换过程中做错了事;
希望能帮助您理解问题。
谢谢
f
答案 0 :(得分:0)
快速阅读完您的代码后,我看到您做了比获得半精度优化网络所需的更多工作。您不应该自己将加载的权重从float32
手动转换为float16
。相反,您应该像往常一样创建网络,并使用nvinfer1::IBuilder::setFp16Mode(true)
对象调用nvinfer1::IBuilder
,让TensorRT在适当的时候为您完成转换。