From 300fe33e81b4a7b3d9a1b7a598c87ca1be2f706b Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Thu, 13 Mar 2025 23:18:43 -0700 Subject: [PATCH 1/7] Simplify build script --- .github/workflows/_android.yml | 2 +- .github/workflows/android-release-artifacts.yml | 7 +++++-- build/build_android_library.sh | 13 ++++++------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index 7061eb72aa3..b6fd2b9ec26 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -30,7 +30,7 @@ jobs: # Build LLM Demo for Android bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} - bash build/build_android_instrumentation.sh + bash build/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} # Running Android emulator directly on the runner and not using Docker run-emulator: diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 26423e59233..35cd1bb7dc8 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -52,8 +52,11 @@ jobs: PYTHON_EXECUTABLE=python bash .ci/scripts/setup-linux.sh --build-tool buck2 export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded - # Build LLM Demo for Android - bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} + # Build AAR Package + mkdir aar-out + export BUILD_AAR_DIR=aar-out + bash build/build_android_library.sh + cp aar-out/executorch.aar "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar" shasum -a 256 "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar" diff --git a/build/build_android_library.sh b/build/build_android_library.sh index 32b2210a54e..a01d24addd8 100644 --- a/build/build_android_library.sh +++ b/build/build_android_library.sh @@ -159,9 +159,8 @@ collect_artifacts_to_be_uploaded() { # Collect the app and its test suite cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" - # Collect JAR and AAR - cp extension/android/build/libs/executorch.jar "${DEMO_APP_DIR}" - find "${BUILD_AAR_DIR}/" -name 'executorch*.aar' -exec cp {} "${DEMO_APP_DIR}" \; + # Collect AAR + cp "${BUILD_AAR_DIR}/executorch.aar" "${DEMO_APP_DIR}" # Collect MiniBench APK MINIBENCH_APP_DIR="${ARTIFACTS_DIR_NAME}/minibench" mkdir -p "${MINIBENCH_APP_DIR}" @@ -186,10 +185,10 @@ main() { build_android_native_library ${ANDROID_ABI} done build_aar - build_android_demo_apps - if [ -n "$ARTIFACTS_DIR_NAME" ]; then - collect_artifacts_to_be_uploaded ${ARTIFACTS_DIR_NAME} - fi + # build_android_demo_apps + # if [ -n "$ARTIFACTS_DIR_NAME" ]; then + # collect_artifacts_to_be_uploaded ${ARTIFACTS_DIR_NAME} + # fi } if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then From f35b9f75b04a39a800ec129eefc934660933f53e Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Thu, 13 Mar 2025 23:29:19 -0700 Subject: [PATCH 2/7] Move to CI workflow --- .github/workflows/_android.yml | 7 +++++++ .github/workflows/android-perf.yml | 21 +++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index b6fd2b9ec26..75551e3e876 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -32,6 +32,13 @@ jobs: bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} bash build/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} + mkdir -p examples/demo-apps/android/LlamaDemo/app/libs + cp ${BUILD_AAR_DIR}/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs + pushd examples/demo-apps/android/LlamaDemo + ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest + popd + + # Running Android emulator directly on the runner and not using Docker run-emulator: needs: build-llm-demo diff --git a/.github/workflows/android-perf.yml b/.github/workflows/android-perf.yml index fbd2cae24e0..2613e79aaa4 100644 --- a/.github/workflows/android-perf.yml +++ b/.github/workflows/android-perf.yml @@ -362,8 +362,25 @@ jobs: PYTHON_EXECUTABLE=python bash .ci/scripts/setup-qnn-deps.sh PYTHON_EXECUTABLE=python bash .ci/scripts/build-qnn-sdk.sh - export ANDROID_ABIS="arm64-v8a" - PYTHON_EXECUTABLE=python EXECUTORCH_BUILD_QNN=ON QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} + mkdir -p aar-out + PYTHON_EXECUTABLE=python ANDROID_ABIS="arm64-v8a" BUILD_AAR_DIR=aar-out EXECUTORCH_BUILD_QNN=ON QNN_SDK_ROOT=/tmp/qnn/2.28.0.241029 bash build/build_android_library.sh + mkdir -p extension/benchmark/android/benchmark/app/libs + cp aar-out/executorch.aar extension/benchmark/android/benchmark/app/libs + pushd extension/benchmark/android/benchmark + ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest + popd + MINIBENCH_APP_DIR="${ARTIFACTS_DIR_NAME}/minibench" + mkdir -p "${MINIBENCH_APP_DIR}" + cp extension/benchmark/android/benchmark/app/build/outputs/apk/debug/*.apk "${MINIBENCH_APP_DIR}" + cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}" + + DEMO_APP_DIR="${ARTIFACTS_DIR_NAME}/llm_demo" + # The app directory is named using its build flavor as a suffix. + mkdir -p "${DEMO_APP_DIR}" + # Collect the app and its test suite + cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" + cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" + # Let's see how expensive this job is, we might want to tone it down by running it periodically benchmark-on-device: From 315d897aecada8b36fa4bc80edd7aebea1650a37 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 14 Mar 2025 11:17:10 -0700 Subject: [PATCH 3/7] Update --- .github/workflows/_android.yml | 9 ++++++++- .github/workflows/android-perf.yml | 8 -------- .github/workflows/android-release-artifacts.yml | 1 + 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index 75551e3e876..b19a7bfdc97 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -29,15 +29,22 @@ jobs: export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded # Build LLM Demo for Android + export BUILD_AAR_DIR=aar-out bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} bash build/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} mkdir -p examples/demo-apps/android/LlamaDemo/app/libs - cp ${BUILD_AAR_DIR}/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs + cp aar-out/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs pushd examples/demo-apps/android/LlamaDemo ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest popd + DEMO_APP_DIR="${ARTIFACTS_DIR_NAME}/llm_demo" + # The app directory is named using its build flavor as a suffix. + mkdir -p "${DEMO_APP_DIR}" + # Collect the app and its test suite + cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" + cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" # Running Android emulator directly on the runner and not using Docker run-emulator: diff --git a/.github/workflows/android-perf.yml b/.github/workflows/android-perf.yml index 2613e79aaa4..e775d7316e6 100644 --- a/.github/workflows/android-perf.yml +++ b/.github/workflows/android-perf.yml @@ -374,14 +374,6 @@ jobs: cp extension/benchmark/android/benchmark/app/build/outputs/apk/debug/*.apk "${MINIBENCH_APP_DIR}" cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}" - DEMO_APP_DIR="${ARTIFACTS_DIR_NAME}/llm_demo" - # The app directory is named using its build flavor as a suffix. - mkdir -p "${DEMO_APP_DIR}" - # Collect the app and its test suite - cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" - cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" - - # Let's see how expensive this job is, we might want to tone it down by running it periodically benchmark-on-device: if: always() diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 35cd1bb7dc8..8809c77962a 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -56,6 +56,7 @@ jobs: mkdir aar-out export BUILD_AAR_DIR=aar-out bash build/build_android_library.sh + mkdir -p "${ARTIFACTS_DIR_NAME}/llm_demo" cp aar-out/executorch.aar "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar" shasum -a 256 "${ARTIFACTS_DIR_NAME}/llm_demo/executorch.aar" From ad8dc4bb0ee4d49f4f45dbf46897ef0308ba0615 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 14 Mar 2025 12:07:04 -0700 Subject: [PATCH 4/7] Simplify stuff --- build/build_android_library.sh | 35 ------------------- .../android/LlamaDemo/setup-with-qnn.sh | 8 +---- examples/demo-apps/android/LlamaDemo/setup.sh | 10 ++---- 3 files changed, 4 insertions(+), 49 deletions(-) diff --git a/build/build_android_library.sh b/build/build_android_library.sh index a01d24addd8..8f3b28d12e1 100644 --- a/build/build_android_library.sh +++ b/build/build_android_library.sh @@ -137,37 +137,6 @@ build_aar() { popd } -build_android_demo_apps() { - mkdir -p examples/demo-apps/android/LlamaDemo/app/libs - cp ${BUILD_AAR_DIR}/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs - pushd examples/demo-apps/android/LlamaDemo - ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest - popd - - mkdir -p extension/benchmark/android/benchmark/app/libs - cp ${BUILD_AAR_DIR}/executorch.aar extension/benchmark/android/benchmark/app/libs - pushd extension/benchmark/android/benchmark - ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew build assembleAndroidTest - popd -} - -collect_artifacts_to_be_uploaded() { - ARTIFACTS_DIR_NAME="$1" - DEMO_APP_DIR="${ARTIFACTS_DIR_NAME}/llm_demo" - # The app directory is named using its build flavor as a suffix. - mkdir -p "${DEMO_APP_DIR}" - # Collect the app and its test suite - cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/debug/*.apk "${DEMO_APP_DIR}" - cp examples/demo-apps/android/LlamaDemo/app/build/outputs/apk/androidTest/debug/*.apk "${DEMO_APP_DIR}" - # Collect AAR - cp "${BUILD_AAR_DIR}/executorch.aar" "${DEMO_APP_DIR}" - # Collect MiniBench APK - MINIBENCH_APP_DIR="${ARTIFACTS_DIR_NAME}/minibench" - mkdir -p "${MINIBENCH_APP_DIR}" - cp extension/benchmark/android/benchmark/app/build/outputs/apk/debug/*.apk "${MINIBENCH_APP_DIR}" - cp extension/benchmark/android/benchmark/app/build/outputs/apk/androidTest/debug/*.apk "${MINIBENCH_APP_DIR}" -} - main() { if [[ -z "${BUILD_AAR_DIR:-}" ]]; then BUILD_AAR_DIR="$(mktemp -d)" @@ -185,10 +154,6 @@ main() { build_android_native_library ${ANDROID_ABI} done build_aar - # build_android_demo_apps - # if [ -n "$ARTIFACTS_DIR_NAME" ]; then - # collect_artifacts_to_be_uploaded ${ARTIFACTS_DIR_NAME} - # fi } if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then diff --git a/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh b/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh index 1d251de9ef3..0f1cde1a06f 100644 --- a/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh +++ b/examples/demo-apps/android/LlamaDemo/setup-with-qnn.sh @@ -13,13 +13,7 @@ if [ -z "$QNN_SDK_ROOT" ]; then fi BASEDIR=$(dirname "$0") -source "$BASEDIR"/../../../../build/build_android_library.sh +ANDROID_ABIS="arm64-v8a" bash "$BASEDIR"/setup.sh BUILD_AAR_DIR="$(mktemp -d)" export BUILD_AAR_DIR - -build_jar -build_android_native_library "arm64-v8a" -build_aar -mkdir -p "$BASEDIR"/app/libs -cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/app/libs/executorch.aar diff --git a/examples/demo-apps/android/LlamaDemo/setup.sh b/examples/demo-apps/android/LlamaDemo/setup.sh index ec626c289b5..2596a6673e3 100644 --- a/examples/demo-apps/android/LlamaDemo/setup.sh +++ b/examples/demo-apps/android/LlamaDemo/setup.sh @@ -7,15 +7,11 @@ set -eu -BASEDIR=$(dirname "$0") -source "$BASEDIR"/../../../../build/build_android_library.sh - BUILD_AAR_DIR="$(mktemp -d)" export BUILD_AAR_DIR -build_jar -build_android_native_library "arm64-v8a" -build_android_native_library "x86_64" -build_aar +BASEDIR=$(dirname "$0") mkdir -p "$BASEDIR"/app/libs +bash "$BASEDIR"/../../../../build/build_android_library.sh + cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/app/libs/executorch.aar From b340396a07547f241967a203f26a474c67a2737b Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 14 Mar 2025 13:43:17 -0700 Subject: [PATCH 5/7] Fix CI --- extension/android_test/setup.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extension/android_test/setup.sh b/extension/android_test/setup.sh index e1306af4205..3ef64762ce4 100755 --- a/extension/android_test/setup.sh +++ b/extension/android_test/setup.sh @@ -63,3 +63,8 @@ cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/src/libs/executorch.aar python add_model.py mv "add.pte" "$BASEDIR"/src/androidTest/resources/add.pte unzip -o "$BUILD_AAR_DIR"/model.zip -d "$BASEDIR"/src/androidTest/resources + +if [ -n "$ARTIFACTS_DIR_NAME" ]; then + mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom/ + cp "$BUILD_AAR_DIR"/model.zip ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom/model.zip +fi From 84340b7f37bfcdf4dd3c29977900a838efeb3ae7 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 14 Mar 2025 15:07:43 -0700 Subject: [PATCH 6/7] Fix CI --- .github/workflows/_android.yml | 3 +++ extension/android_test/setup.sh | 7 +------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index b19a7bfdc97..40e1d4ea397 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -33,6 +33,9 @@ jobs: bash build/build_android_library.sh ${ARTIFACTS_DIR_NAME} bash build/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} + mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + bash ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dty pe fp16 -mode portable -upload ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + mkdir -p examples/demo-apps/android/LlamaDemo/app/libs cp aar-out/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs pushd examples/demo-apps/android/LlamaDemo diff --git a/extension/android_test/setup.sh b/extension/android_test/setup.sh index 3ef64762ce4..1d0b1b139ca 100755 --- a/extension/android_test/setup.sh +++ b/extension/android_test/setup.sh @@ -56,15 +56,10 @@ build_native_library "arm64-v8a" build_native_library "x86_64" build_aar bash examples/models/llama/install_requirements.sh -source ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dtype fp16 -mode portable -upload ${BUILD_AAR_DIR} +source ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dty pe fp16 -mode portable -upload ${BUILD_AAR_DIR} popd mkdir -p "$BASEDIR"/src/libs cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/src/libs/executorch.aar python add_model.py mv "add.pte" "$BASEDIR"/src/androidTest/resources/add.pte unzip -o "$BUILD_AAR_DIR"/model.zip -d "$BASEDIR"/src/androidTest/resources - -if [ -n "$ARTIFACTS_DIR_NAME" ]; then - mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom/ - cp "$BUILD_AAR_DIR"/model.zip ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom/model.zip -fi From da206dd749b10a6a9964eece0c722d6452a12e9b Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Fri, 14 Mar 2025 15:24:26 -0700 Subject: [PATCH 7/7] Fix --- .github/workflows/_android.yml | 2 +- extension/android_test/setup.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index 40e1d4ea397..418ddd7109e 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -34,7 +34,7 @@ jobs: bash build/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom - bash ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dty pe fp16 -mode portable -upload ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + bash ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dtype fp16 -mode portable -upload ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom mkdir -p examples/demo-apps/android/LlamaDemo/app/libs cp aar-out/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs diff --git a/extension/android_test/setup.sh b/extension/android_test/setup.sh index 1d0b1b139ca..e1306af4205 100755 --- a/extension/android_test/setup.sh +++ b/extension/android_test/setup.sh @@ -56,7 +56,7 @@ build_native_library "arm64-v8a" build_native_library "x86_64" build_aar bash examples/models/llama/install_requirements.sh -source ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dty pe fp16 -mode portable -upload ${BUILD_AAR_DIR} +source ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dtype fp16 -mode portable -upload ${BUILD_AAR_DIR} popd mkdir -p "$BASEDIR"/src/libs cp "$BUILD_AAR_DIR/executorch.aar" "$BASEDIR"/src/libs/executorch.aar