| # 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. |