From 55ae4a0955b611d15a035898a02614d102c7af01 Mon Sep 17 00:00:00 2001 From: kokmit01 Date: Wed, 16 Oct 2024 22:31:09 +0100 Subject: [PATCH 01/15] Add Build an Android chat app with ONNX Runtime generate() API Learning Path --- .../1-dev-env-setup.md | 61 ++++++++++++ .../2-build-onnxruntime.md | 52 ++++++++++ .../3-build-onnxruntime-generate-api.md | 43 +++++++++ .../4-run-benchmark-on-android.md | 91 ++++++++++++++++++ .../5-build-android-chat-app.md | 53 ++++++++++ .../_index.md | 41 ++++++++ .../_next-steps.md | 27 ++++++ .../_review.md | 44 +++++++++ .../screenshot.png | Bin 0 -> 119505 bytes 9 files changed, 412 insertions(+) create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md create mode 100644 content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/screenshot.png diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md new file mode 100644 index 0000000000..8a8a1a5d0a --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md @@ -0,0 +1,61 @@ +--- +title: Create a development environment +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Set up your development environment + +In this Learning Path, you will learn how to build and deploy a simple LLM-based chat app to an Android device using ONNX Runtime. You will learn how to build the ONNX runtime and ONNX Runtime generate() API and how to run the Phi-3 model for the Android application. + +The first step is to prepare a development environment with the required software: + +- Android Studio (latest version recommended) +- Android NDK (tested with version 27.0.12077973) +- Python 3.11 +- CMake (tested with version 3.28.1) +- Ninja (tested with version 1.11.1) + +The instructions assume x86 Windows with at least 16GB of RAM. + +## Install Android Studio and Android NDK + +Follow these steps to install and configure Android Studio: + +1. Download and install the latest version of [Android Studio](https://developer.android.com/studio/). + +2. Navigate to `Tools -> SDK Manager`. + +3. In the `SDK Platforms` tab, check `Android 14.0 ("UpsideDownCake")`. + +4. In the `SDK Tools` tab, check `NDK (Side by side)`. + +## Install Python 3.11 + +Download and install Python: https://www.python.org/downloads/ + +## Install CMake + +CMake is an open-source tool that automates the build process for software projects, helping to generate platform-specific build configurations. + +Download and install CMake: https://cmake.org/download/ + +{{% notice Note %}} +We tested with version 3.28.1 +{{% /notice %}} + +## Install Ninja + +Ninja is a minimalistic build system designed to efficiently handle incremental builds, particularly in large-scale software projects, by focusing on speed and simplicity. + +The Ninja generator needs to be used to build on Windows for Android. + +Download and install Ninja: https://github.com/ninja-build/ninja/releases + +{{% notice Note %}} +We tested with version 1.11.1 +{{% /notice %}} + +You now have the required development tools installed. diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md new file mode 100644 index 0000000000..ab6a85a996 --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md @@ -0,0 +1,52 @@ +--- +title: Build ONNX Runtime +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Cross-compile ONNX Runtime for Android CPU + +Now that you have your environment set up correctly, you can build the ONNX Runtime inference engine. + +ONNX Runtime is an open-source inference engine designed to accelerate the deployment of machine learning models, particularly those in the Open Neural Network Exchange (ONNX) format. ONNX Runtime is optimized for high performance and low latency, making it popular for production deployment of AI models. You can learn more by reading the [ONNX Runtime Overview](https://onnxruntime.ai/). + + +### Clone onnxruntime repo + +Checkout the source tree: + +```bash +git clone --recursive https://github.com/Microsoft/onnxruntime.git +cd onnxruntime +``` + +{{% notice Note %}} +These steps have been tested with the commit `9b37b3ea4467b3aab9110e0d259d0cf27478697d`. +{{% /notice %}} + +### Build for Android CPU + +The Ninja generator needs to be used to build on Windows. + +```bash + +./build.bat --config Release --build_shared_lib --android --android_sdk_path --android_ndk_path --android_abi arm64-v8a --android_api --cmake_generator Ninja --build_java + + # Example for building with default SDK/NDK paths +./build.bat --config Release --build_shared_lib --android --android_sdk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk --android_ndk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973 --android_abi arm64-v8a --android_api 27 --cmake_generator Ninja --build_java + +``` + +Android Archive (AAR) files, which can be imported directly in Android Studio, will be generated by using the above building commands with `--build_java` + +When the build is complete, confirm the shared library and the AAR file have been created: + +``` +ls build\Windows\Release\onnxruntime.so +ls build\Windows\Release\java\build\android\outputs\aar\onnxruntime-release.aar +``` + + + diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md new file mode 100644 index 0000000000..b22425a130 --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md @@ -0,0 +1,43 @@ +--- +title: Build ONNX Runtime Generate() API +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Cross-compile the ONNX Runtime generate() API for Android CPU + +The Generate() API in ONNX Runtime is designed for text generation tasks using models like Phi-3. It implements the generative AI loop for ONNX models, including pre and post processing, inference with ONNX Runtime, logits processing, search and sampling, and KV cache management. You can learn more by reading the [ONNX Runtime generate() API page](https://onnxruntime.ai/docs/genai/). + + +### Clone onnxruntime-genai repo + +Checkout the source tree: + +```bash +git clone https://github.com/microsoft/onnxruntime-genai +cd onnxruntime-genai +``` + +{{% notice Note %}} +These steps have been tested with the commit `1e4d289502a61265c3b07efb17d8796225bb0b7f`. +{{% /notice %}} + +### Build for Android CPU + +The Ninja generator needs to be used to build on Windows for Android. + +```bash +python build.py --build_java --android --android_home --android_ndk_path --android_abi arm64-v8a --config Release + + # Example for building with default SDK/NDK paths +python3.11 build.py --build_java --android --android_home C:\Users\$env:USERNAME\AppData\Local\Android\Sdk --android_ndk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973 --android_abi arm64-v8a --config Release + +``` + +When the build is complete, confirm the shared library has been created: + +``` +ls build\Android\Release\onnxruntime-genai.so +``` diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md new file mode 100644 index 0000000000..5a4085ebe8 --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md @@ -0,0 +1,91 @@ +--- +title: Run Benchmark on Android phone +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Run example code for running Phi-3-mini + + +### Build model runner + +Cross-compile the model runner to run on Android using the commands below. + +``` bash +cd onnxruntime-genai +copy src\ort_genai.h examples\c\include\ +copy src\ort_genai_c.h examples\c\include\ +cd examples\c +mkdir build +cd build + +### Build for Android +cmake -DCMAKE_TOOLCHAIN_FILE=\build\cmake\android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android- -DCMAKE_BUILD_TYPE=Release -G "Ninja" .. +ninja + +# example for building on Windows +cmake -DCMAKE_TOOLCHAIN_FILE=C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973\build\cmake\android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-27 -DCMAKE_BUILD_TYPE=Release -G "Ninja" .. +ninja +``` + +After successful build, a binary program called `phi3` will be created. + +### Prepare phi-3-mini model + +Phi-3 ONNX models are hosted on HuggingFace. You can download the Phi-3-mini model with huggingface-cli command. + +``` bash +pip install huggingface-hub[cli] + +# This command downloads the model into a folder called cpu_and_mobile +huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir . +``` + +The phi-3-mini (3B) have a short (4k) context version and a long (128k) context version. The long context version can accept much longer prompts and produce longer output text, but it does consume more memory. This tutorial uses the short context version, which is quantized to 4-bits. + + +### Run on Android via adb shell + +#### Connect your android phone +Connect your phone to your computer using a USB cable. + +You need to enable USB debugging on your Android device. You can follow [Configure on-device developer options](https://developer.android.com/studio/debug/dev-options) to enable USB debugging. + +Once you have enabled USB debugging and connected via USB, run: + +``` +adb devices +``` + +You should see your device listed to confirm it is connected. + +#### Copy the runner binary and the model files to the phone + +``` bash +adb push cpu-int4-rtn-block-32-acc-level-4 /data/local/tmp +adb push .\phi3 /data/local/tmp +adb push onnxruntime-genai\build\Android\Release\libonnxruntime-genai.so /data/local/tmp +adb push onnxruntime\build\Windows\Release\libonnxruntime.so /data/local/tmp +``` + +#### Run the model + +Use the runner to execute the model on the phone with the `adb` command: + +``` bash +adb shell +cd /data/local/tmp +chmod 777 phi3 +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp +./phi3 cpu-int4-rtn-block-32-acc-level-4 +``` + +This will allow the runner program to load the model, and then it will prompt you to input the text prompt to be given to the model. After inputting, the text output by the model will be displayed sequentially, and upon completion, the following performance metrics should be displayed. + +``` +Prompt length: 64, New tokens: 931, Time to first: 1.79s, Prompt tokens per second: 35.74 tps, New tokens per second: 6.34 tps +``` + +You have successfully run a model on your Android smartphone. diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md new file mode 100644 index 0000000000..fbaec5a7a8 --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md @@ -0,0 +1,53 @@ +--- +title: Build and Run Android chat app +weight: 6 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Build Android chat app + +Another way to run the model is to use a GUI Android app. +You can use the Android demo application included in [onnxruntime-inference-examples repository](https://github.com/microsoft/onnxruntime-inference-examples) to demonstrate local inference. + +### Clone the repo + +``` bash +git clone https://github.com/microsoft/onnxruntime-inference-examples +cd onnxruntime-inference-examples +``` + +{{% notice Note %}} +These steps have been tested with the commit `009920df0136d7dfa53944d06af01002fb63e2f5`. +{{% /notice %}} + +### Build the app using Android Studio + +Open `mobile\examples\phi-3\android` directory with Android Studio. + +#### (Optional) In case you want to use ONNX Runtime AAR you built + +Copy ONNX Runtime AAR you built before if needed + +```bash +Copy onnxruntime\build\Windows\Release\java\build\android\outputs\aar\onnxruntime-release.aar mobile\examples\phi-3\android\app\libs +``` + +Update build.gradle.kts (:app) as below: + +``` kotlin +// ONNX Runtime with GenAI +//implementation("com.microsoft.onnxruntime:onnxruntime-android:latest.release") +implementation(files("libs/onnxruntime-release.aar")) +``` + +After that, click `File`->`Sync Project with Gradle` + +#### Build and run the app + +When you press Run, the build will be executed, and then the app will be transferred and installed on the Android device. This app will automatically download the Phi-3-mini model during the first run. After the download, you can input the prompt in the text box and execute it to run the model. + +You should now see a running app on your phone that looks like this: + +![App screenshot](screenshot.png) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md new file mode 100644 index 0000000000..394e79caae --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md @@ -0,0 +1,41 @@ +--- +title: Build an Android chat app with ONNX Runtime generate() API + +minutes_to_complete: 60 + +who_is_this_for: This is an intermediate topic for software developers interested in learning how to build an Android chat app with ONNX Runtime and ONNX Runtime Generate() API. + +learning_objectives: + - Install the prerequisites for cross-compiling ONNX Runtime for Android. + - Build ONNX Runtime and ONNX Runtime generate() API for Android. + - Run the Phi-3 model using ONNX Runtime on an Arm-based smartphone. + +prerequisites: + - A Windows development machine with at least 16GB of RAM. (You should also be able to use Linux or Apple machines, so please replace the paths and commands as appropriate. Please note that the operation has not been tested.) + - An Android phone with at least 8GB of RAM (tested on Samsung Galaxy S24). + +author_primary: Koki Mitsunami + +### Tags +skilllevels: Intermediate +subjects: ML +armips: + - Cortex-A + - Cortex-X +tools_software_languages: + - Kotlin + - C++ + - ONNX Runtime + - Android + - Mobile +operatingsystems: + - Windows + - Android + + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md new file mode 100644 index 0000000000..16b12cdf0b --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md @@ -0,0 +1,27 @@ +--- +next_step_guidance: Now that you are familiar with building LLM applications with ONNX Runtime, you are ready to incorporate LLMs into your Android applications. + +recommended_path: /learning-paths/cross-platform/kleidiai-explainer/ + +further_reading: + - resource: + title: ONNX Runtime + link: https://onnxruntime.ai/docs/ + type: documentation + - resource: + title: ONNX Runtime generate() API + link: https://onnxruntime.ai/docs/genai/ + type: documentation + - resource: + title: Accelerating AI Developer Innovation Everywhere with New Arm Kleidi + link: https://newsroom.arm.com/blog/arm-kleidi + type: blog + + +# ================================================================================ +# FIXED, DO NOT MODIFY +# ================================================================================ +weight: 21 # set to always be larger than the content in this path, and one more than 'review' +title: "Next Steps" # Always the same +layout: "learningpathall" # All files under learning paths have this same wrapper +--- diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md new file mode 100644 index 0000000000..5caceb45bf --- /dev/null +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md @@ -0,0 +1,44 @@ +--- +review: + - questions: + question: > + What is ONNX Runtime? + answers: + - A cross-platform inference engine for running machine learning models. + - A platform for training machine learning models from scratch. + - A cloud-based data storage service for deep learning models. + correct_answer: 1 + explanation: > + ONNX Runtime is a cross-platform inference engine designed to to run machine-learning models in the ONNX format. It optimizes model performance across various hardware environments, including CPUs, GPUs, and specialized accelerators. + + - questions: + question: > + What is Phi? + answers: + - A new optimization algorithm for neural networks. + - A family of pre-trained language model. + - A toolkit for converting machine learning models to ONNX format. + correct_answer: 2 + explanation: > + Phi models are a series of large language models developed to perform natural language processing tasks such as text generation, completion, and comprehension. + + - questions: + question: > + Why is ONNX format important in machine learning? + answers: + - It is a proprietary format developed exclusively for cloud-based AI systems. + - It compresses models to reduce memory usage during training. + - It allows models to be exchanged between different frameworks, such as PyTorch and TensorFlow. + correct_answer: 3 + explanation: > + The ONNX (Open Neural Network Exchange) format is an open-source standard designed to enable the sharing and use of machine learning models across different frameworks such as PyTorch, TensorFlow, and others. It allows models to be exported in a unified format, making them interoperable and ensuring they can run on various platforms or hardware. + + + +# ================================================================================ +# FIXED, DO NOT MODIFY +# ================================================================================ +title: "Review" # Always the same title +weight: 20 # Set to always be larger than the content in this path +layout: "learningpathall" # All files under learning paths have this same wrapper +--- diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/screenshot.png b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0724683b99e87f5f0b8a5169afbca4e4a3f00c GIT binary patch literal 119505 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 Date: Thu, 17 Oct 2024 09:59:17 -0400 Subject: [PATCH 02/15] Update _index.md --- .../_index.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md index 394e79caae..a23aa72fd8 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md @@ -1,23 +1,22 @@ --- -title: Build an Android chat app with ONNX Runtime generate() API +title: Build an Android chat application with ONNX Runtime API minutes_to_complete: 60 -who_is_this_for: This is an intermediate topic for software developers interested in learning how to build an Android chat app with ONNX Runtime and ONNX Runtime Generate() API. +who_is_this_for: This is an advanced topic for software developers interested in learning how to build an Android chat app with ONNX Runtime and ONNX Runtime Generate() API. learning_objectives: - - Install the prerequisites for cross-compiling ONNX Runtime for Android. - Build ONNX Runtime and ONNX Runtime generate() API for Android. - Run the Phi-3 model using ONNX Runtime on an Arm-based smartphone. prerequisites: - - A Windows development machine with at least 16GB of RAM. (You should also be able to use Linux or Apple machines, so please replace the paths and commands as appropriate. Please note that the operation has not been tested.) - - An Android phone with at least 8GB of RAM (tested on Samsung Galaxy S24). + - A Windows development machine with at least 16GB of RAM. You should also be able to use Linux or MacOS for the build, but the instructions for it have not been included in this learning path. + - An Android phone with at least 8GB of RAM. This learning path was tested on Samsung Galaxy S24. author_primary: Koki Mitsunami ### Tags -skilllevels: Intermediate +skilllevels: Advanced subjects: ML armips: - Cortex-A From 359ad5ed12f20fa31401b08c38ab70ba1996eacf Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 11:03:30 -0400 Subject: [PATCH 03/15] Update _index.md --- .../build-android-chat-app-using-onnxruntime/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md index a23aa72fd8..91ca06e9c9 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_index.md @@ -10,7 +10,7 @@ learning_objectives: - Run the Phi-3 model using ONNX Runtime on an Arm-based smartphone. prerequisites: - - A Windows development machine with at least 16GB of RAM. You should also be able to use Linux or MacOS for the build, but the instructions for it have not been included in this learning path. + - A Windows x86_64 development machine with at least 16GB of RAM. You should also be able to use Linux or MacOS for the build, but the instructions for it have not been included in this learning path. - An Android phone with at least 8GB of RAM. This learning path was tested on Samsung Galaxy S24. author_primary: Koki Mitsunami From 0264d529592c9d9f2ad48f311deadb22814bf8c7 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 11:09:28 -0400 Subject: [PATCH 04/15] Update 1-dev-env-setup.md --- .../1-dev-env-setup.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md index 8a8a1a5d0a..5a2996191c 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/1-dev-env-setup.md @@ -18,7 +18,7 @@ The first step is to prepare a development environment with the required softwar - CMake (tested with version 3.28.1) - Ninja (tested with version 1.11.1) -The instructions assume x86 Windows with at least 16GB of RAM. +The instructions were tested on an x86 Windows machine with at least 16GB of RAM. ## Install Android Studio and Android NDK @@ -32,18 +32,20 @@ Follow these steps to install and configure Android Studio: 4. In the `SDK Tools` tab, check `NDK (Side by side)`. +5. Click Ok and Apply. + ## Install Python 3.11 -Download and install Python: https://www.python.org/downloads/ +Download and install [Python version 3.11](https://www.python.org/downloads/release/python-3110/) ## Install CMake CMake is an open-source tool that automates the build process for software projects, helping to generate platform-specific build configurations. -Download and install CMake: https://cmake.org/download/ +[Download and install CMake](https://cmake.org/download/) {{% notice Note %}} -We tested with version 3.28.1 +The instructions were tested with version 3.28.1 {{% /notice %}} ## Install Ninja @@ -52,10 +54,10 @@ Ninja is a minimalistic build system designed to efficiently handle incremental The Ninja generator needs to be used to build on Windows for Android. -Download and install Ninja: https://github.com/ninja-build/ninja/releases +[Download and install Ninja]( https://github.com/ninja-build/ninja/releases) {{% notice Note %}} -We tested with version 1.11.1 +The instructions were tested with version 1.11.1 {{% /notice %}} -You now have the required development tools installed. +You now have the required development tools installed to follow this learning path. From 2ef718b77de244f2e4e7c34e4f2223d3e42f05c2 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 11:14:40 -0400 Subject: [PATCH 05/15] Update 3-build-onnxruntime-generate-api.md --- .../3-build-onnxruntime-generate-api.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md index b22425a130..144c0836e1 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md @@ -12,16 +12,17 @@ The Generate() API in ONNX Runtime is designed for text generation tasks using m ### Clone onnxruntime-genai repo - -Checkout the source tree: +Open up a Windows Powershell prompt and checkout the source repo: ```bash +C:\Users\$env:USERNAME git clone https://github.com/microsoft/onnxruntime-genai cd onnxruntime-genai +git checkout 1e4d289502a61265c3b07efb17d8796225bb0b7f ``` {{% notice Note %}} -These steps have been tested with the commit `1e4d289502a61265c3b07efb17d8796225bb0b7f`. +You might be able to use later commits. These steps have been tested with the commit `1e4d289502a61265c3b07efb17d8796225bb0b7f`. {{% /notice %}} ### Build for Android CPU @@ -29,9 +30,8 @@ These steps have been tested with the commit `1e4d289502a61265c3b07efb17d8796225 The Ninja generator needs to be used to build on Windows for Android. ```bash -python build.py --build_java --android --android_home --android_ndk_path --android_abi arm64-v8a --config Release - # Example for building with default SDK/NDK paths + # Example python3.11 build.py --build_java --android --android_home C:\Users\$env:USERNAME\AppData\Local\Android\Sdk --android_ndk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973 --android_abi arm64-v8a --config Release ``` From 60359af213ce8ca1118d4c8ac7cf74314b7b3f64 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 11:17:59 -0400 Subject: [PATCH 06/15] Update 2-build-onnxruntime.md --- .../2-build-onnxruntime.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md index ab6a85a996..680b86b6e4 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md @@ -15,31 +15,30 @@ ONNX Runtime is an open-source inference engine designed to accelerate the deplo ### Clone onnxruntime repo -Checkout the source tree: +Open up a Windows Powershell and checkout the source tree: ```bash +cd C:\Users\$env:USERNAME git clone --recursive https://github.com/Microsoft/onnxruntime.git cd onnxruntime +git checkout 9b37b3ea4467b3aab9110e0d259d0cf27478697d ``` {{% notice Note %}} -These steps have been tested with the commit `9b37b3ea4467b3aab9110e0d259d0cf27478697d`. +You might be able to use a later commit. These steps have been tested with the commit `9b37b3ea4467b3aab9110e0d259d0cf27478697d`. {{% /notice %}} ### Build for Android CPU -The Ninja generator needs to be used to build on Windows. +The Ninja generator needs to be used to build on Windows. Run the following command: ```bash -./build.bat --config Release --build_shared_lib --android --android_sdk_path --android_ndk_path --android_abi arm64-v8a --android_api --cmake_generator Ninja --build_java - - # Example for building with default SDK/NDK paths ./build.bat --config Release --build_shared_lib --android --android_sdk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk --android_ndk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973 --android_abi arm64-v8a --android_api 27 --cmake_generator Ninja --build_java ``` -Android Archive (AAR) files, which can be imported directly in Android Studio, will be generated by using the above building commands with `--build_java` +Android Archive (AAR) files, which can be imported directly in Android Studio, will be generated by using the above command with `--build_java` When the build is complete, confirm the shared library and the AAR file have been created: From 05d48c7ece97f7611bd85002f77f19e3c772d185 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 11:44:24 -0400 Subject: [PATCH 07/15] Update 3-build-onnxruntime-generate-api.md --- .../3-build-onnxruntime-generate-api.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md index 144c0836e1..152b1f07ba 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md @@ -12,7 +12,7 @@ The Generate() API in ONNX Runtime is designed for text generation tasks using m ### Clone onnxruntime-genai repo -Open up a Windows Powershell prompt and checkout the source repo: +Within your Windows Powershell prompt, checkout the source repo: ```bash C:\Users\$env:USERNAME @@ -27,17 +27,15 @@ You might be able to use later commits. These steps have been tested with the co ### Build for Android CPU -The Ninja generator needs to be used to build on Windows for Android. +The Ninja generator needs to be used to build on Windows for Android. Run the following command: ```bash - - # Example +python -m pip install requests python3.11 build.py --build_java --android --android_home C:\Users\$env:USERNAME\AppData\Local\Android\Sdk --android_ndk_path C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973 --android_abi arm64-v8a --config Release - ``` When the build is complete, confirm the shared library has been created: -``` +```output ls build\Android\Release\onnxruntime-genai.so ``` From e93454e55d73123bd5b8f6dff050884646595602 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:17:45 -0400 Subject: [PATCH 08/15] Update 2-build-onnxruntime.md --- .../2-build-onnxruntime.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md index 680b86b6e4..c71f05d6e0 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/2-build-onnxruntime.md @@ -30,7 +30,13 @@ You might be able to use a later commit. These steps have been tested with the c ### Build for Android CPU -The Ninja generator needs to be used to build on Windows. Run the following command: +The Ninja generator needs to be used to build on Windows. First, set JAVA_HOME to the path to your JDK install. You can point to the JDK from Android Studio, or a standalone JDK install. + +```bash +$env:JAVA_HOME="C:\Program Files\Android\Android Studio\jbr" +``` + +Now run the following command: ```bash From 579e4902f3c7b3296ae96d79ffe3f2765d14c7e6 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:25:53 -0400 Subject: [PATCH 09/15] Update 3-build-onnxruntime-generate-api.md --- .../3-build-onnxruntime-generate-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md index 152b1f07ba..75a870e81e 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/3-build-onnxruntime-generate-api.md @@ -27,7 +27,7 @@ You might be able to use later commits. These steps have been tested with the co ### Build for Android CPU -The Ninja generator needs to be used to build on Windows for Android. Run the following command: +The Ninja generator needs to be used to build on Windows for Android. Make sure JAVA_HOME is set before running the following command: ```bash python -m pip install requests From 775aab882c7b41852f706fd89c1d3f0bc7c31fa5 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:52:22 -0400 Subject: [PATCH 10/15] Update 4-run-benchmark-on-android.md --- .../4-run-benchmark-on-android.md | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md index 5a4085ebe8..595f8859a4 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md @@ -11,7 +11,7 @@ layout: learningpathall ### Build model runner -Cross-compile the model runner to run on Android using the commands below. +You will now cross-compile the model runner to run on Android using the commands below: ``` bash cd onnxruntime-genai @@ -20,12 +20,10 @@ copy src\ort_genai_c.h examples\c\include\ cd examples\c mkdir build cd build +`` +Run the cmake command as shown: -### Build for Android -cmake -DCMAKE_TOOLCHAIN_FILE=\build\cmake\android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android- -DCMAKE_BUILD_TYPE=Release -G "Ninja" .. -ninja - -# example for building on Windows +```bash cmake -DCMAKE_TOOLCHAIN_FILE=C:\Users\$env:USERNAME\AppData\Local\Android\Sdk\ndk\27.0.12077973\build\cmake\android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-27 -DCMAKE_BUILD_TYPE=Release -G "Ninja" .. ninja ``` @@ -34,16 +32,15 @@ After successful build, a binary program called `phi3` will be created. ### Prepare phi-3-mini model -Phi-3 ONNX models are hosted on HuggingFace. You can download the Phi-3-mini model with huggingface-cli command. +Phi-3 ONNX models are hosted on HuggingFace. You can download the Phi-3-mini model with huggingface-cli command: ``` bash pip install huggingface-hub[cli] - -# This command downloads the model into a folder called cpu_and_mobile huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir . ``` +This command downloads the model into a folder called cpu_and_mobile. -The phi-3-mini (3B) have a short (4k) context version and a long (128k) context version. The long context version can accept much longer prompts and produce longer output text, but it does consume more memory. This tutorial uses the short context version, which is quantized to 4-bits. +The phi-3-mini (3B) model has a short (4k) context version and a long (128k) context version. The long context version can accept much longer prompts and produce longer output text, but it does consume more memory. In this learning path, you will use the short context version, which is quantized to 4-bits. ### Run on Android via adb shell @@ -82,10 +79,10 @@ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp ./phi3 cpu-int4-rtn-block-32-acc-level-4 ``` -This will allow the runner program to load the model, and then it will prompt you to input the text prompt to be given to the model. After inputting, the text output by the model will be displayed sequentially, and upon completion, the following performance metrics should be displayed. +This will allow the runner program to load the model, and then it will prompt you to input the text prompt to the model. After you enter yout input prompt, the text output by the model will be displayed. On completion, the performance metrics similar to what is shown below should be displayed: ``` Prompt length: 64, New tokens: 931, Time to first: 1.79s, Prompt tokens per second: 35.74 tps, New tokens per second: 6.34 tps ``` -You have successfully run a model on your Android smartphone. +You have successfully run the Phi-3 model on your Android smartphone powered by Arm. From 28b931757f754b7e5217cd720e7f46e8d01c7b6e Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:55:15 -0400 Subject: [PATCH 11/15] Update 5-build-android-chat-app.md --- .../5-build-android-chat-app.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md index fbaec5a7a8..189f1882e7 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/5-build-android-chat-app.md @@ -8,33 +8,34 @@ layout: learningpathall ## Build Android chat app -Another way to run the model is to use a GUI Android app. -You can use the Android demo application included in [onnxruntime-inference-examples repository](https://github.com/microsoft/onnxruntime-inference-examples) to demonstrate local inference. +Another way to run the model is to use an Android GUI app. +You can use the Android demo application included in the [onnxruntime-inference-examples repository](https://github.com/microsoft/onnxruntime-inference-examples) to demonstrate local inference. ### Clone the repo ``` bash git clone https://github.com/microsoft/onnxruntime-inference-examples cd onnxruntime-inference-examples +git checkout 009920df0136d7dfa53944d06af01002fb63e2f5 ``` {{% notice Note %}} -These steps have been tested with the commit `009920df0136d7dfa53944d06af01002fb63e2f5`. +You could probably use a later commit but these steps have been tested with the commit `009920df0136d7dfa53944d06af01002fb63e2f5`. {{% /notice %}} ### Build the app using Android Studio -Open `mobile\examples\phi-3\android` directory with Android Studio. +Open the `mobile\examples\phi-3\android` directory with Android Studio. #### (Optional) In case you want to use ONNX Runtime AAR you built -Copy ONNX Runtime AAR you built before if needed +Copy ONNX Runtime AAR you built before if needed: ```bash Copy onnxruntime\build\Windows\Release\java\build\android\outputs\aar\onnxruntime-release.aar mobile\examples\phi-3\android\app\libs ``` -Update build.gradle.kts (:app) as below: +Update `build.gradle.kts (:app)` as below: ``` kotlin // ONNX Runtime with GenAI @@ -46,7 +47,7 @@ After that, click `File`->`Sync Project with Gradle` #### Build and run the app -When you press Run, the build will be executed, and then the app will be transferred and installed on the Android device. This app will automatically download the Phi-3-mini model during the first run. After the download, you can input the prompt in the text box and execute it to run the model. +When you press Run, the build will be executed, and then the app will be copied and installed on the Android device. This app will automatically download the Phi-3-mini model during the first run. After the download, you can input the prompt in the text box and execute it to run the model. You should now see a running app on your phone that looks like this: From 9df01577ebe03b55f19854be1652cdbce899b9be Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:56:16 -0400 Subject: [PATCH 12/15] Update _review.md --- .../build-android-chat-app-using-onnxruntime/_review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md index 5caceb45bf..cb625f676a 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_review.md @@ -16,7 +16,7 @@ review: What is Phi? answers: - A new optimization algorithm for neural networks. - - A family of pre-trained language model. + - A family of pre-trained language models. - A toolkit for converting machine learning models to ONNX format. correct_answer: 2 explanation: > From a7b00fe7320886adfb289a12e636615d844e9d40 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:57:14 -0400 Subject: [PATCH 13/15] Update _next-steps.md --- .../build-android-chat-app-using-onnxruntime/_next-steps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md index 16b12cdf0b..43c72da9b1 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md @@ -1,5 +1,5 @@ --- -next_step_guidance: Now that you are familiar with building LLM applications with ONNX Runtime, you are ready to incorporate LLMs into your Android applications. +next_step_guidance: Now that you are familiar with building LLM applications with ONNX Runtime, you are ready to incorporate LLMs into your Android applications. You can learn how to further accelerate the performance of your LLMs using KleidiAI: recommended_path: /learning-paths/cross-platform/kleidiai-explainer/ From 204d820aadee1a0f219ecb7d41f838fcc9b18f42 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 13:59:19 -0400 Subject: [PATCH 14/15] Update _next-steps.md --- .../build-android-chat-app-using-onnxruntime/_next-steps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md index 43c72da9b1..3be9b43e25 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/_next-steps.md @@ -1,5 +1,5 @@ --- -next_step_guidance: Now that you are familiar with building LLM applications with ONNX Runtime, you are ready to incorporate LLMs into your Android applications. You can learn how to further accelerate the performance of your LLMs using KleidiAI: +next_step_guidance: Now that you are familiar with building LLM applications with ONNX Runtime, you are ready to incorporate LLMs into your Android applications. You can learn how to further accelerate the performance of your LLMs using KleidiAI. recommended_path: /learning-paths/cross-platform/kleidiai-explainer/ From 595187fb8194640ed013a0c06ebb84f22bbb9243 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 24 Oct 2024 14:03:02 -0400 Subject: [PATCH 15/15] Update 4-run-benchmark-on-android.md --- .../4-run-benchmark-on-android.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md index 595f8859a4..160f0ba5fd 100644 --- a/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md +++ b/content/learning-paths/smartphones-and-mobile/build-android-chat-app-using-onnxruntime/4-run-benchmark-on-android.md @@ -20,7 +20,7 @@ copy src\ort_genai_c.h examples\c\include\ cd examples\c mkdir build cd build -`` +``` Run the cmake command as shown: ```bash