1)PaddlePaddle版本:PaddlePaddle-gpu-1.8.2、TensorRT-6.0.1.5
3)GPU:1080Ti、CUDA9.0、CUDNN7.6
4)系统环境:Python3.6.6
-预测信息
1)Python预测,CentOS7系统下编译预测库
- 问题描述:使用Paddle-TRT 运行paddleslim量化后的模型,设置precision_mode=AnalysisConfig.Precision.Int8时,能够完成推理,但是速度相比于不启用TRT差别不大,比量化前的模型推理速度甚至还慢一些。此外,在设置precision_mode=AnalysisConfig.Precision.Float32时,出现报错,报错信息如下:
--------------------------------------------
C++ Call Stacks (More useful to developers):
--------------------------------------------
0 std::string paddle::platform::GetTraceBackString<std::string>(std::string&&, char const*, int)
1 paddle::platform::EnforceNotMet::EnforceNotMet(paddle::platform::ErrorSummary const&, char const*, int)
2 paddle::inference::tensorrt::ElementwiseWeightOpConverter::operator()(paddle::framework::proto::OpDesc const&, paddle::framework::Scope const&, bool)
3 paddle::inference::tensorrt::OpConverter::ConvertOp(paddle::framework::proto::OpDesc const&, std::unordered_set<std::string, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> > const&, paddle::framework::Scope const&, paddle::inference::tensorrt::TensorRTEngine*, bool)
4 paddle::inference::tensorrt::OpConverter::ConvertBlockToTRTEngine(paddle::framework::BlockDesc*, paddle::framework::Scope const&, std::vector<std::string, std::allocator<std::string> > const&, std::unordered_set<std::string, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::string> > const&, std::vector<std::string, std::allocator<std::string> > const&, paddle::inference::tensorrt::TensorRTEngine*)
5 paddle::inference::analysis::TensorRtSubgraphPass::CreateTensorRTOp(paddle::framework::ir::Node*, paddle::framework::ir::Graph*, std::vector<std::string, std::allocator<std::string> > const&, std::vector<std::string, std::allocator<std::string> >*) const
6 paddle::inference::analysis::TensorRtSubgraphPass::ApplyImpl(paddle::framework::ir::Graph*) const
7 paddle::framework::ir::Pass::Apply(paddle::framework::ir::Graph*) const
8 paddle::inference::analysis::IRPassManager::Apply(std::unique_ptr<paddle::framework::ir::Graph, std::default_delete<paddle::framework::ir::Graph> >)
9 paddle::inference::analysis::IrAnalysisPass::RunImpl(paddle::inference::analysis::Argument*)
10 paddle::inference::analysis::Analyzer::RunAnalysis(paddle::inference::analysis::Argument*)
11 paddle::AnalysisPredictor::OptimizeInferenceProgram()
12 paddle::AnalysisPredictor::PrepareProgram(std::shared_ptr<paddle::framework::ProgramDesc> const&)
13 paddle::AnalysisPredictor::Init(std::shared_ptr<paddle::framework::Scope> const&, std::shared_ptr<paddle::framework::ProgramDesc> const&)
14 std::unique_ptr<paddle::PaddlePredictor, std::default_delete<paddle::PaddlePredictor> > paddle::CreatePaddlePredictor<paddle::AnalysisConfig, (paddle::PaddleEngineKind)2>(paddle::AnalysisConfig const&)
15 std::unique_ptr<paddle::PaddlePredictor, std::default_delete<paddle::PaddlePredictor> > paddle::CreatePaddlePredictor<paddle::AnalysisConfig>(paddle::AnalysisConfig const&)
----------------------
Error Message Summary:
----------------------
InvalidArgumentError: The size of bias's dims is 1 and bias's size is 1. TensorRT doesn't support this shape for Elementwise op! at (/home/.../Paddle-1.8.2/paddle/fluid/inference/tensorrt/convert/elementwise_op.cc:147)
请问该如何解决?
4条答案
按热度按时间cczfrluj1#
2)请问是什么模型
uxh89sit2#
2)请问是什么模型
@NHZlX 感谢回复!
(1)我试过用量化前的模型推理,当precision设置为Float32的时候,还是会报上述错误。
(2)模型原本是训练好的keras-yolov3模型,我先转为了tensorflow版本的模型,然后通过X2Paddle转换为Paddle版本的模型。
通过PaddleSlim量化时发现,elementwise_mul, elementwise_max, batch_norm等层不支持量化。
量化后的模型,多了一些xxx_quantized/dequantized节点,不知道这是不是推理变慢的原因。
uujelgoq3#
麻烦把模型发下把。
这边测试paddle产生的yolov3的模型是没有问题的。keras转的模型需要看下。
xghobddn4#
麻烦把模型发下把。
这边测试paddle产生的yolov3的模型是没有问题的。keras转的模型需要看下。
@NHZlX https://pan.baidu.com/s/1EWgzNODeGM1403YVRkoJQg 提取码:qq0q
以上为原始模型和量化前后的paddle模型,输入为1x3x384x384(原始keras模型输入为1x384x384x3),麻烦大佬得空看一下,我这边量化后的模型用Paddle-TRT推理几乎没有加速效果。