ml/ml-models-public: build selected models for Kelvin For Kelvin, only build models that can fit its memory. Add support for kelvin output header. Change-Id: I06d7cda48f1659b51dacfb599da59bdaacaab3b6
diff --git a/float_models/CMakeLists.txt b/float_models/CMakeLists.txt index 51fa579..68a422e 100644 --- a/float_models/CMakeLists.txt +++ b/float_models/CMakeLists.txt
@@ -71,6 +71,11 @@ # # to increase it. +# Do not compile following models for Kelvin +if (${BUILD_WITH_KELVIN}) + return() +endif() + iree_cc_binary( NAME mobilenet_v1_bytecode_static
diff --git a/float_models/iree_exec/mnist.c b/float_models/iree_exec/mnist.c index 4ae4782..d4d2531 100644 --- a/float_models/iree_exec/mnist.c +++ b/float_models/iree_exec/mnist.c
@@ -62,7 +62,7 @@ iree_status_t process_output(const MlModel *model, iree_hal_buffer_mapping_t *buffers, - uint32_t *output_length) { + uint32_t *output_length, uint32_t *output_ptr) { iree_status_t result = iree_ok_status(); // find the label index with best prediction float best_out = 0.0; @@ -81,5 +81,6 @@ LOG_INFO("Digit recognition result is: digit: %d", best_idx); *output_length = sizeof(score); + *output_ptr = (uint32_t)&score; return result; }
diff --git a/float_models/iree_exec/mobilenet_v1.c b/float_models/iree_exec/mobilenet_v1.c index 27946d9..e8cb740 100644 --- a/float_models/iree_exec/mobilenet_v1.c +++ b/float_models/iree_exec/mobilenet_v1.c
@@ -62,7 +62,7 @@ iree_status_t process_output(const MlModel *model, iree_hal_buffer_mapping_t *buffers, - uint32_t *output_length) { + uint32_t *output_length, uint32_t *output_ptr) { iree_status_t result = iree_ok_status(); // find the label index with best prediction float best_out = 0.0; @@ -80,5 +80,6 @@ LOG_INFO("Image prediction result is: id: %d", best_idx + 1); *output_length = sizeof(score); + *output_ptr = (uint32_t)&score; return result; }
diff --git a/quant_models/CMakeLists.txt b/quant_models/CMakeLists.txt index b6fef98..d248bfa 100644 --- a/quant_models/CMakeLists.txt +++ b/quant_models/CMakeLists.txt
@@ -28,6 +28,10 @@ "mobilenet_v1_0.25_224_quant.tflite" C_IDENTIFIER "quant_models_mobilenet_v1" + TFLITE_OUTPUT + # TODO(b/287490866): remove this argument after IREE fix is landed + "--output-array=MobilenetV1/Logits/SpatialSqueeze" + MobilenetV1/Logits/SpatialSqueeze FLAGS "-iree-input-type=tosa" "-riscv-v-fixed-length-vector-lmul-max=8" @@ -111,55 +115,6 @@ # # to increase it. -foreach(N RANGE 0 6) - set(HPS_COPTS "-DHPS_QUANT_INPUT=hps_${N}_quant_input") - list(APPEND HPS_COPTS "-DHPS_QUANT_INPUT_C_H=\"hps_${N}_quant_input_c.h\"") - if (NOT BUILD_NO_WMMU) - list(APPEND HPS_COPTS "-DNO_STATIC_INPUT") - endif() - - iree_cc_binary( - NAME - hps_${N}_bytecode_static - SRCS - "iree_exec/hps.c" - DEPS - ::hps_${N}_quant_input_c - ::hps_bytecode_module_static_c - ::hps_bytecode_module_static_lib - iree::vm::bytecode::module - model_util::util_static - COPTS - ${HPS_COPTS} - LINKOPTS - "LINKER:--defsym=__stack_size__=200k" - # TODO(b/241297921): determine HPS heap size - "LINKER:--defsym=__heap_size__=5M" - ) - - sparrow_test( - NAME - hps_${N}_emitc_static - SRCS - "iree_exec/hps.c" - DEPS - ::hps_${N}_quant_input_c - ::hps_c_module_static_emitc - ::hps_c_module_static_lib - model_util::util_static - LINKOPTS - "LINKER:--defsym=__stack_size__=200k" - # TODO(b/241297921): determine HPS heap size - "LINKER:--defsym=__heap_size__=5M" - COPTS - ${HPS_COPTS} - "-DBUILD_EMITC" - TESTFILES - "iree_exec/hps_test.run" - "iree_exec/hps_${N}_test.filecheck" - ) -endforeach() - iree_cc_binary( NAME mobilenet_v1_bytecode_static @@ -198,42 +153,6 @@ iree_cc_binary( NAME - mobilenet_v2_bytecode_static - SRCS - "iree_exec/mobilenet_v2.c" - DEPS - ::mobilenet_quant_input_c - ::mobilenet_v2_bytecode_module_static_c - ::mobilenet_v2_bytecode_module_static_lib - iree::vm::bytecode::module - model_util::util_static - LINKOPTS - "LINKER:--defsym=__stack_size__=300k" - "LINKER:--defsym=__heap_size__=2m" -) - -sparrow_test( - NAME - mobilenet_v2_emitc_static - SRCS - "iree_exec/mobilenet_v2.c" - DEPS - ::mobilenet_quant_input_c - ::mobilenet_v2_c_module_static_emitc - ::mobilenet_v2_c_module_static_lib - model_util::util_static - LINKOPTS - "LINKER:--defsym=__stack_size__=300k" - "LINKER:--defsym=__heap_size__=2m" - COPTS - "-DBUILD_EMITC" - TESTFILES - "iree_exec/mobilenet_v2_test.run" - "iree_exec/mobilenet_v2_test.filecheck" -) - -iree_cc_binary( - NAME person_detection_bytecode_vmvx SRCS "iree_exec/person_detection.c" @@ -303,3 +222,93 @@ "iree_exec/person_detection_test.run" "iree_exec/person_detection_test.filecheck" ) + +# Do not compile following models for Kelvin +if (${BUILD_WITH_KELVIN}) + return() +endif() + +foreach(N RANGE 0 6) + set(HPS_COPTS "-DHPS_QUANT_INPUT=hps_${N}_quant_input") + list(APPEND HPS_COPTS "-DHPS_QUANT_INPUT_C_H=\"hps_${N}_quant_input_c.h\"") + if (NOT BUILD_NO_WMMU) + list(APPEND HPS_COPTS "-DNO_STATIC_INPUT") + endif() + + iree_cc_binary( + NAME + hps_${N}_bytecode_static + SRCS + "iree_exec/hps.c" + DEPS + ::hps_${N}_quant_input_c + ::hps_bytecode_module_static_c + ::hps_bytecode_module_static_lib + iree::vm::bytecode::module + model_util::util_static + COPTS + ${HPS_COPTS} + LINKOPTS + "LINKER:--defsym=__stack_size__=200k" + # TODO(b/241297921): determine HPS heap size + "LINKER:--defsym=__heap_size__=5M" + ) + + sparrow_test( + NAME + hps_${N}_emitc_static + SRCS + "iree_exec/hps.c" + DEPS + ::hps_${N}_quant_input_c + ::hps_c_module_static_emitc + ::hps_c_module_static_lib + model_util::util_static + LINKOPTS + "LINKER:--defsym=__stack_size__=200k" + # TODO(b/241297921): determine HPS heap size + "LINKER:--defsym=__heap_size__=5M" + COPTS + ${HPS_COPTS} + "-DBUILD_EMITC" + TESTFILES + "iree_exec/hps_test.run" + "iree_exec/hps_${N}_test.filecheck" + ) +endforeach() + +iree_cc_binary( + NAME + mobilenet_v2_bytecode_static + SRCS + "iree_exec/mobilenet_v2.c" + DEPS + ::mobilenet_quant_input_c + ::mobilenet_v2_bytecode_module_static_c + ::mobilenet_v2_bytecode_module_static_lib + iree::vm::bytecode::module + model_util::util_static + LINKOPTS + "LINKER:--defsym=__stack_size__=300k" + "LINKER:--defsym=__heap_size__=2m" +) + +sparrow_test( + NAME + mobilenet_v2_emitc_static + SRCS + "iree_exec/mobilenet_v2.c" + DEPS + ::mobilenet_quant_input_c + ::mobilenet_v2_c_module_static_emitc + ::mobilenet_v2_c_module_static_lib + model_util::util_static + LINKOPTS + "LINKER:--defsym=__stack_size__=300k" + "LINKER:--defsym=__heap_size__=2m" + COPTS + "-DBUILD_EMITC" + TESTFILES + "iree_exec/mobilenet_v2_test.run" + "iree_exec/mobilenet_v2_test.filecheck" +)
diff --git a/quant_models/iree_exec/hps.c b/quant_models/iree_exec/hps.c index d114e8f..4bbb983 100644 --- a/quant_models/iree_exec/hps.c +++ b/quant_models/iree_exec/hps.c
@@ -66,7 +66,7 @@ iree_status_t process_output(const MlModel *model, iree_hal_buffer_mapping_t *buffers, - uint32_t *output_length) { + uint32_t *output_length, uint32_t *output_ptr) { iree_status_t result = iree_ok_status(); int8_t *data = (int8_t *)buffers[0].contents.data; score.score_0 = data[0]; @@ -75,5 +75,6 @@ LOG_INFO("Score 0: %d, Score 1: %d", score.score_0, score.score_1); *output_length = sizeof(score); + *output_ptr = (uint32_t)&score; return result; }
diff --git a/quant_models/iree_exec/mobilenet_v1.c b/quant_models/iree_exec/mobilenet_v1.c index a5cd523..4c44dbb 100644 --- a/quant_models/iree_exec/mobilenet_v1.c +++ b/quant_models/iree_exec/mobilenet_v1.c
@@ -63,7 +63,7 @@ iree_status_t process_output(const MlModel *model, iree_hal_buffer_mapping_t *buffers, - uint32_t *output_length) { + uint32_t *output_length, uint32_t *output_ptr) { iree_status_t result = iree_ok_status(); // find the label index with best prediction int best_out = 0; @@ -81,5 +81,6 @@ LOG_INFO("Image prediction result is: id: %d", best_idx + 1); *output_length = sizeof(score); + *output_ptr = (uint32_t)&score; return result; }
diff --git a/quant_models/iree_exec/mobilenet_v2.c b/quant_models/iree_exec/mobilenet_v2.c index 66a00d7..c625520 100644 --- a/quant_models/iree_exec/mobilenet_v2.c +++ b/quant_models/iree_exec/mobilenet_v2.c
@@ -63,7 +63,7 @@ iree_status_t process_output(const MlModel *model, iree_hal_buffer_mapping_t *buffers, - uint32_t *output_length) { + uint32_t *output_length, uint32_t *output_ptr) { iree_status_t result = iree_ok_status(); // find the label index with best prediction int best_out = 0; @@ -81,5 +81,6 @@ LOG_INFO("Image prediction result is: id: %d", best_idx + 1); *output_length = sizeof(score); + *output_ptr = (uint32_t)&score; return result; }
diff --git a/quant_models/iree_exec/person_detection.c b/quant_models/iree_exec/person_detection.c index e7d948b..23c2187 100644 --- a/quant_models/iree_exec/person_detection.c +++ b/quant_models/iree_exec/person_detection.c
@@ -78,7 +78,7 @@ iree_status_t process_output(const MlModel *model, iree_hal_buffer_mapping_t *buffers, - uint32_t *output_length) { + uint32_t *output_length, uint32_t *output_ptr) { iree_status_t result = iree_ok_status(); int8_t *data = (int8_t *)buffers[0].contents.data; detection.non_person_score = data[0]; @@ -88,5 +88,6 @@ detection.non_person_score, detection.person_score); *output_length = sizeof(detection); + *output_ptr = (uint32_t)&detection; return result; }