1*523fa7a6SAndroid Build Coastguard Worker#!/bin/bash 2*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 3*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker# 5*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker 8*523fa7a6SAndroid Build Coastguard Workerset -exu 9*523fa7a6SAndroid Build Coastguard Worker 10*523fa7a6SAndroid Build Coastguard Worker# shellcheck source=/dev/null 11*523fa7a6SAndroid Build Coastguard Workersource "$(dirname "${BASH_SOURCE[0]}")/utils.sh" 12*523fa7a6SAndroid Build Coastguard Worker 13*523fa7a6SAndroid Build Coastguard WorkerMODEL_NAME=$1 14*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${MODEL_NAME:-}" ]]; then 15*523fa7a6SAndroid Build Coastguard Worker echo "Missing model name, exiting..." 16*523fa7a6SAndroid Build Coastguard Worker exit 1 17*523fa7a6SAndroid Build Coastguard Workerfi 18*523fa7a6SAndroid Build Coastguard Worker 19*523fa7a6SAndroid Build Coastguard WorkerBUILD_TOOL=$2 20*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${BUILD_TOOL:-}" ]]; then 21*523fa7a6SAndroid Build Coastguard Worker echo "Missing build tool (require buck2 or cmake), exiting..." 22*523fa7a6SAndroid Build Coastguard Worker exit 1 23*523fa7a6SAndroid Build Coastguard Workerfi 24*523fa7a6SAndroid Build Coastguard Worker 25*523fa7a6SAndroid Build Coastguard WorkerBACKEND=$3 26*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${BACKEND:-}" ]]; then 27*523fa7a6SAndroid Build Coastguard Worker echo "Missing backend (require portable or xnnpack), exiting..." 28*523fa7a6SAndroid Build Coastguard Worker exit 1 29*523fa7a6SAndroid Build Coastguard Workerfi 30*523fa7a6SAndroid Build Coastguard Worker 31*523fa7a6SAndroid Build Coastguard WorkerUPLOAD_DIR=${4:-} 32*523fa7a6SAndroid Build Coastguard Worker 33*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then 34*523fa7a6SAndroid Build Coastguard Worker PYTHON_EXECUTABLE=python3 35*523fa7a6SAndroid Build Coastguard Workerfi 36*523fa7a6SAndroid Build Coastguard Workerwhich "${PYTHON_EXECUTABLE}" 37*523fa7a6SAndroid Build Coastguard Worker 38*523fa7a6SAndroid Build Coastguard Worker# Just set this variable here, it's cheap even if we use buck2 39*523fa7a6SAndroid Build Coastguard WorkerCMAKE_OUTPUT_DIR=cmake-out 40*523fa7a6SAndroid Build Coastguard WorkerEXPORTED_MODEL=${MODEL_NAME} 41*523fa7a6SAndroid Build Coastguard Worker 42*523fa7a6SAndroid Build Coastguard Workerprepare_artifacts_upload() { 43*523fa7a6SAndroid Build Coastguard Worker if [ -n "$UPLOAD_DIR" ]; then 44*523fa7a6SAndroid Build Coastguard Worker echo "Preparing for uploading generated artifacs" 45*523fa7a6SAndroid Build Coastguard Worker zip -j model.zip "${EXPORTED_MODEL}" 46*523fa7a6SAndroid Build Coastguard Worker mkdir -p "${UPLOAD_DIR}" 47*523fa7a6SAndroid Build Coastguard Worker mv model.zip "${UPLOAD_DIR}" 48*523fa7a6SAndroid Build Coastguard Worker fi 49*523fa7a6SAndroid Build Coastguard Worker} 50*523fa7a6SAndroid Build Coastguard Worker 51*523fa7a6SAndroid Build Coastguard Workerbuild_cmake_executor_runner() { 52*523fa7a6SAndroid Build Coastguard Worker echo "Building executor_runner" 53*523fa7a6SAndroid Build Coastguard Worker rm -rf ${CMAKE_OUTPUT_DIR} 54*523fa7a6SAndroid Build Coastguard Worker cmake -DCMAKE_BUILD_TYPE=Debug \ 55*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \ 56*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \ 57*523fa7a6SAndroid Build Coastguard Worker -B${CMAKE_OUTPUT_DIR} . 58*523fa7a6SAndroid Build Coastguard Worker 59*523fa7a6SAndroid Build Coastguard Worker cmake --build ${CMAKE_OUTPUT_DIR} -j4 --config Debug 60*523fa7a6SAndroid Build Coastguard Worker} 61*523fa7a6SAndroid Build Coastguard Worker 62*523fa7a6SAndroid Build Coastguard Workerrun_portable_executor_runner() { 63*523fa7a6SAndroid Build Coastguard Worker # Run test model 64*523fa7a6SAndroid Build Coastguard Worker if [[ "${BUILD_TOOL}" == "buck2" ]]; then 65*523fa7a6SAndroid Build Coastguard Worker buck2 run //examples/portable/executor_runner:executor_runner -- --model_path "./${MODEL_NAME}.pte" 66*523fa7a6SAndroid Build Coastguard Worker elif [[ "${BUILD_TOOL}" == "cmake" ]]; then 67*523fa7a6SAndroid Build Coastguard Worker build_cmake_executor_runner 68*523fa7a6SAndroid Build Coastguard Worker ./${CMAKE_OUTPUT_DIR}/executor_runner --model_path "./${MODEL_NAME}.pte" 69*523fa7a6SAndroid Build Coastguard Worker else 70*523fa7a6SAndroid Build Coastguard Worker echo "Invalid build tool ${BUILD_TOOL}. Only buck2 and cmake are supported atm" 71*523fa7a6SAndroid Build Coastguard Worker exit 1 72*523fa7a6SAndroid Build Coastguard Worker fi 73*523fa7a6SAndroid Build Coastguard Worker} 74*523fa7a6SAndroid Build Coastguard Worker 75*523fa7a6SAndroid Build Coastguard Workertest_model() { 76*523fa7a6SAndroid Build Coastguard Worker if [[ "${MODEL_NAME}" == "llama2" ]]; then 77*523fa7a6SAndroid Build Coastguard Worker # Install requirements for export_llama 78*523fa7a6SAndroid Build Coastguard Worker bash examples/models/llama/install_requirements.sh 79*523fa7a6SAndroid Build Coastguard Worker # Test export_llama script: python3 -m examples.models.llama.export_llama 80*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.models.llama.export_llama --model "${MODEL_NAME}" -c examples/models/llama/params/demo_rand_params.pth -p examples/models/llama/params/demo_config.json 81*523fa7a6SAndroid Build Coastguard Worker run_portable_executor_runner 82*523fa7a6SAndroid Build Coastguard Worker rm "./${MODEL_NAME}.pte" 83*523fa7a6SAndroid Build Coastguard Worker fi 84*523fa7a6SAndroid Build Coastguard Worker STRICT="--strict" 85*523fa7a6SAndroid Build Coastguard Worker if [[ "${MODEL_NAME}" == "llava" ]]; then 86*523fa7a6SAndroid Build Coastguard Worker # Install requirements for llava 87*523fa7a6SAndroid Build Coastguard Worker bash examples/models/llava/install_requirements.sh 88*523fa7a6SAndroid Build Coastguard Worker STRICT="--no-strict" 89*523fa7a6SAndroid Build Coastguard Worker fi 90*523fa7a6SAndroid Build Coastguard Worker if [[ "$MODEL_NAME" == "llama3_2_vision_encoder" || "$MODEL_NAME" == "llama3_2_text_decoder" ]]; then 91*523fa7a6SAndroid Build Coastguard Worker # Install requirements for llama vision. 92*523fa7a6SAndroid Build Coastguard Worker bash examples/models/llama3_2_vision/install_requirements.sh 93*523fa7a6SAndroid Build Coastguard Worker fi 94*523fa7a6SAndroid Build Coastguard Worker # python3 -m examples.portable.scripts.export --model_name="llama2" should works too 95*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.portable.scripts.export --model_name="${MODEL_NAME}" "${STRICT}" 96*523fa7a6SAndroid Build Coastguard Worker run_portable_executor_runner 97*523fa7a6SAndroid Build Coastguard Worker} 98*523fa7a6SAndroid Build Coastguard Worker 99*523fa7a6SAndroid Build Coastguard Workerbuild_cmake_xnn_executor_runner() { 100*523fa7a6SAndroid Build Coastguard Worker echo "Building xnn_executor_runner" 101*523fa7a6SAndroid Build Coastguard Worker SITE_PACKAGES="$(${PYTHON_EXECUTABLE} -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')" 102*523fa7a6SAndroid Build Coastguard Worker CMAKE_PREFIX_PATH="${SITE_PACKAGES}/torch" 103*523fa7a6SAndroid Build Coastguard Worker 104*523fa7a6SAndroid Build Coastguard Worker (rm -rf ${CMAKE_OUTPUT_DIR} \ 105*523fa7a6SAndroid Build Coastguard Worker && mkdir ${CMAKE_OUTPUT_DIR} \ 106*523fa7a6SAndroid Build Coastguard Worker && cd ${CMAKE_OUTPUT_DIR} \ 107*523fa7a6SAndroid Build Coastguard Worker && retry cmake -DCMAKE_BUILD_TYPE=Release \ 108*523fa7a6SAndroid Build Coastguard Worker -DEXECUTORCH_BUILD_XNNPACK=ON \ 109*523fa7a6SAndroid Build Coastguard Worker -DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH" \ 110*523fa7a6SAndroid Build Coastguard Worker -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" ..) 111*523fa7a6SAndroid Build Coastguard Worker 112*523fa7a6SAndroid Build Coastguard Worker cmake --build ${CMAKE_OUTPUT_DIR} -j4 113*523fa7a6SAndroid Build Coastguard Worker} 114*523fa7a6SAndroid Build Coastguard Worker 115*523fa7a6SAndroid Build Coastguard Workertest_model_with_xnnpack() { 116*523fa7a6SAndroid Build Coastguard Worker WITH_QUANTIZATION=$1 117*523fa7a6SAndroid Build Coastguard Worker WITH_DELEGATION=$2 118*523fa7a6SAndroid Build Coastguard Worker 119*523fa7a6SAndroid Build Coastguard Worker # Quantization-only 120*523fa7a6SAndroid Build Coastguard Worker if [[ ${WITH_QUANTIZATION} == true ]] && [[ ${WITH_DELEGATION} == false ]]; then 121*523fa7a6SAndroid Build Coastguard Worker bash examples/xnnpack/quantization/test_quantize.sh "${BUILD_TOOL}" "${MODEL_NAME}" 122*523fa7a6SAndroid Build Coastguard Worker return 0 123*523fa7a6SAndroid Build Coastguard Worker fi 124*523fa7a6SAndroid Build Coastguard Worker 125*523fa7a6SAndroid Build Coastguard Worker # Delegation 126*523fa7a6SAndroid Build Coastguard Worker if [[ ${WITH_QUANTIZATION} == true ]]; then 127*523fa7a6SAndroid Build Coastguard Worker SUFFIX="q8" 128*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.xnnpack.aot_compiler --model_name="${MODEL_NAME}" --delegate --quantize 129*523fa7a6SAndroid Build Coastguard Worker else 130*523fa7a6SAndroid Build Coastguard Worker SUFFIX="fp32" 131*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.xnnpack.aot_compiler --model_name="${MODEL_NAME}" --delegate 132*523fa7a6SAndroid Build Coastguard Worker fi 133*523fa7a6SAndroid Build Coastguard Worker 134*523fa7a6SAndroid Build Coastguard Worker OUTPUT_MODEL_PATH="${MODEL_NAME}_xnnpack_${SUFFIX}.pte" 135*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL=${OUTPUT_MODEL_PATH} 136*523fa7a6SAndroid Build Coastguard Worker 137*523fa7a6SAndroid Build Coastguard Worker # Run test model 138*523fa7a6SAndroid Build Coastguard Worker if [[ "${BUILD_TOOL}" == "buck2" ]]; then 139*523fa7a6SAndroid Build Coastguard Worker buck2 run //examples/xnnpack:xnn_executor_runner -- --model_path "${OUTPUT_MODEL_PATH}" 140*523fa7a6SAndroid Build Coastguard Worker elif [[ "${BUILD_TOOL}" == "cmake" ]]; then 141*523fa7a6SAndroid Build Coastguard Worker if [[ ! -f ${CMAKE_OUTPUT_DIR}/backends/xnnpack/xnn_executor_runner ]]; then 142*523fa7a6SAndroid Build Coastguard Worker build_cmake_xnn_executor_runner 143*523fa7a6SAndroid Build Coastguard Worker fi 144*523fa7a6SAndroid Build Coastguard Worker ./${CMAKE_OUTPUT_DIR}/backends/xnnpack/xnn_executor_runner --model_path "${OUTPUT_MODEL_PATH}" 145*523fa7a6SAndroid Build Coastguard Worker else 146*523fa7a6SAndroid Build Coastguard Worker echo "Invalid build tool ${BUILD_TOOL}. Only buck2 and cmake are supported atm" 147*523fa7a6SAndroid Build Coastguard Worker exit 1 148*523fa7a6SAndroid Build Coastguard Worker fi 149*523fa7a6SAndroid Build Coastguard Worker} 150*523fa7a6SAndroid Build Coastguard Worker 151*523fa7a6SAndroid Build Coastguard Workertest_model_with_qnn() { 152*523fa7a6SAndroid Build Coastguard Worker source "$(dirname "${BASH_SOURCE[0]}")/build-qnn-sdk.sh" 153*523fa7a6SAndroid Build Coastguard Worker echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" 154*523fa7a6SAndroid Build Coastguard Worker echo "QNN_SDK_ROOT: $QNN_SDK_ROOT" 155*523fa7a6SAndroid Build Coastguard Worker echo "EXECUTORCH_ROOT: $EXECUTORCH_ROOT" 156*523fa7a6SAndroid Build Coastguard Worker 157*523fa7a6SAndroid Build Coastguard Worker export LD_LIBRARY_PATH=$QNN_SDK_ROOT/lib/x86_64-linux-clang/ 158*523fa7a6SAndroid Build Coastguard Worker export PYTHONPATH=$EXECUTORCH_ROOT/.. 159*523fa7a6SAndroid Build Coastguard Worker 160*523fa7a6SAndroid Build Coastguard Worker if [[ "${MODEL_NAME}" == "dl3" ]]; then 161*523fa7a6SAndroid Build Coastguard Worker EXPORT_SCRIPT=deeplab_v3 162*523fa7a6SAndroid Build Coastguard Worker elif [[ "${MODEL_NAME}" == "mv3" ]]; then 163*523fa7a6SAndroid Build Coastguard Worker EXPORT_SCRIPT=mobilenet_v3 164*523fa7a6SAndroid Build Coastguard Worker elif [[ "${MODEL_NAME}" == "mv2" ]]; then 165*523fa7a6SAndroid Build Coastguard Worker EXPORT_SCRIPT=mobilenet_v2 166*523fa7a6SAndroid Build Coastguard Worker elif [[ "${MODEL_NAME}" == "ic4" ]]; then 167*523fa7a6SAndroid Build Coastguard Worker EXPORT_SCRIPT=inception_v4 168*523fa7a6SAndroid Build Coastguard Worker elif [[ "${MODEL_NAME}" == "ic3" ]]; then 169*523fa7a6SAndroid Build Coastguard Worker EXPORT_SCRIPT=inception_v3 170*523fa7a6SAndroid Build Coastguard Worker elif [[ "${MODEL_NAME}" == "vit" ]]; then 171*523fa7a6SAndroid Build Coastguard Worker EXPORT_SCRIPT=torchvision_vit 172*523fa7a6SAndroid Build Coastguard Worker fi 173*523fa7a6SAndroid Build Coastguard Worker 174*523fa7a6SAndroid Build Coastguard Worker # Use SM8450 for S22, SM8550 for S23, and SM8560 for S24 175*523fa7a6SAndroid Build Coastguard Worker # TODO(guangyang): Make QNN chipset matches the target device 176*523fa7a6SAndroid Build Coastguard Worker QNN_CHIPSET=SM8450 177*523fa7a6SAndroid Build Coastguard Worker 178*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.qualcomm.scripts.${EXPORT_SCRIPT} -b ${CMAKE_OUTPUT_DIR} -m ${QNN_CHIPSET} --compile_only 179*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL=$(find "./${EXPORT_SCRIPT}" -type f -name "${MODEL_NAME}*.pte" -print -quit) 180*523fa7a6SAndroid Build Coastguard Worker} 181*523fa7a6SAndroid Build Coastguard Worker 182*523fa7a6SAndroid Build Coastguard Workertest_model_with_coreml() { 183*523fa7a6SAndroid Build Coastguard Worker if [[ "${BUILD_TOOL}" == "buck2" ]]; then 184*523fa7a6SAndroid Build Coastguard Worker echo "coreml doesn't support buck2." 185*523fa7a6SAndroid Build Coastguard Worker exit 1 186*523fa7a6SAndroid Build Coastguard Worker fi 187*523fa7a6SAndroid Build Coastguard Worker 188*523fa7a6SAndroid Build Coastguard Worker DTYPE=float16 189*523fa7a6SAndroid Build Coastguard Worker 190*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.apple.coreml.scripts.export --model_name="${MODEL_NAME}" --compute_precision "${DTYPE}" 191*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL=$(find "." -type f -name "${MODEL_NAME}*.pte" -print -quit) 192*523fa7a6SAndroid Build Coastguard Worker # TODO: 193*523fa7a6SAndroid Build Coastguard Worker if [ -n "$EXPORTED_MODEL" ]; then 194*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL_WITH_DTYPE="${EXPORTED_MODEL%.pte}_${DTYPE}.pte" 195*523fa7a6SAndroid Build Coastguard Worker mv "$EXPORTED_MODEL" "$EXPORTED_MODEL_WITH_DTYPE" 196*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL="$EXPORTED_MODEL_WITH_DTYPE" 197*523fa7a6SAndroid Build Coastguard Worker echo "Renamed file path: $EXPORTED_MODEL" 198*523fa7a6SAndroid Build Coastguard Worker else 199*523fa7a6SAndroid Build Coastguard Worker echo "No .pte file found" 200*523fa7a6SAndroid Build Coastguard Worker exit 1 201*523fa7a6SAndroid Build Coastguard Worker fi 202*523fa7a6SAndroid Build Coastguard Worker} 203*523fa7a6SAndroid Build Coastguard Worker 204*523fa7a6SAndroid Build Coastguard Workertest_model_with_mps() { 205*523fa7a6SAndroid Build Coastguard Worker "${PYTHON_EXECUTABLE}" -m examples.apple.mps.scripts.mps_example --model_name="${MODEL_NAME}" --use_fp16 206*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL=$(find "." -type f -name "${MODEL_NAME}*.pte" -print -quit) 207*523fa7a6SAndroid Build Coastguard Worker # TODO: 208*523fa7a6SAndroid Build Coastguard Worker if [ -n "$EXPORTED_MODEL" ]; then 209*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL_WITH_DTYPE="${EXPORTED_MODEL%.pte}_${DTYPE}.pte" 210*523fa7a6SAndroid Build Coastguard Worker mv "$EXPORTED_MODEL" "$EXPORTED_MODEL_WITH_DTYPE" 211*523fa7a6SAndroid Build Coastguard Worker EXPORTED_MODEL="$EXPORTED_MODEL_WITH_DTYPE" 212*523fa7a6SAndroid Build Coastguard Worker echo "Renamed file path: $EXPORTED_MODEL" 213*523fa7a6SAndroid Build Coastguard Worker else 214*523fa7a6SAndroid Build Coastguard Worker echo "No .pte file found" 215*523fa7a6SAndroid Build Coastguard Worker exit 1 216*523fa7a6SAndroid Build Coastguard Worker fi 217*523fa7a6SAndroid Build Coastguard Worker} 218*523fa7a6SAndroid Build Coastguard Worker 219*523fa7a6SAndroid Build Coastguard Workerif [[ "${BACKEND}" == "portable" ]]; then 220*523fa7a6SAndroid Build Coastguard Worker echo "Testing ${MODEL_NAME} with portable kernels..." 221*523fa7a6SAndroid Build Coastguard Worker test_model 222*523fa7a6SAndroid Build Coastguard Workerelif [[ "${BACKEND}" == "qnn" ]]; then 223*523fa7a6SAndroid Build Coastguard Worker echo "Testing ${MODEL_NAME} with qnn..." 224*523fa7a6SAndroid Build Coastguard Worker test_model_with_qnn 225*523fa7a6SAndroid Build Coastguard Worker if [[ $? -eq 0 ]]; then 226*523fa7a6SAndroid Build Coastguard Worker prepare_artifacts_upload 227*523fa7a6SAndroid Build Coastguard Worker fi 228*523fa7a6SAndroid Build Coastguard Workerelif [[ "${BACKEND}" == "coreml" ]]; then 229*523fa7a6SAndroid Build Coastguard Worker echo "Testing ${MODEL_NAME} with coreml..." 230*523fa7a6SAndroid Build Coastguard Worker test_model_with_coreml 231*523fa7a6SAndroid Build Coastguard Worker if [[ $? -eq 0 ]]; then 232*523fa7a6SAndroid Build Coastguard Worker prepare_artifacts_upload 233*523fa7a6SAndroid Build Coastguard Worker fi 234*523fa7a6SAndroid Build Coastguard Workerelif [[ "${BACKEND}" == "mps" ]]; then 235*523fa7a6SAndroid Build Coastguard Worker echo "Testing ${MODEL_NAME} with mps..." 236*523fa7a6SAndroid Build Coastguard Worker test_model_with_mps 237*523fa7a6SAndroid Build Coastguard Worker if [[ $? -eq 0 ]]; then 238*523fa7a6SAndroid Build Coastguard Worker prepare_artifacts_upload 239*523fa7a6SAndroid Build Coastguard Worker fi 240*523fa7a6SAndroid Build Coastguard Workerelif [[ "${BACKEND}" == "xnnpack" ]]; then 241*523fa7a6SAndroid Build Coastguard Worker echo "Testing ${MODEL_NAME} with xnnpack..." 242*523fa7a6SAndroid Build Coastguard Worker WITH_QUANTIZATION=true 243*523fa7a6SAndroid Build Coastguard Worker WITH_DELEGATION=true 244*523fa7a6SAndroid Build Coastguard Worker if [[ "$MODEL_NAME" == "mobilebert" ]]; then 245*523fa7a6SAndroid Build Coastguard Worker # TODO(T197452682) 246*523fa7a6SAndroid Build Coastguard Worker WITH_QUANTIZATION=false 247*523fa7a6SAndroid Build Coastguard Worker fi 248*523fa7a6SAndroid Build Coastguard Worker test_model_with_xnnpack "${WITH_QUANTIZATION}" "${WITH_DELEGATION}" 249*523fa7a6SAndroid Build Coastguard Worker if [[ $? -eq 0 ]]; then 250*523fa7a6SAndroid Build Coastguard Worker prepare_artifacts_upload 251*523fa7a6SAndroid Build Coastguard Worker fi 252*523fa7a6SAndroid Build Coastguard Workerelse 253*523fa7a6SAndroid Build Coastguard Worker set +e 254*523fa7a6SAndroid Build Coastguard Worker if [[ "${BACKEND}" == *"quantization"* ]]; then 255*523fa7a6SAndroid Build Coastguard Worker echo "::group::Testing ${MODEL_NAME} with XNNPACK quantization only..." 256*523fa7a6SAndroid Build Coastguard Worker test_model_with_xnnpack true false || Q_ERROR="error" 257*523fa7a6SAndroid Build Coastguard Worker echo "::endgroup::" 258*523fa7a6SAndroid Build Coastguard Worker fi 259*523fa7a6SAndroid Build Coastguard Worker if [[ "${BACKEND}" == *"delegation"* ]]; then 260*523fa7a6SAndroid Build Coastguard Worker echo "::group::Testing ${MODEL_NAME} with XNNPACK delegation only..." 261*523fa7a6SAndroid Build Coastguard Worker test_model_with_xnnpack false true || D_ERROR="error" 262*523fa7a6SAndroid Build Coastguard Worker echo "::endgroup::" 263*523fa7a6SAndroid Build Coastguard Worker fi 264*523fa7a6SAndroid Build Coastguard Worker if [[ "${BACKEND}" == *"quantization"* ]] && [[ "${BACKEND}" == *"delegation"* ]]; then 265*523fa7a6SAndroid Build Coastguard Worker echo "::group::Testing ${MODEL_NAME} with XNNPACK quantization and delegation..." 266*523fa7a6SAndroid Build Coastguard Worker test_model_with_xnnpack true true || Q_D_ERROR="error" 267*523fa7a6SAndroid Build Coastguard Worker echo "::endgroup::" 268*523fa7a6SAndroid Build Coastguard Worker fi 269*523fa7a6SAndroid Build Coastguard Worker set -e 270*523fa7a6SAndroid Build Coastguard Worker if [[ -n "${Q_ERROR:-}" ]] || [[ -n "${D_ERROR:-}" ]] || [[ -n "${Q_D_ERROR:-}" ]]; then 271*523fa7a6SAndroid Build Coastguard Worker echo "Portable q8 ${Q_ERROR:-ok}," "Delegation fp32 ${D_ERROR:-ok}," "Delegation q8 ${Q_D_ERROR:-ok}" 272*523fa7a6SAndroid Build Coastguard Worker exit 1 273*523fa7a6SAndroid Build Coastguard Worker else 274*523fa7a6SAndroid Build Coastguard Worker prepare_artifacts_upload 275*523fa7a6SAndroid Build Coastguard Worker fi 276*523fa7a6SAndroid Build Coastguard Workerfi 277