Skip to content

Commit 7948376

Browse files
Merge branch 'main' into oss_model_execution
2 parents 8f877a7 + 126abb5 commit 7948376

File tree

744 files changed

+21329
-5022
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

744 files changed

+21329
-5022
lines changed

.ci/docker/ci_commit_pins/pytorch.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
c42ac54d9e817bf0a0366eb78e6c8beba4d5eff5
1+
00e3eea170ce5db8ea9c62ce5e48f13886cd6d20

.ci/docker/ci_commit_pins/torchao.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0916b5b29b092afcbf2b898caae49abe80662bac

.ci/scripts/build-qnn-sdk.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
# LICENSE file in the root directory of this source tree.
77

88
set -eux
9+
set -o xtrace
910

1011
build_qnn_backend() {
1112
echo "Start building qnn backend."
1213
export ANDROID_NDK_ROOT=/opt/ndk
13-
export QNN_SDK_ROOT=/tmp/qnn/2.23.0.240531
14+
export QNN_SDK_ROOT=/tmp/qnn/2.25.0.240728
1415
export EXECUTORCH_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd)"
1516

1617
bash backends/qualcomm/scripts/build.sh --skip_aarch64 --job_number 2 --release
@@ -28,6 +29,7 @@ set_up_aot() {
2829
-DQNN_SDK_ROOT=${QNN_SDK_ROOT} \
2930
-DEXECUTORCH_BUILD_SDK=ON \
3031
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
32+
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
3133
-DEXECUTORCH_ENABLE_EVENT_TRACER=ON \
3234
-DPYTHON_EXECUTABLE=python3 \
3335
-DEXECUTORCH_SEPARATE_FLATCC_HOST_PROJECT=OFF

.ci/scripts/build_llama_android.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ install_executorch_and_backend_lib() {
2222
-DANDROID_PLATFORM=android-23 \
2323
-DCMAKE_INSTALL_PREFIX=cmake-android-out \
2424
-DCMAKE_BUILD_TYPE=Release \
25-
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
2625
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
26+
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
27+
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
2728
-DEXECUTORCH_BUILD_XNNPACK=ON \
2829
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
2930
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \

.ci/scripts/setup-qnn-deps.sh

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@
77

88
set -ex
99

10+
verify_pkg_installed() {
11+
echo $(dpkg-query -W --showformat='${Status}\n' $1|grep "install ok installed")
12+
}
13+
1014
install_qnn() {
1115
echo "Start installing qnn."
1216
QNN_INSTALLATION_DIR=/tmp/qnn
1317
mkdir -p "${QNN_INSTALLATION_DIR}"
1418

15-
curl -Lo /tmp/v2.23.0.24.06.24.zip "https://softwarecenter.qualcomm.com/api/download/software/qualcomm_neural_processing_sdk/v2.23.0.24.06.24.zip"
19+
curl -Lo /tmp/v2.25.0.24.07.28.zip "https://softwarecenter.qualcomm.com/api/download/software/qualcomm_neural_processing_sdk/v2.25.0.240728.zip"
1620
echo "Finishing downloading qnn sdk."
17-
unzip -qo /tmp/v2.23.0.24.06.24.zip -d /tmp
21+
unzip -qo /tmp/v2.25.0.24.07.28.zip -d /tmp
1822
echo "Finishing unzip qnn sdk."
1923

2024

@@ -26,4 +30,22 @@ install_qnn() {
2630
ls -lah "${QNN_INSTALLATION_DIR}"
2731
}
2832

33+
setup_libc++() {
34+
sudo apt-get update
35+
pkgs_to_check=('libc++-dev')
36+
j=0
37+
while [ $j -lt ${#pkgs_to_check[*]} ]; do
38+
install_status=$(verify_pkg_installed ${pkgs_to_check[$j]})
39+
if [ "$install_status" == "" ]; then
40+
sudo apt-get install -y ${pkgs_to_check[$j]}
41+
if [[ $? -ne 0 ]]; then
42+
echo "ERROR: Failed to install required packages for libc++"
43+
exit 1
44+
fi
45+
fi
46+
j=$(( $j +1));
47+
done
48+
}
49+
50+
setup_libc++
2951
install_qnn

.ci/scripts/test_llama.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ echo "COREML option ${COREML}"
7575
if [[ "${MODE}" =~ .*qnn.* ]]; then
7676
QNN=ON
7777
export EXECUTORCH_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
78-
export QNN_SDK_ROOT=/tmp/qnn/2.23.0.240531
78+
export QNN_SDK_ROOT=/tmp/qnn/2.25.0.240728
7979
export LD_LIBRARY_PATH="${QNN_SDK_ROOT}/lib/x86_64-linux-clang"
8080
export PYTHONPATH=".."
8181
cp schema/program.fbs exir/_serialize/program.fbs
@@ -107,8 +107,9 @@ cmake_install_executorch_libraries() {
107107
retry cmake \
108108
-DCMAKE_INSTALL_PREFIX=cmake-out \
109109
-DCMAKE_BUILD_TYPE=Debug \
110-
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
111110
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
111+
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
112+
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
112113
-DEXECUTORCH_BUILD_KERNELS_CUSTOM="$CUSTOM" \
113114
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
114115
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \

.ci/scripts/test_llava.sh

Lines changed: 110 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,47 +9,97 @@ set -exu
99
# shellcheck source=/dev/null
1010

1111
BUILD_TYPE=${1:-Debug}
12+
TARGET_OS=${2:-Native}
13+
BUILD_DIR=${3:-cmake-out}
1214

13-
echo "Building with BUILD_TYPE: $BUILD_TYPE"
15+
echo "Building with BUILD_TYPE: $BUILD_TYPE, TARGET_OS: $TARGET_OS, BUILD_DIR: $BUILD_DIR"
1416

1517
if [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then
16-
PYTHON_EXECUTABLE=python3
18+
PYTHON_EXECUTABLE=python3
1719
fi
1820

21+
TARGET_OS_lower="$(echo "${TARGET_OS}" | awk '{print tolower($0)}')"
22+
if [[ "${TARGET_OS_lower}" == "android" ]]; then
23+
if [[ -z "${ANDROID_NDK}" ]]; then
24+
echo "Set ANDROID_NDK environment variable to build for Android."
25+
exit 1
26+
fi
27+
fi
28+
29+
# Number of processes for a parallel build
30+
NPROC=8
31+
if hash nproc &> /dev/null; then NPROC=$(nproc); fi
32+
33+
EXECUTORCH_COMMON_CMAKE_ARGS=" \
34+
-DCMAKE_INSTALL_PREFIX=${BUILD_DIR} \
35+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
36+
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
37+
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
38+
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
39+
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
40+
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
41+
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
42+
-DEXECUTORCH_BUILD_XNNPACK=ON \
43+
-DEXECUTORCH_DO_NOT_USE_CXX11_ABI=ON \
44+
-DEXECUTORCH_XNNPACK_SHARED_WORKSPACE=ON"
45+
1946
cmake_install_executorch_libraries() {
20-
cmake \
21-
-DCMAKE_INSTALL_PREFIX=cmake-out \
22-
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
23-
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
24-
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
25-
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
26-
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
27-
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
28-
-DEXECUTORCH_BUILD_XNNPACK=ON \
29-
-DEXECUTORCH_DO_NOT_USE_CXX11_ABI=ON \
30-
-DEXECUTORCH_XNNPACK_SHARED_WORKSPACE=ON \
31-
-Bcmake-out .
32-
33-
34-
cmake --build cmake-out -j9 --target install --config ${BUILD_TYPE}
47+
cmake \
48+
${EXECUTORCH_COMMON_CMAKE_ARGS} \
49+
-B${BUILD_DIR} .
50+
51+
cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${BUILD_TYPE}
52+
}
53+
54+
cmake_install_executorch_libraries_for_android() {
55+
cmake \
56+
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
57+
-DANDROID_ABI=arm64-v8a \
58+
-DANDROID_PLATFORM=android-23 \
59+
${EXECUTORCH_COMMON_CMAKE_ARGS} \
60+
-B${BUILD_DIR} .
61+
62+
cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${BUILD_TYPE}
3563
}
3664

65+
66+
LLAVA_COMMON_CMAKE_ARGS=" \
67+
-DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \
68+
-DCMAKE_INSTALL_PREFIX=${BUILD_DIR} \
69+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
70+
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
71+
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
72+
-DEXECUTORCH_BUILD_XNNPACK=ON"
73+
3774
cmake_build_llava_runner() {
3875
dir=examples/models/llava
3976
python_lib=$($PYTHON_EXECUTABLE -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')
4077

41-
cmake \
42-
-DCMAKE_INSTALL_PREFIX=cmake-out \
43-
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
44-
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
45-
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
46-
-DEXECUTORCH_BUILD_XNNPACK=ON \
47-
-DCMAKE_PREFIX_PATH="$python_lib" \
48-
-Bcmake-out/${dir} \
78+
cmake \
79+
${LLAVA_COMMON_CMAKE_ARGS} \
80+
-DCMAKE_PREFIX_PATH="$python_lib" \
81+
-B${BUILD_DIR}/${dir} \
4982
${dir}
5083

84+
cmake --build ${BUILD_DIR}/${dir} -j${NPROC} --config ${BUILD_TYPE}
85+
}
86+
5187

52-
cmake --build cmake-out/${dir} -j9 --config ${BUILD_TYPE}
88+
cmake_build_llava_runner_for_android() {
89+
dir=examples/models/llava
90+
python_lib=$($PYTHON_EXECUTABLE -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')
91+
92+
cmake \
93+
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
94+
-DANDROID_ABI=arm64-v8a \
95+
-DANDROID_PLATFORM=android-23 \
96+
${LLAVA_COMMON_CMAKE_ARGS} \
97+
-DCMAKE_PREFIX_PATH="$python_lib" \
98+
-DLLAVA_RUNNER_NO_TORCH_DUMMY_IMAGE=ON \
99+
-B${BUILD_DIR}/${dir} \
100+
${dir}
101+
102+
cmake --build ${BUILD_DIR}/${dir} -j${NPROC} --config ${BUILD_TYPE}
53103
}
54104

55105
# only export the one without custom op for now since it's
@@ -61,7 +111,7 @@ export_llava() {
61111
# Download a new image with different size, to test if the model can handle different image sizes
62112
prepare_image_tensor() {
63113
echo "Downloading image"
64-
curl -o basketball.jpg https://upload.wikimedia.org/wikipedia/commons/7/73/Chicago_Bulls_and_New_Jersey_Nets%2C_March_28%2C_1991.jpg
114+
curl -o basketball.jpg https://upload.wikimedia.org/wikipedia/commons/7/73/Chicago_Bulls_and_New_Jersey_Nets%2C_March_28%2C_1991.jpg
65115
$PYTHON_EXECUTABLE -m executorch.examples.models.llava.image_util --image-path basketball.jpg --output-path image.pt
66116
}
67117

@@ -80,18 +130,29 @@ run_and_verify() {
80130
echo "tokenizer.bin is missing."
81131
exit 1
82132
fi
83-
RUNTIME_ARGS="--model_path=llava.pte \
84-
--tokenizer_path=tokenizer.bin \
85-
--image_path=image.pt \
86-
--prompt=ASSISTANT: \
87-
--temperature=0 \
88-
--seq_len=650"
89-
cmake-out/examples/models/llava/llava_main ${RUNTIME_ARGS} > result.txt
133+
134+
135+
136+
RUNTIME_ARGS="--model_path=llava.pte \
137+
--tokenizer_path=tokenizer.bin \
138+
--image_path=image.pt \
139+
--prompt=ASSISTANT: \
140+
--temperature=0 \
141+
--seq_len=650"
142+
143+
if [[ "${TARGET_OS_lower}" == "android" ]]; then
144+
echo "Transfer relevant files to the phone via ADB and run llava_main with following args,"
145+
echo "$ llava_main ${RUNTIME_ARGS} "
146+
exit 0;
147+
fi
148+
149+
${BUILD_DIR}/examples/models/llava/llava_main ${RUNTIME_ARGS} > result.txt
150+
90151
# verify result.txt
91152
RESULT=$(cat result.txt)
92153
# set the expected prefix to be the same as prompt because there's a bug in sdpa_with_kv_cache that causes <unk> tokens.
93154
if [[ "$(uname)" == "Darwin" ]]; then
94-
EXPECTED_PREFIX="ASSISTANT: image captures a basketball game in progress on a basketball court. There are several players on the court, with one player in the foreground holding a basketball, and"
155+
EXPECTED_PREFIX="ASSISTANT: image captures a basketball game in progress, with several players on the court. One of the players is dribbling the ball, while the others are in various"
95156
else
96157
# set the expected prefix to be the same as prompt because there's a bug in sdpa_with_kv_cache that causes <unk> tokens.
97158
EXPECTED_PREFIX="ASSISTANT:"
@@ -109,8 +170,20 @@ run_and_verify() {
109170
fi
110171
}
111172

112-
cmake_install_executorch_libraries
113-
cmake_build_llava_runner
173+
# Step1. Build stuff
174+
if [[ "${TARGET_OS_lower}" == "android" ]]; then
175+
cmake_install_executorch_libraries_for_android
176+
cmake_build_llava_runner_for_android
177+
elif [[ "${TARGET_OS_lower}" == "native" ]]; then
178+
cmake_install_executorch_libraries
179+
cmake_build_llava_runner
180+
else
181+
echo "Invalid TARGET_OS ($2): ${TARGET_OS}"
182+
fi
183+
184+
# Step2. Generate the PTE
114185
export_llava
186+
187+
# Step3. Run
115188
prepare_image_tensor
116189
run_and_verify

.ci/scripts/test.sh renamed to .ci/scripts/test_model.sh

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,40 @@ test_model_with_qnn() {
156156
export PYTHONPATH=$EXECUTORCH_ROOT/..
157157

158158
if [[ "${MODEL_NAME}" == "dl3" ]]; then
159-
"${PYTHON_EXECUTABLE}" -m examples.qualcomm.scripts.deeplab_v3 -b ${CMAKE_OUTPUT_DIR} -m SM8550 --compile_only --download
160-
EXPORTED_MODEL=./deeplab_v3/dlv3_qnn.pte
159+
EXPORT_SCRIPT=deeplab_v3
160+
EXPORTED_MODEL_NAME=dlv3_qnn.pte
161+
elif [[ "${MODEL_NAME}" == "mv3" ]]; then
162+
EXPORT_SCRIPT=mobilenet_v3
163+
EXPORTED_MODEL_NAME=mv3_qnn.pte
164+
elif [[ "${MODEL_NAME}" == "mv2" ]]; then
165+
EXPORT_SCRIPT=mobilenet_v2
166+
EXPORTED_MODEL_NAME=mv2_qnn.pte
167+
elif [[ "${MODEL_NAME}" == "ic4" ]]; then
168+
EXPORT_SCRIPT=inception_v4
169+
EXPORTED_MODEL_NAME=ic4_qnn.pte
170+
elif [[ "${MODEL_NAME}" == "ic3" ]]; then
171+
EXPORT_SCRIPT=inception_v3
172+
EXPORTED_MODEL_NAME=ic3_qnn.pte
173+
elif [[ "${MODEL_NAME}" == "vit" ]]; then
174+
EXPORT_SCRIPT=torchvision_vit
175+
EXPORTED_MODEL_NAME=vit_qnn.pte
161176
fi
177+
178+
# Use SM8450 for S22, SM8550 for S23, and SM8560 for S24
179+
QNN_CHIPSET=SM8450
180+
181+
"${PYTHON_EXECUTABLE}" -m examples.qualcomm.scripts.${EXPORT_SCRIPT} -b ${CMAKE_OUTPUT_DIR} -m ${QNN_CHIPSET} --compile_only
182+
EXPORTED_MODEL=./${EXPORT_SCRIPT}/${EXPORTED_MODEL_NAME}
183+
}
184+
185+
test_model_with_coreml() {
186+
if [[ "${BUILD_TOOL}" == "buck2" ]]; then
187+
echo "coreml doesn't support buck2."
188+
exit 1
189+
fi
190+
191+
"${PYTHON_EXECUTABLE}" -m examples.apple.coreml.scripts.export --model_name="${MODEL_NAME}"
192+
EXPORTED_MODEL=$(find "." -type f -name "${MODEL_NAME}*.pte" -print -quit)
162193
}
163194

164195
if [[ "${BACKEND}" == "portable" ]]; then
@@ -170,6 +201,12 @@ elif [[ "${BACKEND}" == "qnn" ]]; then
170201
if [[ $? -eq 0 ]]; then
171202
prepare_artifacts_upload
172203
fi
204+
elif [[ "${BACKEND}" == "coreml" ]]; then
205+
echo "Testing ${MODEL_NAME} with coreml..."
206+
test_model_with_coreml
207+
if [[ $? -eq 0 ]]; then
208+
prepare_artifacts_upload
209+
fi
173210
elif [[ "${BACKEND}" == "xnnpack" ]]; then
174211
echo "Testing ${MODEL_NAME} with xnnpack..."
175212
test_model_with_xnnpack true true

.github/pytorch-probot.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# The schema is from https://github.com/pytorch/pytorch/blob/main/.github/pytorch-probot.yml
22
ciflow_push_tags:
3+
- ciflow/android
4+
- ciflow/apple
35
- ciflow/nightly
46
- ciflow/trunk
57
- ciflow/binaries

0 commit comments

Comments
 (0)