diff --git a/.github/workflows/run-onert-micro-unit-tests.yml b/.github/workflows/run-onert-micro-unit-tests.yml index 8b27e638b12..e8e2dab3e31 100644 --- a/.github/workflows/run-onert-micro-unit-tests.yml +++ b/.github/workflows/run-onert-micro-unit-tests.yml @@ -43,5 +43,5 @@ jobs: mkdir build cd build cmake ../infra/onert-micro/ -DENABLE_ONERT_MICRO_TEST=1 -DENABLE_TEST=1 - make -j$(nproc) luci_interpreter_kernels_micro_test - ./onert-micro/eval-driver/luci-interpreter/src/kernels/luci_interpreter_kernels_micro_test + make -j$(nproc) onert_micro_execute_kernels_test + ./onert-micro/eval-driver/onert-micro/src/execute/onert_micro_execute_kernels_test diff --git a/onert-micro/CMakeLists.txt b/onert-micro/CMakeLists.txt index 453d77e7bee..d6491aedf8c 100644 --- a/onert-micro/CMakeLists.txt +++ b/onert-micro/CMakeLists.txt @@ -6,9 +6,12 @@ set(ARM_OBJCOPY "arm-none-eabi-objcopy") find_program(ARM_C_COMPILER_PATH ${ARM_C_COMPILER}) if (NOT ARM_C_COMPILER_PATH) - message(STATUS "Build luci-micro: FALSE(ARM compiler is NOT FOUND)") + message(STATUS "Build onert-micro failed: ARM compiler is NOT FOUND") + return() endif () +set(OM_CIRCLE_SCHEMA onert_micro_circle_schema) + if (NOT_BUILD_EXTERNALS) message(STATUS "USE LOCAL EXTERNAL") @@ -25,13 +28,13 @@ else() nnas_find_package(FlatBuffers EXACT 2.0 QUIET) if (NOT FlatBuffers_FOUND) - message(STATUS "Build luci-micro: FALSE(FlatBuffers 2.0 NOT FOUND)") + message(STATUS "Build onert-micro failed: FlatBuffers 2.0 NOT FOUND") return() endif (NOT FlatBuffers_FOUND) - message(STATUS "Build luci-micro: TRUE") + message(STATUS "FOUND FlatBuffers") - set(SCHEMA_FILE "${NNAS_PROJECT_SOURCE_DIR}/res/CircleSchema/0.4/circle_schema.fbs") + set(SCHEMA_FILE "${NNAS_PROJECT_SOURCE_DIR}/res/CircleSchema/0.6/circle_schema.fbs") # NOTE Copy circle_schema.fbs as schema.fbs to generate "schema_generated.fbs" instead of "circle_schema_generated.fbs" add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/schema.fbs" @@ -40,57 +43,39 @@ else() DEPENDS "${SCHEMA_FILE}" ) - FlatBuffers_Target(luci_micro_circle_schema + FlatBuffers_Target(${OM_CIRCLE_SCHEMA} OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen/circle-generated/circle" INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen" SCHEMA_DIR "${CMAKE_CURRENT_BINARY_DIR}" SCHEMA_FILES "schema.fbs" ) set(Flatbuffers_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../overlay/lib/cmake/flatbuffers") - set (EXT_OVERLAY_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../overlay") + set(EXT_OVERLAY_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../overlay") set(GENERATED_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen") endif() -set(LUCI_INTERPRETER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/include") -add_subdirectory(luci-interpreter/src/core/reader) - -# Choosing Kernel: reference mcu, optimized cmsisnn, optimized linux +# Choosing Kernel: reference mcu, optimized cmsisnn if (NOT KERNELS) message(STATUS "KERNEL variable is not defined, default reference mcu kernels will be used") - set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/mcu") + set(OM_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onert-micro/include/pal/mcu") elseif("${KERNELS}" STREQUAL "mcu") message(STATUS "ONERT_MICRO will use reference mcu kernels") - set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/mcu") + set(OM_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onert-micro/include/pal/mcu") elseif("${KERNELS}" STREQUAL "cmsisnn") message(STATUS "ONERT_MICRO will use optimized cmsisnn kernels") - set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/cmsisnn") -elseif("${KERNELS}" STREQUAL "linux") - message(STATUS "ONERT_MICRO will use optimized linux kernels") - set(LUCI_INTERPRETER_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/pal/linux") + set(OM_PAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/onert-micro/include/pal/cmsisnn") else() - message(STATUS "Build onert-micro: FAILED (Non-existent kernel variable. Choose one of the following options: mcu, cmsisnn, linux)") - return() -endif() - -if (USE_STATIC_ALLOC) - # TODO: enable it - message(STATUS "FAILED ONERT-MICRO is not support Static Memory Manager now") + message(STATUS "Build onert-micro: FAILED (Non-existent kernel variable. Choose one of the following options: mcu, cmsisnn)") return() -else() - message(STATUS "USE_STATIC_ALLOC variable is not defined, default dynamic memory manager will be used") endif() set(CMAKE_ARM_OPTIONS - -DLUCI_INTERPRETER_STATIC=ON - -DLUCI_STATIC=ON - -DBUILD_CMSIS_NN_FUNCTIONS=ON -DTARGET_CPU=${TARGET_CPU} -DTARGET_ARCH=${TARGET_ARCH} "-DEXT_OVERLAY_DIR=${EXT_OVERLAY_DIR}" - "-DFlatbuffers_DIR=${Flatbuffers_DIR}" "-DFlatBuffersSource_DIR=${FlatBuffersSource_DIR}" "-DCMAKE_TOOLCHAIN_FILE=${NNAS_PROJECT_SOURCE_DIR}/infra/onert-micro/cmake/buildtool/config/arm-none-eabi-gcc.cmake" - "-DLUCI_INTERPRETER_PAL_DIR=${LUCI_INTERPRETER_PAL_DIR}" + "-DOM_PAL_DIR=${OM_PAL_DIR}" "-DNNAS_PROJECT_SOURCE_DIR=${NNAS_PROJECT_SOURCE_DIR}" "-DNNAS_EXTERNALS_DIR=${NNAS_EXTERNALS_DIR}" -DC_COMPILER=${ARM_C_COMPILER} @@ -101,15 +86,9 @@ set(CMAKE_ARM_OPTIONS -DENABLE_TEST=OFF -DBUILD_GTEST=OFF "-DNNAS_ROOT=${NNAS_PROJECT_SOURCE_DIR}" - -DENABLE_STRICT_BUILD=OFF "-DGENERATED_INCLUDE_DIR=${GENERATED_INCLUDE_DIR}" ) -if (GENERATE_KERNELS_LIST_FROM) - set(GENERATED_KERNELS_LIST_PATH "${LUCI_INTERPRETER_PAL_DIR}/GeneratedKernelsToBuild.lst") - list(APPEND CMAKE_ARM_OPTIONS "-DLUCI_INTERPRETER_KERNELS_BUILD_LIST=${GENERATED_KERNELS_LIST_PATH}") -endif () - if (NOT_BUILD_EXTERNALS) list(APPEND CMAKE_ARM_OPTIONS "-DNOT_BUILD_EXTERNALS=ON") else() @@ -157,26 +136,7 @@ add_custom_command( VERBATIM ) -add_custom_target(luci_interpreter_micro_arm_cmake DEPENDS "${MICRO_ARM_BUILD_DEPENDENCY}") - -# Generate KernelsToBuild list from circle model -if (GENERATE_KERNELS_LIST_FROM) - add_executable(generator_kernels_list_exec helpers/GenerateKernelsListHelper.cpp) - - target_link_libraries(generator_kernels_list_exec luci_micro_circle_reader) - target_link_libraries(generator_kernels_list_exec luci_micro_circle_schema) - - target_include_directories(generator_kernels_list_exec PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/include") - - add_custom_target( - generate_kernels_list ALL - COMMAND generator_kernels_list_exec ${GENERATE_KERNELS_LIST_FROM} ${GENERATED_KERNELS_LIST_PATH} - COMMENT "Generating KernelsToBuild list" - ) - add_dependencies(generate_kernels_list luci_micro_circle_reader) - add_dependencies(luci_interpreter_micro_arm_cmake generate_kernels_list) - -endif () +add_custom_target(onert_micro_arm_cmake DEPENDS "${MICRO_ARM_BUILD_DEPENDENCY}") # To remove GENERATE_KERNELS_LIST_FROM and KERNELS variable from cmake cache unset(GENERATE_KERNELS_LIST_FROM CACHE) @@ -187,17 +147,17 @@ unset(DIS_FLOAT CACHE) unset(ENABLE_ONERT_MICRO_TEST CACHE) unset(NOT_BUILD_EXTERNALS CACHE) -set(MICRO_ARM_BINARY "${MICRO_ARM_BUILD_DIR}/luci-interpreter/src/libluci_interpreter_micro.a") +set(MICRO_ARM_BINARY "${MICRO_ARM_BUILD_DIR}/onert_micro/src/libonert_micro_interpreter.a") add_custom_command( OUTPUT "${MICRO_ARM_BINARY}" - COMMAND "${CMAKE_MAKE_PROGRAM}" luci_interpreter_micro -j ${CPU_COUNT} + COMMAND "${CMAKE_MAKE_PROGRAM}" onert_micro_interpreter -j ${CPU_COUNT} WORKING_DIRECTORY "${MICRO_ARM_BUILD_DIR}" - DEPENDS luci_interpreter_micro_arm_cmake luci_micro_circle_schema + DEPENDS onert_micro_arm_cmake ${OM_CIRCLE_SCHEMA} VERBATIM ) -add_custom_target(luci_interpreter_micro_arm DEPENDS "${MICRO_ARM_BINARY}") +add_custom_target(onert_micro_arm DEPENDS "${MICRO_ARM_BINARY}") add_subdirectory(eval-driver) diff --git a/onert-micro/eval-driver/CMakeLists.txt b/onert-micro/eval-driver/CMakeLists.txt index 8b29d968bc6..70381d644e4 100644 --- a/onert-micro/eval-driver/CMakeLists.txt +++ b/onert-micro/eval-driver/CMakeLists.txt @@ -5,10 +5,10 @@ add_executable(onert_micro_eval_driver ${SRCS_EVAL_TESTER}) # This variable is needed to separate standalone interpreter libraries from the libraries used in driver set(READER_SUFFIX "_driver") -add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/onert-micro/luci-interpreter ${CMAKE_CURRENT_BINARY_DIR}/luci-interpreter) +add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/onert-micro/onert-micro ${CMAKE_CURRENT_BINARY_DIR}/onert-micro) -target_include_directories(onert_micro_eval_driver PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/luci-interpreter/include") -target_link_libraries(onert_micro_eval_driver PUBLIC luci_interpreter_micro) +target_include_directories(onert_micro_eval_driver PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/onert_micro/include") +target_link_libraries(onert_micro_eval_driver PUBLIC onert_micro_interpreter) install(TARGETS onert_micro_eval_driver DESTINATION bin) diff --git a/onert-micro/eval-driver/Driver.cpp b/onert-micro/eval-driver/Driver.cpp index d29c41da3e0..b4570e5776e 100644 --- a/onert-micro/eval-driver/Driver.cpp +++ b/onert-micro/eval-driver/Driver.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#include +#include "OMInterpreter.h" #include #include @@ -94,7 +94,9 @@ int entry(int argc, char **argv) } // Create interpreter. - luci_interpreter::Interpreter interpreter(model_data.data(), true); + onert_micro::OMInterpreter interpreter; + onert_micro::OMConfig config; + interpreter.importModel(model_data.data(), config); // Set input. // Data for n'th input is read from ${input_prefix}n @@ -102,28 +104,31 @@ int entry(int argc, char **argv) int num_inference = 1; for (int j = 0; j < num_inference; ++j) { + interpreter.reset(); + interpreter.allocateInputs(); for (int32_t i = 0; i < num_inputs; i++) { - auto input_data = reinterpret_cast(interpreter.allocateInputTensor(i)); + auto input_data = reinterpret_cast(interpreter.getInputDataAt(i)); readDataFromFile(std::string(input_prefix) + std::to_string(i), input_data, - interpreter.getInputDataSizeByIndex(i)); + interpreter.getInputSizeAt(i) * sizeof(float)); } // Do inference. - interpreter.interpret(); + interpreter.run(); } // Get output. int num_outputs = 1; for (int i = 0; i < num_outputs; i++) { - auto data = interpreter.readOutputTensor(i); + auto data = interpreter.getOutputDataAt(i); // Output data is written in ${output_file} // (ex: Add.circle.output0) writeDataToFile(std::string(output_file) + std::to_string(i), reinterpret_cast(data), - interpreter.getOutputDataSizeByIndex(i)); + interpreter.getOutputSizeAt(i) * sizeof(float)); } + interpreter.reset(); return EXIT_SUCCESS; } diff --git a/onert-micro/externals/CMakeLists.txt b/onert-micro/externals/CMakeLists.txt index 221001cfe09..d60bb0c9627 100644 --- a/onert-micro/externals/CMakeLists.txt +++ b/onert-micro/externals/CMakeLists.txt @@ -1,9 +1,8 @@ -unset(OUTPUT_FILES) -set(OUTPUT_FILES "${ONERT_MICRO_EXTERNAL_DIR}/gen/circle-generated/circle/schema_generated.h") -set(TGT luci_micro_circle_schema) +unset(SOURCES) +set(SOURCES "${ONERT_MICRO_EXTERNAL_DIR}/gen/circle-generated/circle/schema_generated.h") # NOTE This header-only library -add_library(${TGT} STATIC ${OUTPUT_FILES}) -set_target_properties(${TGT} PROPERTIES LINKER_LANGUAGE CXX) -target_include_directories(${TGT} PUBLIC "${ONERT_MICRO_EXTERNAL_DIR}/gen") -target_include_directories(${TGT} PUBLIC "${ONERT_MICRO_EXTERNAL_DIR}") +add_library(${OM_CIRCLE_SCHEMA} STATIC ${OUTPUT_FILES}) +set_target_properties(${OM_CIRCLE_SCHEMA} PROPERTIES LINKER_LANGUAGE CXX) +target_include_directories(${OM_CIRCLE_SCHEMA} PUBLIC "${ONERT_MICRO_EXTERNAL_DIR}/gen") +target_include_directories(${OM_CIRCLE_SCHEMA} PUBLIC "${ONERT_MICRO_EXTERNAL_DIR}") diff --git a/onert-micro/onert-micro/include/OMStatus.h b/onert-micro/onert-micro/include/OMStatus.h index 9fe91060f8e..57f7b83ddfd 100644 --- a/onert-micro/onert-micro/include/OMStatus.h +++ b/onert-micro/onert-micro/include/OMStatus.h @@ -31,7 +31,6 @@ enum OMStatus ModelNotImport, FailedCheckCondition, NoQuantization, - UnsupportedQuantizationType, UnsupportedDynamicShapeCase, }; diff --git a/onert-micro/standalone/CMakeLists.txt b/onert-micro/standalone/CMakeLists.txt index e8495974c19..68a0334213b 100644 --- a/onert-micro/standalone/CMakeLists.txt +++ b/onert-micro/standalone/CMakeLists.txt @@ -1,6 +1,5 @@ cmake_minimum_required(VERSION 3.15) -project(luci_interpreter_micro_standalone) - +project(onert_micro_standalone) include(${NNAS_ROOT}/infra/onert-micro/utils.cmake) if (NOT ${NOT_BUILD_EXTERNALS}) @@ -11,4 +10,4 @@ else() endif() # TODO: fix luci/plan for new luci-micro without luci/IR -add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/onert-micro/luci-interpreter ${CMAKE_CURRENT_BINARY_DIR}/luci-interpreter) +add_subdirectory(${NNAS_PROJECT_SOURCE_DIR}/onert-micro/onert-micro ${CMAKE_CURRENT_BINARY_DIR}/onert-micro)