From 8ead391d7c0a42002281956a7f64add4505a393c Mon Sep 17 00:00:00 2001 From: nhzlx Date: Wed, 19 Jun 2019 07:52:50 +0000 Subject: [PATCH] fix ci error --- .../core/mir/fusion/quant_dequant_op_fuser.cc | 3 --- .../core/mir/fusion/quant_dequant_op_fuser.h | 12 ++++++++++ paddle/fluid/lite/core/optimizer.h | 24 +++++++++---------- .../lite/operators/fake_dequantize_max_abs.h | 4 ++-- .../fake_quantize_moving_avg_max_abs.h | 4 ++-- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.cc b/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.cc index a767d277e76..3ef456b52bf 100644 --- a/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.cc +++ b/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.cc @@ -99,15 +99,12 @@ void QuantDequantOpFuser::InsertNewNode(SSAGraph* graph, const int kNumFields = 5; const int kQuantizedWeightOffset = 0; const int kQuantizedOpOffset = 1; - const int kQuantizedOpOutOffset = 2; const int kDequantOpOffset = 3; const int kDequantOpOutOffset = 4; auto* quant_op_input = matched.at("quant_op_input"); auto* quant_op_in_scale = matched.at("quant_op_in_scale"); auto* quant_op = matched.at("quant_op"); - auto* quant_op_out_scale = matched.at("quant_op_out_scale"); - auto* quant_op_out = matched.at("quant_op_out"); std::vector nodes; for (int i = 0; i < times_; i++) { diff --git a/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.h b/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.h index be084eaf804..b4778aab182 100644 --- a/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.h +++ b/paddle/fluid/lite/core/mir/fusion/quant_dequant_op_fuser.h @@ -23,6 +23,18 @@ namespace lite { namespace mir { namespace fusion { +/* The model trained by fluid quantization is a simulation of real int8. + * The quantized Ops(conv2d, mul, depthwise conv2d etc) have fake_quantop + * in front and fake_dequantop behind. + * + * When in int8 mode, the pattern like "fake_quant + quantized_op + + * fake_dequant" + * can be detected by this fuser. The fuser extract the input_scale and + * the weight_scale info from fake_quant, fake_dequant op and fuse those into + * the quantized_op. + * In addition, the fuser delete fake_quant and fake_dequant op in the graph at + * the last. + */ class QuantDequantOpFuser : public FuseBase { public: explicit QuantDequantOpFuser(const std::string& op_type, diff --git a/paddle/fluid/lite/core/optimizer.h b/paddle/fluid/lite/core/optimizer.h index bbe7f0a70a6..2bfd4f77b65 100644 --- a/paddle/fluid/lite/core/optimizer.h +++ b/paddle/fluid/lite/core/optimizer.h @@ -48,22 +48,22 @@ class Optimizer { if (passes.empty()) { RunPasses(std::vector{{ - "lite_quant_dequant_fuse_pass", // - "lite_conv_bn_fuse_pass", // + "lite_quant_dequant_fuse_pass", // + "lite_conv_bn_fuse_pass", // "lite_conv_elementwise_add_activation_fuse_pass", // #ifdef LITE_WITH_LIGHT_WEIGHT_FRAMEWORK "lite_elementwise_add_activation_fuse_pass", // #endif - "lite_fc_fuse_pass", // - "static_kernel_pick_pass", // - "variable_place_inference_pass", // - "argument_type_display_pass", // - "type_target_transform_pass", // - "variable_place_inference_pass", // - "argument_type_display_pass", // - "io_copy_kernel_pick_pass", // - "variable_place_inference_pass", // - "runtime_context_assign_pass", // + "lite_fc_fuse_pass", // + "static_kernel_pick_pass", // + "variable_place_inference_pass", // + "argument_type_display_pass", // + "type_target_transform_pass", // + "variable_place_inference_pass", // + "argument_type_display_pass", // + "io_copy_kernel_pick_pass", // + "variable_place_inference_pass", // + "runtime_context_assign_pass", // }}); } else { RunPasses(passes); diff --git a/paddle/fluid/lite/operators/fake_dequantize_max_abs.h b/paddle/fluid/lite/operators/fake_dequantize_max_abs.h index 4df7215ff06..de48c413041 100644 --- a/paddle/fluid/lite/operators/fake_dequantize_max_abs.h +++ b/paddle/fluid/lite/operators/fake_dequantize_max_abs.h @@ -33,9 +33,9 @@ class FakeDequantizeMaxAbsOpLite : public OpLite { explicit FakeDequantizeMaxAbsOpLite(const std::string &type) : OpLite(type) {} - bool CheckShape() const override {} + bool CheckShape() const override { return true; } - bool InferShape() const override {} + bool InferShape() const override { return true; } bool AttachImpl(const cpp::OpDesc &op_desc, lite::Scope *scope) override { auto x = op_desc.Input("X").front(); diff --git a/paddle/fluid/lite/operators/fake_quantize_moving_avg_max_abs.h b/paddle/fluid/lite/operators/fake_quantize_moving_avg_max_abs.h index 1db4f3bf620..547584e1651 100644 --- a/paddle/fluid/lite/operators/fake_quantize_moving_avg_max_abs.h +++ b/paddle/fluid/lite/operators/fake_quantize_moving_avg_max_abs.h @@ -34,9 +34,9 @@ class FakeQuantizeMovingAvgMaxAbsOpLite : public OpLite { explicit FakeQuantizeMovingAvgMaxAbsOpLite(const std::string &type) : OpLite(type) {} - bool CheckShape() const override {} + bool CheckShape() const override { return true; } - bool InferShape() const override {} + bool InferShape() const override { return true; } bool AttachImpl(const cpp::OpDesc &op_desc, lite::Scope *scope) override { auto x = op_desc.Input("X").front(); -- GitLab