Skip to content

Commit

Permalink
[onert-micro] Switch project to refactored version (#12857)
Browse files Browse the repository at this point in the history
This commit switches project to new refactored version.

ONE-DCO-1.0-Signed-off-by: Vyacheslav Bazhenov <[email protected]>
  • Loading branch information
SlavikMIPT authored Apr 10, 2024
1 parent aa3a900 commit 3bc4433
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 83 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/run-onert-micro-unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
80 changes: 20 additions & 60 deletions onert-micro/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand All @@ -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"
Expand All @@ -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}
Expand All @@ -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()
Expand Down Expand Up @@ -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)
Expand All @@ -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)

Expand Down
6 changes: 3 additions & 3 deletions onert-micro/eval-driver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
19 changes: 12 additions & 7 deletions onert-micro/eval-driver/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

#include <luci_interpreter/Interpreter.h>
#include "OMInterpreter.h"

#include <stdexcept>
#include <cstdlib>
Expand Down Expand Up @@ -94,36 +94,41 @@ 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
// (ex: Add.circle.input0, Add.circle.input1 ..)
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<char *>(interpreter.allocateInputTensor(i));
auto input_data = reinterpret_cast<char *>(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<char *>(data),
interpreter.getOutputDataSizeByIndex(i));
interpreter.getOutputSizeAt(i) * sizeof(float));
}
interpreter.reset();
return EXIT_SUCCESS;
}

Expand Down
13 changes: 6 additions & 7 deletions onert-micro/externals/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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}")
1 change: 0 additions & 1 deletion onert-micro/onert-micro/include/OMStatus.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ enum OMStatus
ModelNotImport,
FailedCheckCondition,
NoQuantization,
UnsupportedQuantizationType,
UnsupportedDynamicShapeCase,
};

Expand Down
5 changes: 2 additions & 3 deletions onert-micro/standalone/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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})
Expand All @@ -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)

0 comments on commit 3bc4433

Please sign in to comment.