From 71ebf5f0b94cbe5ac3abcc6e8de8ce10753eba99 Mon Sep 17 00:00:00 2001 From: Keith Davis Date: Wed, 28 Sep 2022 17:13:20 +0100 Subject: MLCE-545 INT8 TFLite model execution abnormal * Fix for Debug mode in ExNet does not work with ConstTensorsAsInputs * Remove unnecessary assertion with ambiguous message in LoadedNetwork Signed-off-by: Keith Davis Change-Id: I9cd5d1f811dbbc89072d1190c510bf1b22e3069c --- src/armnn/LoadedNetwork.cpp | 7 ------- src/armnn/Network.cpp | 20 +++++++++++--------- src/armnn/layers/DebugLayer.cpp | 5 +---- .../RedirectMembersToConstantInputs.hpp | 2 ++ 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index d55b99e10f..40fbde8ac8 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -740,13 +740,6 @@ const IWorkloadFactory& LoadedNetwork::GetWorkloadFactory(const Layer& layer) co ARMNN_ASSERT_MSG(workloadFactory, "No workload factory"); - std::string reasonIfUnsupported; - ARMNN_ASSERT_MSG(IWorkloadFactory::IsLayerSupported(layer, - {}, - reasonIfUnsupported, - m_OptimizedNetwork->pOptimizedNetworkImpl->GetModelOptions()), - "Factory does not support layer"); - IgnoreUnused(reasonIfUnsupported); return *workloadFactory; } diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 3508ee882e..5930805f11 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -1797,6 +1797,17 @@ IOptimizedNetworkPtr Optimize(const Graph& inGraph, throw InvalidArgumentException("Failed to apply the backend-specific optimizations"); } + // Convert constants + { + ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ConvertConstants"); + Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf())); + Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsHalfToFloat())); + + // Once the constants are converted we can now safely call RedirectMembersToConstantInputs + Optimizer::Pass(optGraph, MakeOptimizations(RedirectMembersToConstantInputs())); + } + + // This must occur after all topological changes to the graph and any redirection of variables // If the debug flag is set, then insert a DebugLayer after each layer // Doing this after applying the backend optimizations as they might have changed some layers if (options.m_Debug) @@ -1824,15 +1835,6 @@ IOptimizedNetworkPtr Optimize(const Graph& inGraph, optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry); } - // Convert constants - { - ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ConvertConstants"); - Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf())); - Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsHalfToFloat())); - - // Once the constants are converted we can now safely call RedirectMembersToConstantInputs - Optimizer::Pass(optGraph, MakeOptimizations(RedirectMembersToConstantInputs())); - } return optNet; } diff --git a/src/armnn/layers/DebugLayer.cpp b/src/armnn/layers/DebugLayer.cpp index 57cf3b7cfd..8342c530b2 100644 --- a/src/armnn/layers/DebugLayer.cpp +++ b/src/armnn/layers/DebugLayer.cpp @@ -8,7 +8,6 @@ #include #include -#include namespace armnn { @@ -54,9 +53,7 @@ void DebugLayer::ValidateTensorShapesFromInputs() void DebugLayer::ExecuteStrategy(IStrategy& strategy) const { - // by design debug layers are never in input graphs - IgnoreUnused(strategy); - throw armnn::Exception("DebugLayer should never appear in an input graph"); + strategy.ExecuteStrategy(this, GetParameters(), {}, GetName()); } } // namespace armnn diff --git a/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp b/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp index 483377452e..a2bad710e6 100644 --- a/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp +++ b/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp @@ -63,6 +63,8 @@ private: for (unsigned int inputSlotIndex = 1; inputSlotIndex != layerPtr->GetNumInputSlots(); ++inputSlotIndex) { OutputSlot* outputSlot = layerPtr->GetInputSlot(inputSlotIndex).GetConnectedOutputSlot(); + // Debug layers should not be inserted in optimize process yet + ARMNN_ASSERT(outputSlot->GetOwningLayer().GetType() != LayerType::Debug); if (outputSlot->GetOwningLayer().GetType() == LayerType::Constant) { // Get constant layer and redirect base layer member variables. -- cgit v1.2.1