From 15dd7728652fa74ba1d3abbe5271e29843385af7 Mon Sep 17 00:00:00 2001 From: Chao Mei <chaomei@google.com> Date: Thu, 15 Oct 2020 21:20:09 -0700 Subject: [PATCH] Skip applying default TfLite delegates for nnapi delegate tests. PiperOrigin-RevId: 337440144 Change-Id: I1e1ea6259df21c8a3c001e1138d729f5606f6d32 --- .../nnapi_delegate_device_selection_test.cc | 20 ++++++++++++++----- .../nnapi/nnapi_delegate_errno_test.cc | 6 +++++- tensorflow/lite/kernels/test_util.cc | 5 ++++- tensorflow/lite/kernels/test_util.h | 4 ++++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/tensorflow/lite/delegates/nnapi/nnapi_delegate_device_selection_test.cc b/tensorflow/lite/delegates/nnapi/nnapi_delegate_device_selection_test.cc index d5c86acf16f..345fd6da168 100644 --- a/tensorflow/lite/delegates/nnapi/nnapi_delegate_device_selection_test.cc +++ b/tensorflow/lite/delegates/nnapi/nnapi_delegate_device_selection_test.cc @@ -270,7 +270,10 @@ class ArgMaxOpModel : public SingleOpModel, public AcceleratedModel { SetBuiltinOp(BuiltinOperator_ARG_MAX, BuiltinOptions_ArgMaxOptions, CreateArgMaxOptions(builder_, output_type).Union()); - BuildInterpreter({input_shape, {1}}); + BuildInterpreter({input_shape, {1}}, /*num_threads*/ -1, + /*allow_fp32_relax_to_fp16=*/false, + /*apply_delegate=*/false); + ApplyDelegate(); } }; @@ -410,7 +413,8 @@ class AddSubOpsAcceleratedModel : public MultiOpModel, public AcceleratedModel { {add_output, input3_}, {output_}); BuildInterpreter({GetShape(input1_), GetShape(input2_), GetShape(input3_)}, /*num_threads=*/-1, allow_fp32_relax_to_fp16, - /*apply_delegate=*/true); + /*apply_delegate=*/false); + ApplyDelegate(); } }; @@ -591,7 +595,8 @@ class HardSwishAddOpsAcceleratedModel : public MultiOpModel, CreateAddOptions(builder_, activation_type).Union(), {input1_, hard_swish_output}, {output_}); BuildInterpreter({GetShape(input1_), GetShape(input2_)}, /*num_threads=*/-1, - allow_fp32_relax_to_fp16, /*apply_delegate=*/true); + allow_fp32_relax_to_fp16, /*apply_delegate=*/false); + ApplyDelegate(); } }; @@ -721,7 +726,8 @@ class QuantizedWeightsConvolutionOpModel : public SingleOpModel, BuildInterpreter({GetShape(input_), GetShape(filter_), GetShape(bias_)}, num_threads, /*allow_fp32_relax_to_fp16=*/false, - /*apply_delegate=*/true); + /*apply_delegate=*/false); + ApplyDelegate(); } void SetInput(std::initializer_list<float> data) { @@ -867,7 +873,11 @@ class LongIdentityModel : public MultiOpModel, public AcceleratedModel { {intermediate_outputs[intermediate_outputs.size() - 1], zero_input_}, {output_}); - BuildInterpreter({GetShape(input_), GetShape(zero_input_)}); + BuildInterpreter({GetShape(input_), GetShape(zero_input_)}, + /*num_threads*/ -1, + /*allow_fp32_relax_to_fp16=*/false, + /*apply_delegate=*/false); + ApplyDelegate(); std::vector<float> zero(GetTensorSize(input_), 0.0); PopulateTensor(zero_input_, zero); diff --git a/tensorflow/lite/delegates/nnapi/nnapi_delegate_errno_test.cc b/tensorflow/lite/delegates/nnapi/nnapi_delegate_errno_test.cc index f347799b4b8..976876d04e2 100644 --- a/tensorflow/lite/delegates/nnapi/nnapi_delegate_errno_test.cc +++ b/tensorflow/lite/delegates/nnapi/nnapi_delegate_errno_test.cc @@ -75,7 +75,11 @@ class FloatAddOpModel : public SingleOpModelWithNNAPI { SetBuiltinOp(BuiltinOperator_ADD, BuiltinOptions_AddOptions, CreateAddOptions(builder_, activation_type).Union()); BuildInterpreter({GetShape(input1_), GetShape(input2_)}, /*num_threads=*/-1, - allow_fp32_relax_to_fp16, /*apply_delegate=*/true); + allow_fp32_relax_to_fp16, /*apply_delegate=*/false); + // We defer applying the 'stateful_delegate_' till now (i.e. via setting + // 'apply_delegate=false' above) so that default TfLite delegates won't be + // applied. + ApplyDelegate(); } }; diff --git a/tensorflow/lite/kernels/test_util.cc b/tensorflow/lite/kernels/test_util.cc index ad513e9f918..64274812d7f 100644 --- a/tensorflow/lite/kernels/test_util.cc +++ b/tensorflow/lite/kernels/test_util.cc @@ -193,7 +193,10 @@ void SingleOpModel::BuildInterpreter(std::vector<std::vector<int>> input_shapes, UpdateOpVersion(buffer_pointer); if (!resolver_) { - auto resolver = new ops::builtin::BuiltinOpResolver(); + MutableOpResolver* resolver = + apply_delegate + ? new ops::builtin::BuiltinOpResolver() + : new ops::builtin::BuiltinOpResolverWithoutDefaultDelegates(); for (const auto& reg : custom_registrations_) { resolver->AddCustom(reg.first.data(), reg.second()); } diff --git a/tensorflow/lite/kernels/test_util.h b/tensorflow/lite/kernels/test_util.h index f739827c5b3..9cd272f3030 100644 --- a/tensorflow/lite/kernels/test_util.h +++ b/tensorflow/lite/kernels/test_util.h @@ -485,6 +485,10 @@ class SingleOpModel { // Build the interpreter for this model. Also, resize and allocate all // tensors given the shapes of the inputs. + // Note: 'apply_delegate' also serves to tell whether default TfLite delegates + // should be applied implicitly for a test case. For example, when testing the + // specific implementation of a TfLite delegate, it might be necessary to set + // this to false. void BuildInterpreter(std::vector<std::vector<int>> input_shapes, int num_threads, bool allow_fp32_relax_to_fp16, bool apply_delegate, bool allocate_and_delegate = true);