blob: 6fe084f038420fd4a2528aa47c1d2c0a5fddcc97 [file] [log] [blame] [view]
# 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)
* vmvx_ukernel: Custom microkernel library for VMVX
## 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_BIN_DIR="$(IREE_COMPILER_DIR)/install/bin" \
-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.