Skip to content

Commit 605f374

Browse files
authored
Merge branch 'main' into main
2 parents 5851fca + 5e44991 commit 605f374

File tree

1,687 files changed

+31844
-21428
lines changed

Some content is hidden

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

1,687 files changed

+31844
-21428
lines changed

.ci/docker/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ case "${IMAGE_NAME}" in
4141
LINTRUNNER=""
4242
CLANG_VERSION=12
4343
# From https://developer.android.com/ndk/downloads
44-
ANDROID_NDK_VERSION=r26c
44+
ANDROID_NDK_VERSION=r27b
4545
;;
4646
*)
4747
echo "Invalid image name ${IMAGE_NAME}"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
aec9b2ab77389967ef39bb9c10662fd0fe3e185a
1+
d1b87e26e5c4343f5b56bb1e6f89b479b389bfac

.ci/docker/requirements-ci.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mpmath==1.3.0
2-
numpy==1.21.3; python_version == '3.10'
2+
numpy==1.22.0; python_version == '3.10'
33
numpy==1.23.2; python_version == '3.11'
44
numpy; python_version >= '3.12'
55
PyYAML==6.0.1

.ci/scripts/build_llama_android.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ build_llama_runner() {
4848
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
4949
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
5050
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
51-
-Bcmake-android-out/examples/models/llama2 examples/models/llama2
51+
-Bcmake-android-out/examples/models/llama examples/models/llama
5252

53-
cmake --build cmake-android-out/examples/models/llama2 -j4 --config Release
53+
cmake --build cmake-android-out/examples/models/llama -j4 --config Release
5454
}
5555
install_flatc_from_source
5656
install_executorch_and_backend_lib

.ci/scripts/test_llama.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ cmake_install_executorch_libraries() {
125125

126126
cmake_build_llama_runner() {
127127
echo "Building llama runner"
128-
dir="examples/models/llama2"
128+
dir="examples/models/llama"
129129
retry cmake \
130130
-DCMAKE_INSTALL_PREFIX=cmake-out \
131131
-DCMAKE_BUILD_TYPE=Debug \
@@ -171,7 +171,7 @@ else
171171
fi
172172

173173
# Check dtype.
174-
EXPORTED_MODEL_NAME="llama2"
174+
EXPORTED_MODEL_NAME="tinyllama_${MODE}_${DTYPE}"
175175
if [[ "${DTYPE}" == "fp16" ]]; then
176176
EXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}_h"
177177
elif [[ "${DTYPE}" == "bf16" ]]; then
@@ -188,7 +188,7 @@ EXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}.pte"
188188
echo "Exporting ${EXPORTED_MODEL_NAME}"
189189
EXPORT_ARGS="-c ${CHECKPOINT_FILE_NAME} -p ${PARAMS} -d ${DTYPE} -n ${EXPORTED_MODEL_NAME} -kv"
190190
if [[ "${XNNPACK}" == "ON" ]]; then
191-
EXPORT_ARGS="${EXPORT_ARGS} -X -qmode 8da4w -G 128"
191+
EXPORT_ARGS="${EXPORT_ARGS} -X --xnnpack-extended-ops -qmode 8da4w -G 128"
192192
fi
193193
if [[ "${CUSTOM}" == "ON" ]]; then
194194
EXPORT_ARGS="${EXPORT_ARGS} --use_sdpa_with_kv_cache"
@@ -206,28 +206,28 @@ if [[ "${QNN}" == "ON" ]]; then
206206
EXPORT_ARGS="${EXPORT_ARGS} -kv -v --qnn --disable_dynamic_shape"
207207
fi
208208
# Add dynamically linked library location
209-
$PYTHON_EXECUTABLE -m examples.models.llama2.export_llama ${EXPORT_ARGS}
209+
$PYTHON_EXECUTABLE -m examples.models.llama.export_llama ${EXPORT_ARGS}
210210

211211
# Create tokenizer.bin.
212212
echo "Creating tokenizer.bin"
213213
$PYTHON_EXECUTABLE -m extension.llm.tokenizer.tokenizer -t tokenizer.model -o tokenizer.bin
214214

