The MicroInterpreter uses a few values to check state - there is a scenario where these values are not always defaulted to internal states. This can cause an exception when the interpreter tries to run. To ensure things work properly, default values. I also updated the MicroInterpreter test to use the new RecordingMicroAllocator. Two new tests have been added: 1.) Ensure that the interpreter fails to allocate with too small an arena at Invoke() (insured by recording allocation APIs) 2.) Ensure that the interpreter does not allocate anything at construction time - only at Invoke() (or manually with AllocateTensors()). This will give us better coverage when we add more tenant use cases. PiperOrigin-RevId: 316877994 Change-Id: I0582080a1fb649276076371be991a13392324801
		
			
				
	
	
		
			399 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			399 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
load(
 | 
						|
    "//tensorflow/lite/micro/testing:micro_test.bzl",
 | 
						|
    "tflite_micro_cc_test",
 | 
						|
)
 | 
						|
load(
 | 
						|
    "//tensorflow/lite/micro:build_def.bzl",
 | 
						|
    "cc_library",
 | 
						|
    "micro_copts",
 | 
						|
)
 | 
						|
 | 
						|
package(
 | 
						|
    default_visibility = ["//visibility:public"],
 | 
						|
    licenses = ["notice"],  # Apache 2.0
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_compatibility",
 | 
						|
    hdrs = [
 | 
						|
        "compatibility.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_framework",
 | 
						|
    srcs = [
 | 
						|
        "memory_helpers.cc",
 | 
						|
        "micro_allocator.cc",
 | 
						|
        "micro_interpreter.cc",
 | 
						|
        "micro_optional_debug_tools.cc",
 | 
						|
        "simple_memory_allocator.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "memory_helpers.h",
 | 
						|
        "micro_allocator.h",
 | 
						|
        "micro_interpreter.h",
 | 
						|
        "micro_optional_debug_tools.h",
 | 
						|
        "simple_memory_allocator.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":micro_compatibility",
 | 
						|
        ":op_resolvers",
 | 
						|
        "//tensorflow/lite:type_to_tflitetype",
 | 
						|
        "//tensorflow/lite/c:common",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/kernels/internal:compatibility",
 | 
						|
        "//tensorflow/lite/kernels/internal:tensor",
 | 
						|
        "//tensorflow/lite/micro:micro_profiler",
 | 
						|
        "//tensorflow/lite/micro/memory_planner",
 | 
						|
        "//tensorflow/lite/micro/memory_planner:greedy_memory_planner",
 | 
						|
        "//tensorflow/lite/schema:schema_fbs",
 | 
						|
        "@flatbuffers//:runtime_cc",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "test_helpers",
 | 
						|
    srcs = [
 | 
						|
        "test_helpers.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "test_helpers.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":micro_utils",
 | 
						|
        ":op_resolvers",
 | 
						|
        "//tensorflow/lite/c:common",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/kernels:kernel_util",
 | 
						|
        "//tensorflow/lite/kernels/internal:compatibility",
 | 
						|
        "//tensorflow/lite/kernels/internal:tensor",
 | 
						|
        "//tensorflow/lite/schema:schema_fbs",
 | 
						|
        "@flatbuffers//:runtime_cc",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "op_resolvers",
 | 
						|
    srcs = [
 | 
						|
        "all_ops_resolver.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "all_ops_resolver.h",
 | 
						|
        "micro_mutable_op_resolver.h",
 | 
						|
        "micro_op_resolver.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":micro_compatibility",
 | 
						|
        "//tensorflow/lite/c:common",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/kernels:op_macros",
 | 
						|
        "//tensorflow/lite/kernels/internal:compatibility",
 | 
						|
        "//tensorflow/lite/micro/kernels:micro_ops",
 | 
						|
        "//tensorflow/lite/schema:schema_fbs",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
# TODO(b/144176795): This target should really be handled differently so that we
 | 
						|
# do not have a fork in the build graph. The bug has some initial ideas.
 | 
						|
cc_library(
 | 
						|
    name = "portable_optimized_op_resolver",
 | 
						|
    srcs = [
 | 
						|
        "all_ops_resolver.cc",
 | 
						|
        "micro_mutable_op_resolver.h",
 | 
						|
        "micro_op_resolver.h",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "all_ops_resolver.h",
 | 
						|
    ],
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":micro_compatibility",
 | 
						|
        "//tensorflow/lite/c:common",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/kernels:op_macros",
 | 
						|
        "//tensorflow/lite/kernels/internal:compatibility",
 | 
						|
        "//tensorflow/lite/micro/kernels:portable_optimized_micro_ops",
 | 
						|
        "//tensorflow/lite/schema:schema_fbs",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "debug_log",
 | 
						|
    srcs = [
 | 
						|
        "debug_log.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "debug_log.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_error_reporter",
 | 
						|
    srcs = [
 | 
						|
        "micro_error_reporter.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "micro_error_reporter.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":debug_log",
 | 
						|
        ":micro_compatibility",
 | 
						|
        ":micro_string",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_string",
 | 
						|
    srcs = [
 | 
						|
        "micro_string.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "micro_string.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = ["//tensorflow/lite/c:common"],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_time",
 | 
						|
    srcs = [
 | 
						|
        "posix/micro_time.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "micro_time.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = ["//tensorflow/lite/c:common"],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_profiler",
 | 
						|
    srcs = [
 | 
						|
        "micro_profiler.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "micro_profiler.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":micro_compatibility",
 | 
						|
        ":micro_time",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/kernels/internal:compatibility",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "micro_utils",
 | 
						|
    srcs = [
 | 
						|
        "micro_utils.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "micro_utils.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        "//tensorflow/lite/c:common",
 | 
						|
        "//tensorflow/lite/kernels:op_macros",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
cc_library(
 | 
						|
    name = "recording_allocators",
 | 
						|
    srcs = [
 | 
						|
        "recording_micro_allocator.cc",
 | 
						|
        "recording_simple_memory_allocator.cc",
 | 
						|
    ],
 | 
						|
    hdrs = [
 | 
						|
        "recording_micro_allocator.h",
 | 
						|
        "recording_micro_interpreter.h",
 | 
						|
        "recording_simple_memory_allocator.h",
 | 
						|
    ],
 | 
						|
    build_for_embedded = True,
 | 
						|
    copts = micro_copts(),
 | 
						|
    deps = [
 | 
						|
        ":micro_compatibility",
 | 
						|
        ":micro_framework",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/kernels/internal:compatibility",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_error_reporter_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_error_reporter_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_error_reporter",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_mutable_op_resolver_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_mutable_op_resolver_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":op_resolvers",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_interpreter_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_interpreter_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":micro_utils",
 | 
						|
        ":op_resolvers",
 | 
						|
        ":recording_allocators",
 | 
						|
        ":test_helpers",
 | 
						|
        "//tensorflow/lite/core/api",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "simple_memory_allocator_test",
 | 
						|
    srcs = [
 | 
						|
        "simple_memory_allocator_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":test_helpers",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "recording_simple_memory_allocator_test",
 | 
						|
    srcs = [
 | 
						|
        "recording_simple_memory_allocator_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":recording_allocators",
 | 
						|
        ":test_helpers",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_allocator_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_allocator_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":test_helpers",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "recording_micro_allocator_test",
 | 
						|
    srcs = [
 | 
						|
        "recording_micro_allocator_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":op_resolvers",
 | 
						|
        ":recording_allocators",
 | 
						|
        ":test_helpers",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
        "//tensorflow/lite/micro/testing:test_conv_model",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "memory_helpers_test",
 | 
						|
    srcs = [
 | 
						|
        "memory_helpers_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        ":test_helpers",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "testing_helpers_test",
 | 
						|
    srcs = [
 | 
						|
        "testing_helpers_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_framework",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_utils_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_utils_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_utils",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_string_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_string_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_string",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "micro_time_test",
 | 
						|
    srcs = [
 | 
						|
        "micro_time_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":micro_time",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
tflite_micro_cc_test(
 | 
						|
    name = "memory_arena_threshold_test",
 | 
						|
    srcs = [
 | 
						|
        "memory_arena_threshold_test.cc",
 | 
						|
    ],
 | 
						|
    deps = [
 | 
						|
        ":op_resolvers",
 | 
						|
        ":recording_allocators",
 | 
						|
        "//tensorflow/lite/micro/benchmarks:keyword_scrambled_model_data",
 | 
						|
        "//tensorflow/lite/micro/testing:micro_test",
 | 
						|
        "//tensorflow/lite/micro/testing:test_conv_model",
 | 
						|
    ],
 | 
						|
)
 |