| # Springbok Model Execution Repository | |
| This project contains ML model codegen and execution libraries/examples. The | |
| artifacts built from this project is targeted for RISC-V 32-bit baremetal machine | |
| (Springbok). | |
| ## Prerequisite | |
| If you get this project from Project Shodan manifest, you are all set. If not, | |
| you need to have following projects as well to build the project successfully. | |
| * [Springbok BSP](https://spacebeaker.googlesource.com/shodan/sw/vec): Under `<dir>/sw/vec` | |
| * [IREE](https://github.com/google/iree): Under `<dir>/toolchain/iree` | |
| * [Public ML models](https://spacebeaker.googlesource.com/shodan/ml-models-public): Under `<dir>/ml/ml-models-public` | |
| * RISC-V 32-bit crosscompile toolchain | |
| This project needs to be at `<dir>/sw/vec_iree` | |
| ## Code structure | |
| * audio_prep: Audio preprocessing libarary | |
| * build_tools: Utility scripts for the project | |
| * cmake: CMake Macros for the project | |
| * device: Device HAL driver library | |
| * model_util: Runtime utility library for model execution | |
| * native_log: BSP support for the Linux userspace emulation | |
| * risp4ml: Vision preprocessing library (Reduced ISP for ML) | |
| * samples: Codegen and execution of ML models based on IREE | |
| * simple_vec_mul: Point-wise vector multiplication examples | |
| * ssd_postprocess: Vision postprocessing library for Single-Shot Detectors (SSD) | |
| ## Build the project | |
| If you are running from Project Shodan repo, you can build the artifacts with `m iree`. | |
| If you download this project alone, you need to download/build IREE's host compiler, | |
| then at the top level directory | |
| ```bash | |
| cmake -B <output dir> -G Ninja \ | |
| -DCMAKE_TOOLCHAIN_FILE="$(realpath sw/vec_iree/cmake/riscv_iree.cmake)" \ | |
| -DCMAKE_BUILD_TYPE=MinSizeRel \ | |
| -DIREE_HOST_BINARY_ROOT="$(IREE_COMPILER_DIR)/install" \ | |
| -DRISCV_TOOLCHAIN_ROOT=$(TOOLCHAINRV32_PATH) \ | |
| <dir>/sw/vec_iree | |
| cmake --build <output dir> --target all | |
| ``` | |
| ## Run the executables | |
| You can run QEMU or RENODE emulation with the built executables. In Shodan repo, | |
| `qemu_sim_springbok` for QEMU emulation, and `sim_springbok` for Renode simulation. | |
| Out-of-repo emulation is possible but require more steps. | |
| ## Test the executables | |
| In Shodan, this project utilizes LLVM `lit` and `FileCheck` to test the ML | |
| executable performance. The tests are defined in the *_test.run files under | |
| `<output dir>`. To run the test, at the Shodan top level directory | |
| ```bash | |
| lit --path <Filecheck dir> -a <output dir> | |
| ``` | |
| Filecheck in Debian testing is under `/usr/lib/llvm-11/bin` | |
| Add `-D RUNNER=qemu` to enable the qemu tests. |