215215

216-
RUNTIME_ARGS="--model_path=${EXPORTED_MODEL_NAME} --tokenizer_path=tokenizer.bin --prompt=Once --temperature=0 --seq_len=10"
216+
RUNTIME_ARGS="--model_path=${EXPORTED_MODEL_NAME} --tokenizer_path=tokenizer.bin --prompt=Once --temperature=0 --seq_len=10 --warmup=1"
217217
# Check build tool.
218218
echo "Running ${EXPORTED_MODEL_NAME} in portable mode"
219219
if [[ "${BUILD_TOOL}" == "buck2" ]]; then
220220
# Run model.
221221
# shellcheck source=/dev/null
222-
$BUCK run examples/models/llama2:main -- ${RUNTIME_ARGS} > result.txt
222+
$BUCK run examples/models/llama:main -- ${RUNTIME_ARGS} > result.txt
223223
elif [[ "${BUILD_TOOL}" == "cmake" ]]; then
224224
cmake_install_executorch_libraries
225225
cmake_build_llama_runner
226226
# Run llama runner
227227
NOW=$(date +"%H:%M:%S")
228228
echo "Starting to run llama runner at ${NOW}"
229229
# shellcheck source=/dev/null
230-
cmake-out/examples/models/llama2/llama_main ${RUNTIME_ARGS} > result.txt
230+
cmake-out/examples/models/llama/llama_main ${RUNTIME_ARGS} > result.txt
231231
NOW=$(date +"%H:%M:%S")
232232
echo "Finished at ${NOW}"
233233
else

