-
Notifications
You must be signed in to change notification settings - Fork 595
Initial framework of an ethos-u runtime backend #2 #595
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
- Basic runtime targeting Corstone-300 with U55 - cross compile support with a cmake toolchain (Arm baremetal build) - support for a few models AoT -> TOSA -> Vela -> U55 hardware - dependencies on the ethos-u core driver and cmsis (submodules) Signed-off-by: Rob Elliott <robert.elliott@arm.com>
✅ Deploy Preview for resplendent-gnome-14e531 canceled.
|
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Summary: Sometimes, esp when using the Portable library, Release mode is the only viable option to get a resonable binary size and performance, even to debug stuff. Differential Revision: D49876324 fbshipit-source-id: 501d96304b8e37452a1a58e289d57cfc62ebbcdd
Summary: This will align better with structure proposed in D49714823 Differential Revision: D49899370 fbshipit-source-id: 86d89c8060a6685f84dc186ea38beba4388894db
Summary: This is needed to generate `portable_ops_lib` with select number of ops for quick testing when we can't afford to link all the ops for size reasons. Arm Baremetal builds is one example. Differential Revision: D49899554 fbshipit-source-id: 9d35e7bfd1c1975da640e62493fc744898ad6714
Summary: This is an interesting usecase to demonstrate on ARM Baremetal setup where they currently can't lower SoftMax. One of the only few from MV2. It is useful as a test as well while debugging this flow. Differential Revision: D49899589 fbshipit-source-id: c0307c7452a69eb707429328ba6654b2b660ce23
Differential Revision: https://internalfb.com/D49899371 fbshipit-source-id: 42cf5c8ad445b0405f9c23e3654b6a32fbc61522
Summary: An example script to build and run executor_runner baremetal version on ARM M-class CPUs ``` I executorch:runner.cpp:63] Model PTE file loaded. Size: 960 bytes. I executorch:runner.cpp:69] Model buffer loaded, has 1 methods I executorch:runner.cpp:77] Running method forward I executorch:runner.cpp:94] Setting up planned buffer 0, size 32. I executorch:runner.cpp:109] Method loaded. I executorch:runner.cpp:111] Preparing inputs... I executorch:runner.cpp:113] Input prepared. I executorch:runner.cpp:115] Starting the model execution... I executorch:runner.cpp:120] Model executed successfully. I executorch:runner.cpp:124] 1 outputs: Output[0][0]: 0.500000 Output[0][1]: 0.500000 Output[0][2]: 0.500000 Output[0][3]: 0.500000 ``` Differential Revision: D49900956 fbshipit-source-id: e30571f95abd5311f3ab649fcb1d154b4f5c3310
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
* There is a toolchain/linking issue mixing hard and soft float ABI which is causing the test to fail, but the structure is there and the delegate is registered. Signed-off-by: Rob Elliott <robert.elliott@arm.com>
.gitmodules
Outdated
[submodule "backends/arm/third-party/ethos-u-core-driver"] | ||
path = backends/arm/third-party/ethos-u-core-driver | ||
url = https://git.mlplatform.org/ml/ethos-u/ethos-u-core-driver.git | ||
[submodule "backends/arm/third-party/cmsis"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is this used for?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These are essentially the driver headers for ethos-u we need to link against.
I've also added a build of the ethos-u driver in executorch cmake (ethosu_core_driver target) but I moved to link against the demo app library build of it and can remove the target.
We still need this small submodule for the header/interface - it's fortunately small, but unfortunately it pulls in CMSIS for a few platform defines which is huge - this is really the area we discussed a build script pulling these in. Given ./run has a checkout of the core_platform and core_software, I'll look at moving to those and removing these submodules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've removed most of this, we just have the small ethos-u-core-driver for headers now, and don't build it in tree and cmsis is removed. The driver builds in the driver/app repo and that app links the two together.
as it's only 25 files i suggest we keep the driver as a submodule to keep things simple until there's a more general "selective submodule" approach.
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
@@ -0,0 +1,90 @@ | |||
# Copyright 2023 Arm Limited and/or its affiliates. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this same as - core_platform/cmake/toolchain/arm-none-eabi-gcc.cmake
? But will respect cmdline vars?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd anticipate further changes and cleaning but it was derived from there, yes.
It has a similar override but for m55 our only current supported target. The way the toolchain file is constructed, some of the general ./configure like step in cmake was invoking it without an appropriate value so the default prevents the -mfpu flag which was the default set on an m4 target messing things up.
* Override the default CPU in cmake which was causing a mixture of FPU and ABI flags to be passed to different compilation stages. * Updated fallback logging implementation in delegate app to fix sporadic crash Signed-off-by: Rob Elliott <robert.elliott@arm.com>
* uses the simple_add model to run through the AoT flow and the various debug options for looking at export. * produces a .pte file for runtime delegation on the ArmBackend for Ethos-U55 platforms Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
* export the list of offset from AoT floq * appropriately copy inputs and ouputs to/from SRAM Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
#659 replaces this |
Summary: Cleaned up ethos-u runtime flow, replaces #595 Added shell of runtime Arm Backend for Ethos-U ./backends/arm/cmake/build.sh will pull the appropriate compiler and build the ethos-u driver and delegate and produce the libraries needed to link an application in, which can run a delegated .pte with the revised vela_bin_stream form contained in these patches. Currently supports .pte files stored in SRAM. Pull Request resolved: #659 Reviewed By: cccclai Differential Revision: D50035452 Pulled By: digantdesai fbshipit-source-id: 7b8a23836c92dfa9235decf4c631654fa8fc396a
Replaces PR #501
(will close 501 shortly once comments are reviewed/addressed)
Added shell of runtime Arm Backend for Ethos-U
./backends/arm/cmake/build.sh will pull the appropriate compiler and build the ethos-u driver and delegate and produce the libraries needed to link an application in, which can run a delegated .pte with the revised vela_bin_stream form contained in these patches.
Currently supports .pte files stored in SRAM.