commit | e20f53770a72e0870b23b581ce0d1d37c8c56361 | [log] [tgz] |
---|---|---|
author | Lun Dong <lundong@google.com> | Tue Mar 01 19:11:33 2022 +0000 |
committer | Lun Dong <lundong@google.com> | Thu Mar 03 16:32:44 2022 +0000 |
tree | 9e9e19df5de3563a9e71fc3f1f21e6b8675b4234 | |
parent | 69c7a43f172a969cf189bbd97b1f19956230d994 [diff] |
Integrate RISP4ML into Shodan ML Toolchain using Fssd model This CL is Part 2 of the comprehensive 3-part changes of integrating RISP4ML into Shodan ML toolchain. This change focuses on integrating RISP4ML using the FSSD model as an example. I have verifed that the output@RISP4ML running on Qemu/Renode completely matches with the output@RISPML running on google3. Details of the 3-part changes: (Part 1) Completely re-wrote RISP4ML in plain C. - https://spacebeaker-review.googlesource.com/c/shodan/sw/vec-iree/+/17180 - The original RISP4ML on google3 was written in C++. The memory usage with C++ RISP4ML was significantly larger. Thus, I have completely re-written RISP4ML in plain C. The memory increase with the plain-C RISP4ML is much smaller. - Made the input/output shape to be configurable arguments instead of constants. - Made low-level optimizations and simplifications. (Part 2) Integrated plain-C RISP4ML into Shodan ML toolchain (this CL) - Use fssd_25_8bit_v2 as an example to load the binary (raw bayer) file and go through RISP4ML toolchain, and feed the RISP4ML output into IREE flow. - The fssd_25_8bit_v2 example is up and running, and the correctness of output has been verified (compare output@plain-C risp4ml against output@google3). (Part 3) Added unit tests for plain-C RISP4ML - Added unit tests based on pw_unit_test - Build unit tests in iree_cc_binary - Run and check unit tests via lit_test Change-Id: I90eb31cb4b5cecfee79ad0952025ad97e12b9b52
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).
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.
<dir>/sw/vec
<dir>/toolchain/iree
<dir>/ml/ml-models-public
This project needs to be at <dir>/sw/vec_iree
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
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
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.
In Shodan, this project utilizes LLVM lit
and FileCheck
to test the ML executable performance. The tests are defined in the *_test.txt files under samples
. To run the test, at the Shodan top level directory
lit --path <Filecheck dir> -a sw/vec_iree/samples
Filecheck in Debian testing is under /usr/lib/llvm-11/bin
Add -D FEATURES=internal
to enable the internal model tests. Add -D RUNNER=qemu
to enable the qemu tests.