.ci/scripts/test_model.sh

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ run_portable_executor_runner() {
7575
test_model() {
7676
if [[ "${MODEL_NAME}" == "llama2" ]]; then
7777
# Install requirements for export_llama
78-
bash examples/models/llama2/install_requirements.sh
79-
# Test export_llama script: python3 -m examples.models.llama2.export_llama
80-
"${PYTHON_EXECUTABLE}" -m examples.models.llama2.export_llama -c examples/models/llama2/params/demo_rand_params.pth -p examples/models/llama2/params/demo_config.json
78+
bash examples/models/llama/install_requirements.sh
79+
# Test export_llama script: python3 -m examples.models.llama.export_llama
80+
"${PYTHON_EXECUTABLE}" -m examples.models.llama.export_llama -c examples/models/llama/params/demo_rand_params.pth -p examples/models/llama/params/demo_config.json
8181
run_portable_executor_runner
8282
rm "./${MODEL_NAME}.pte"
8383
fi
@@ -155,30 +155,24 @@ test_model_with_qnn() {
155155

156156
if [[ "${MODEL_NAME}" == "dl3" ]]; then
157157
EXPORT_SCRIPT=deeplab_v3
158-
EXPORTED_MODEL_NAME=dlv3_qnn.pte
159158
elif [[ "${MODEL_NAME}" == "mv3" ]]; then
160159
EXPORT_SCRIPT=mobilenet_v3
161-
EXPORTED_MODEL_NAME=mv3_qnn.pte
162160
elif [[ "${MODEL_NAME}" == "mv2" ]]; then
163161
EXPORT_SCRIPT=mobilenet_v2
164-
EXPORTED_MODEL_NAME=mv2_qnn.pte
165162
elif [[ "${MODEL_NAME}" == "ic4" ]]; then
166163
EXPORT_SCRIPT=inception_v4
167-
EXPORTED_MODEL_NAME=ic4_qnn.pte
168164
elif [[ "${MODEL_NAME}" == "ic3" ]]; then
169165
EXPORT_SCRIPT=inception_v3
170-
EXPORTED_MODEL_NAME=ic3_qnn.pte
171166
elif [[ "${MODEL_NAME}" == "vit" ]]; then
172167
EXPORT_SCRIPT=torchvision_vit
173-
EXPORTED_MODEL_NAME=vit_qnn.pte
174168
fi
175169

176170
# Use SM8450 for S22, SM8550 for S23, and SM8560 for S24
177171
# TODO(guangyang): Make QNN chipset matches the target device
178172
QNN_CHIPSET=SM8450
179173

180174
"${PYTHON_EXECUTABLE}" -m examples.qualcomm.scripts.${EXPORT_SCRIPT} -b ${CMAKE_OUTPUT_DIR} -m ${QNN_CHIPSET} --compile_only
181-
EXPORTED_MODEL=./${EXPORT_SCRIPT}/${EXPORTED_MODEL_NAME}
175+
EXPORTED_MODEL=$(find "./${EXPORT_SCRIPT}" -type f -name "${MODEL_NAME}*.pte" -print -quit)
182176
}
183177

184178
test_model_with_coreml() {
@@ -187,7 +181,24 @@ test_model_with_coreml() {
187181
exit 1
188182
fi
189183

190-
"${PYTHON_EXECUTABLE}" -m examples.apple.coreml.scripts.export --model_name="${MODEL_NAME}"
184+
DTYPE=float16
185+
186+
"${PYTHON_EXECUTABLE}" -m examples.apple.coreml.scripts.export --model_name="${MODEL_NAME}" --compute_precision "${DTYPE}"
187+
EXPORTED_MODEL=$(find "." -type f -name "${MODEL_NAME}*.pte" -print -quit)
188+
# TODO:
189+
if [ -n "$EXPORTED_MODEL" ]; then
190+
EXPORTED_MODEL_WITH_DTYPE="${EXPORTED_MODEL%.pte}_${DTYPE}.pte"
191+
mv "$EXPORTED_MODEL" "$EXPORTED_MODEL_WITH_DTYPE"
192+
EXPORTED_MODEL="$EXPORTED_MODEL_WITH_DTYPE"
193+
echo "Renamed file path: $EXPORTED_MODEL"
194+
else
195+
echo "No .pte file found"
196+
exit 1
197+
fi
198+
}
199+
200+
test_model_with_mps() {
201+
"${PYTHON_EXECUTABLE}" -m examples.apple.mps.scripts.mps_example --model_name="${MODEL_NAME}" --use_fp16
191202
EXPORTED_MODEL=$(find "." -type f -name "${MODEL_NAME}*.pte" -print -quit)
192203
}
193204

@@ -206,6 +217,12 @@ elif [[ "${BACKEND}" == "coreml" ]]; then
206217
if [[ $? -eq 0 ]]; then
207218
prepare_artifacts_upload
208219
fi
220+
elif [[ "${BACKEND}" == "mps" ]]; then
221+
echo "Testing ${MODEL_NAME} with mps..."
222+
test_model_with_mps
223+
if [[ $? -eq 0 ]]; then
224+
prepare_artifacts_upload
225+
fi
209226
elif [[ "${BACKEND}" == "xnnpack" ]]; then
210227
echo "Testing ${MODEL_NAME} with xnnpack..."
211228
WITH_QUANTIZATION=true

.ci/scripts/test_phi_3_mini.sh

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#!/bin/bash
2+
# Copyright (c) Meta Platforms, Inc. and affiliates.
3+
# All rights reserved.
4+
#
5+
# This source code is licensed under the BSD-style license found in the
6+
# LICENSE file in the root directory of this source tree.
7+
8+
set -exu
9+
10+
BUILD_TYPE=${1:-Debug}
11+
BUILD_DIR=${3:-cmake-out}
12+
MODEL_DIR=examples/models/phi-3-mini
13+
14+
echo "Building with BUILD_TYPE: $BUILD_TYPE, BUILD_DIR: $BUILD_DIR"
15+
16+
if [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then
17+
PYTHON_EXECUTABLE=python3
18+
fi
19+
20+
# Number of processes for a parallel build
21+
NPROC=8
22+
if hash nproc &> /dev/null; then NPROC=$(nproc); fi
23+
24+
cmake_install_executorch_libraries() {
25+
cmake -DPYTHON_EXECUTABLE=python \
26+
-DCMAKE_INSTALL_PREFIX=${BUILD_DIR} \
27+
-DEXECUTORCH_ENABLE_LOGGING=1 \
28+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
29+
-DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
30+
-DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
31+
-DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
32+
-DEXECUTORCH_BUILD_XNNPACK=ON \
33+
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
34+
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
35+
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
36+
-B${BUILD_DIR} .
37+
38+
cmake --build ${BUILD_DIR} -j${NPROC} --target install --config ${BUILD_TYPE}
39+
}
40+
41+
cmake_build_phi_3_mini() {
42+
cmake -DPYTHON_EXECUTABLE=$PYTHON_EXECUTABLE \
43+
-DCMAKE_INSTALL_PREFIX=${BUILD_DIR} \
44+
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
45+
-DEXECUTORCH_BUILD_KERNELS_CUSTOM=ON \
46+
-DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
47+
-DEXECUTORCH_BUILD_XNNPACK=ON \
48+
-DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
49+
-B${BUILD_DIR}/${MODEL_DIR} \
50+
${MODEL_DIR}
51+
52+
cmake --build ${BUILD_DIR}/${MODEL_DIR} -j${NPROC} --config ${BUILD_TYPE}
53+
}
54+
55+
# Download and convert tokenizer.model
56+
prepare_tokenizer() {
57+
echo "Downloading and converting tokenizer.model"
58+
wget -O tokenizer.model "https://huggingface.co/microsoft/Phi-3-mini-128k-instruct/resolve/main/tokenizer.model?download=true"
59+
$PYTHON_EXECUTABLE -m executorch.extension.llm.tokenizer.tokenizer -t tokenizer.model -o tokenizer.bin
60+
}
61+
62+
# Export phi-3-mini model to pte
63+
export_phi_3_mini () {
64+
echo "Exporting phi-3-mini. This will take a few minutes"
65+
$PYTHON_EXECUTABLE -m executorch.examples.models.phi-3-mini.export_phi-3-mini -c "4k" -s 128 -o phi-3-mini.pte
66+
}
67+
68+
run_and_verify() {
69+
NOW=$(date +"%H:%M:%S")
70+
echo "Starting to run phi-3-mini runner at ${NOW}"
71+
if [[ ! -f "phi-3-mini.pte" ]]; then
72+
echo "Export failed. Abort"
73+
exit 1
74+
fi
75+
if [[ ! -f "tokenizer.bin" ]]; then
76+
echo "tokenizer.bin is missing."
77+
exit 1
78+
fi
79+
80+
${BUILD_DIR}/${MODEL_DIR}/phi_3_mini_runner \
81+
--model_path=phi-3-mini.pte \
82+
--tokenizer_path=tokenizer.bin \
83+
--seq_len=128 \
84+
--temperature=0 \
85+
--prompt="<|system|>
86+
You are a helpful assistant.<|end|>
87+
<|user|>
88+
What is the capital of France?<|end|>
89+
<|assistant|>" > result.txt
90+
91+
# verify result.txt
92+
RESULT=$(cat result.txt)
93+
EXPECTED_RESULT="The capital of France is Paris."
94+
if [[ "${RESULT}" == *"${EXPECTED_RESULT}"* ]]; then
95+
echo "Expected result prefix: ${EXPECTED_RESULT}"
96+
echo "Actual result: ${RESULT}"
97+
echo "Success"
98+
exit 0
99+
else
100+
echo "Expected result prefix: ${EXPECTED_RESULT}"
101+
echo "Actual result: ${RESULT}"
102+
echo "Failure; results not the same"
103+
exit 1
104+
fi
105+
}
106+
107+
# Step 1. Build ExecuTorch and phi-3-mini runner
108+
cmake_install_executorch_libraries
109+
cmake_build_phi_3_mini
110+
111+
# Step 2. Export the tokenizer and model
112+
prepare_tokenizer
113+
export_phi_3_mini
114+
115+
# Step 3. Run and verify result
116+
run_and_verify

0 commit comments

Comments
 (0)