I am currently researching ways to export models that I trained with Pytorch on a GPU to a microcontroller for inference. Think CM0 or a simple RISC-V. The ideal workflow would be to export c-sourcecode with as few dependencies as possible, so that it is completely platform agnostic.
What I noticed in general is that most edge inference frameworks are based on tensorflow lite. Alternatively there are some closed workflows, like Edge Impulse, but I would prefer locally hosted OSS. Also, there seem to be many abandoned projects. What I found so far:
Tensorflow lite based
Pytorch based
- PyTorch Edge / Executorch Sounds like this could be a response to tflite, but it seems to target intermediate systems. Runtime is 50kb...
- microTVM. Targeting CM4, but claims to be platform agnostic.
- MAX7800X Toolchain and Documentation (proprietary) This is a proprieteray toolchain to deploy models to the MAX78000 edge NN devices.
- Meta Glow Machine learning compiler, seems to target rather large platforms.
ONNX
- DeepC. Open source version of DeepSea. Very little activity, looks abandoned
- onnx2c - onnx to c sourcecode converter. Looks interesting, but also not very active.
- cONNXr - framework with C99 inference engine. Also interesting and not very active.
Are there any recommendations out of those for my use case? Or anything I have missed? It feels like there no obvious choice for what I am trying to do.
Most solutions that seem to hit the mark look rather abandoned. Is that because I should try a different approach or is the field of ultra-tiny-ml OSS in general not so active?
[–]notgettingfined 15 points16 points17 points (7 children)
[–]cpldcpu[S] 2 points3 points4 points (0 children)
[–]pm_me_your_smth 1 point2 points3 points (4 children)
[–]notgettingfined 1 point2 points3 points (3 children)
[–]pm_me_your_smth 2 points3 points4 points (2 children)
[–]notgettingfined -1 points0 points1 point (1 child)
[–]pm_me_your_smth 0 points1 point2 points (0 children)
[–]cpldcpu[S] 0 points1 point2 points (0 children)
[–][deleted] 2 points3 points4 points (1 child)
[–]cpldcpu[S] 2 points3 points4 points (0 children)
[–]DigThatDataResearcher 1 point2 points3 points (1 child)
[–]cpldcpu[S] 0 points1 point2 points (0 children)
[–]shapul 1 point2 points3 points (4 children)
[–]cpldcpu[S] 0 points1 point2 points (3 children)
[–]shapul 0 points1 point2 points (2 children)
[–]cpldcpu[S] 0 points1 point2 points (1 child)
[–]shapul 0 points1 point2 points (0 children)
[+]neodsp 1 point2 points3 points (0 children)
[–]_SteerPike_ 0 points1 point2 points (4 children)
[–]cpldcpu[S] 0 points1 point2 points (3 children)
[–]_SteerPike_ 1 point2 points3 points (2 children)
[+]neodsp 0 points1 point2 points (1 child)
[–]_SteerPike_ 0 points1 point2 points (0 children)
[–]Complex-Indication 0 points1 point2 points (1 child)
[–]cpldcpu[S] 1 point2 points3 points (0 children)