Skip to content

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

Closed
wants to merge 25 commits into from

Conversation

robell
Copy link
Collaborator

@robell robell commented Oct 3, 2023

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.

robell added 2 commits October 3, 2023 21:43
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>
@netlify
Copy link

netlify bot commented Oct 3, 2023

Deploy Preview for resplendent-gnome-14e531 canceled.

Name Link
🔨 Latest commit 76a393a
🔍 Latest deploy log https://app.netlify.com/sites/resplendent-gnome-14e531/deploys/651faf6cda798d0008a44588

@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 3, 2023
robell and others added 10 commits October 4, 2023 08:35
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"]
Copy link
Contributor

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?

Copy link
Collaborator Author

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.

Copy link
Collaborator Author

@robell robell Oct 5, 2023

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.

robell added 2 commits October 4, 2023 16:05
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
@@ -0,0 +1,90 @@
# Copyright 2023 Arm Limited and/or its affiliates.
Copy link
Contributor

@digantdesai digantdesai Oct 4, 2023

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?

Copy link
Collaborator Author

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.

robell added 11 commits October 4, 2023 20:09
 * 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>
Signed-off-by: Rob Elliott <robert.elliott@arm.com>
@robell
Copy link
Collaborator Author

robell commented Oct 6, 2023

#659 replaces this

facebook-github-bot pushed a commit that referenced this pull request Oct 7, 2023
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
@robell robell closed this Oct 9, 2023
@robell robell added the partner: arm For backend delegation, kernels, demo, etc. from the 3rd-party partner, Arm label Jul 4, 2024
Gasoonjia pushed a commit that referenced this pull request Jul 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. partner: arm For backend delegation, kernels, demo, etc. from the 3rd-party partner, Arm
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants