xref: /aosp_15_r20/external/executorch/.ci/scripts/test_llama.sh (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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# shellcheck source=/dev/null
10*523fa7a6SAndroid Build Coastguard Workersource "$(dirname "${BASH_SOURCE[0]}")/utils.sh"
11*523fa7a6SAndroid Build Coastguard Worker
12*523fa7a6SAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do
13*523fa7a6SAndroid Build Coastguard Worker  case "$1" in
14*523fa7a6SAndroid Build Coastguard Worker    -model)
15*523fa7a6SAndroid Build Coastguard Worker      MODEL_NAME="$2" # stories110M
16*523fa7a6SAndroid Build Coastguard Worker      shift 2
17*523fa7a6SAndroid Build Coastguard Worker      ;;
18*523fa7a6SAndroid Build Coastguard Worker    -build_tool)
19*523fa7a6SAndroid Build Coastguard Worker      BUILD_TOOL="$2" # buck2 or cmake
20*523fa7a6SAndroid Build Coastguard Worker      shift 2
21*523fa7a6SAndroid Build Coastguard Worker      ;;
22*523fa7a6SAndroid Build Coastguard Worker    -dtype)
23*523fa7a6SAndroid Build Coastguard Worker      DTYPE="$2" # fp16, bf16, or fp32
24*523fa7a6SAndroid Build Coastguard Worker      shift 2
25*523fa7a6SAndroid Build Coastguard Worker      ;;
26*523fa7a6SAndroid Build Coastguard Worker    -mode)
27*523fa7a6SAndroid Build Coastguard Worker      MODE="$2" # portable or xnnpack+custom or xnnpack+custom+qe
28*523fa7a6SAndroid Build Coastguard Worker      shift 2
29*523fa7a6SAndroid Build Coastguard Worker      ;;
30*523fa7a6SAndroid Build Coastguard Worker    -upload)
31*523fa7a6SAndroid Build Coastguard Worker      UPLOAD_DIR="$2"
32*523fa7a6SAndroid Build Coastguard Worker      shift 2
33*523fa7a6SAndroid Build Coastguard Worker      ;;
34*523fa7a6SAndroid Build Coastguard Worker    *)
35*523fa7a6SAndroid Build Coastguard Worker      echo "Unknown option: $1"
36*523fa7a6SAndroid Build Coastguard Worker      usage
37*523fa7a6SAndroid Build Coastguard Worker      ;;
38*523fa7a6SAndroid Build Coastguard Worker  esac
39*523fa7a6SAndroid Build Coastguard Workerdone
40*523fa7a6SAndroid Build Coastguard Worker
41*523fa7a6SAndroid Build Coastguard Worker# Default mode to xnnpack+custom if not set
42*523fa7a6SAndroid Build Coastguard WorkerMODE=${MODE:-"xnnpack+custom"}
43*523fa7a6SAndroid Build Coastguard Worker
44*523fa7a6SAndroid Build Coastguard Worker# Default UPLOAD_DIR to empty string if not set
45*523fa7a6SAndroid Build Coastguard WorkerUPLOAD_DIR="${UPLOAD_DIR:-}"
46*523fa7a6SAndroid Build Coastguard Worker
47*523fa7a6SAndroid Build Coastguard Workerif [[ $# -lt 4 ]]; then # Assuming 4 mandatory args
48*523fa7a6SAndroid Build Coastguard Worker    echo "Expecting atleast 4 positional arguments"
49*523fa7a6SAndroid Build Coastguard Worker    echo "Usage: [...]"
50*523fa7a6SAndroid Build Coastguard Workerfi
51*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${MODEL_NAME:-}" ]]; then
52*523fa7a6SAndroid Build Coastguard Worker  echo "Missing model name, exiting..."
53*523fa7a6SAndroid Build Coastguard Worker  exit 1
54*523fa7a6SAndroid Build Coastguard Workerfi
55*523fa7a6SAndroid Build Coastguard Worker
56*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${BUILD_TOOL:-}" ]]; then
57*523fa7a6SAndroid Build Coastguard Worker  echo "Missing build tool (require buck2 or cmake), exiting..."
58*523fa7a6SAndroid Build Coastguard Worker  exit
59*523fa7a6SAndroid Build Coastguard Workerfi
60*523fa7a6SAndroid Build Coastguard Worker
61*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${DTYPE:-}" ]]; then
62*523fa7a6SAndroid Build Coastguard Worker  echo "Missing dtype, choose fp16, bf16, or fp32, exiting..."
63*523fa7a6SAndroid Build Coastguard Worker  exit 1
64*523fa7a6SAndroid Build Coastguard Workerfi
65*523fa7a6SAndroid Build Coastguard Worker
66*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${MODE:-}" ]]; then
67*523fa7a6SAndroid Build Coastguard Worker  echo "Missing mode, choose portable or xnnpack, exiting..."
68*523fa7a6SAndroid Build Coastguard Worker  exit 1
69*523fa7a6SAndroid Build Coastguard Workerfi
70*523fa7a6SAndroid Build Coastguard Worker
71*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*xnnpack.* ]]; then
72*523fa7a6SAndroid Build Coastguard Worker  XNNPACK=ON
73*523fa7a6SAndroid Build Coastguard Workerelse
74*523fa7a6SAndroid Build Coastguard Worker  XNNPACK=OFF
75*523fa7a6SAndroid Build Coastguard Workerfi
76*523fa7a6SAndroid Build Coastguard Worker
77*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*custom.* ]]; then
78*523fa7a6SAndroid Build Coastguard Worker  CUSTOM=ON
79*523fa7a6SAndroid Build Coastguard Workerelse
80*523fa7a6SAndroid Build Coastguard Worker  CUSTOM=OFF
81*523fa7a6SAndroid Build Coastguard Workerfi
82*523fa7a6SAndroid Build Coastguard Worker
83*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*qe.* ]]; then
84*523fa7a6SAndroid Build Coastguard Worker  QE=ON
85*523fa7a6SAndroid Build Coastguard Workerelse
86*523fa7a6SAndroid Build Coastguard Worker  QE=OFF
87*523fa7a6SAndroid Build Coastguard Workerfi
88*523fa7a6SAndroid Build Coastguard Worker
89*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*mps.* ]]; then
90*523fa7a6SAndroid Build Coastguard Worker  MPS=ON
91*523fa7a6SAndroid Build Coastguard Workerelse
92*523fa7a6SAndroid Build Coastguard Worker  MPS=OFF
93*523fa7a6SAndroid Build Coastguard Workerfi
94*523fa7a6SAndroid Build Coastguard Worker
95*523fa7a6SAndroid Build Coastguard Workerecho "MPS option ${MPS}"
96*523fa7a6SAndroid Build Coastguard Worker
97*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*coreml.* ]]; then
98*523fa7a6SAndroid Build Coastguard Worker  COREML=ON
99*523fa7a6SAndroid Build Coastguard Workerelse
100*523fa7a6SAndroid Build Coastguard Worker  COREML=OFF
101*523fa7a6SAndroid Build Coastguard Workerfi
102*523fa7a6SAndroid Build Coastguard Worker
103*523fa7a6SAndroid Build Coastguard Workerecho "COREML option ${COREML}"
104*523fa7a6SAndroid Build Coastguard Worker
105*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODE}" =~ .*qnn.* ]]; then
106*523fa7a6SAndroid Build Coastguard Worker  QNN=ON
107*523fa7a6SAndroid Build Coastguard Worker  export EXECUTORCH_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
108*523fa7a6SAndroid Build Coastguard Worker  export QNN_SDK_ROOT=/tmp/qnn/2.25.0.240728
109*523fa7a6SAndroid Build Coastguard Worker  export LD_LIBRARY_PATH="${QNN_SDK_ROOT}/lib/x86_64-linux-clang"
110*523fa7a6SAndroid Build Coastguard Worker  export PYTHONPATH=".."
111*523fa7a6SAndroid Build Coastguard Worker  cp schema/program.fbs exir/_serialize/program.fbs
112*523fa7a6SAndroid Build Coastguard Worker  cp schema/scalar_type.fbs exir/_serialize/scalar_type.fbs
113*523fa7a6SAndroid Build Coastguard Worker  cp -f build-x86/backends/qualcomm/PyQnnManagerAdaptor.cpython-310-x86_64-linux-gnu.so backends/qualcomm/python
114*523fa7a6SAndroid Build Coastguard Worker  cp -f build-x86/backends/qualcomm/PyQnnWrapperAdaptor.cpython-310-x86_64-linux-gnu.so backends/qualcomm/python
115*523fa7a6SAndroid Build Coastguard Worker
116*523fa7a6SAndroid Build Coastguard Workerelse
117*523fa7a6SAndroid Build Coastguard Worker  QNN=OFF
118*523fa7a6SAndroid Build Coastguard Worker  QNN_SDK_ROOT=""
119*523fa7a6SAndroid Build Coastguard Workerfi
120*523fa7a6SAndroid Build Coastguard Worker
121*523fa7a6SAndroid Build Coastguard Workerecho "QNN option ${QNN}"
122*523fa7a6SAndroid Build Coastguard Workerecho "QNN_SDK_ROOT: ${QNN_SDK_ROOT}"
123*523fa7a6SAndroid Build Coastguard Worker
124*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${BUCK:-}" ]]; then
125*523fa7a6SAndroid Build Coastguard Worker  BUCK=buck2
126*523fa7a6SAndroid Build Coastguard Workerfi
127*523fa7a6SAndroid Build Coastguard Worker
128*523fa7a6SAndroid Build Coastguard Workerif [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then
129*523fa7a6SAndroid Build Coastguard Worker  PYTHON_EXECUTABLE=python3
130*523fa7a6SAndroid Build Coastguard Workerfi
131*523fa7a6SAndroid Build Coastguard Worker
132*523fa7a6SAndroid Build Coastguard Workerwhich "${PYTHON_EXECUTABLE}"
133*523fa7a6SAndroid Build Coastguard Worker
134*523fa7a6SAndroid Build Coastguard Workercmake_install_executorch_libraries() {
135*523fa7a6SAndroid Build Coastguard Worker    echo "Installing libexecutorch.a, libextension_module.so, libportable_ops_lib.a"
136*523fa7a6SAndroid Build Coastguard Worker    rm -rf cmake-out
137*523fa7a6SAndroid Build Coastguard Worker    retry cmake \
138*523fa7a6SAndroid Build Coastguard Worker        -DCMAKE_INSTALL_PREFIX=cmake-out \
139*523fa7a6SAndroid Build Coastguard Worker        -DCMAKE_BUILD_TYPE=Debug \
140*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_EXTENSION_DATA_LOADER=ON \
141*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_EXTENSION_MODULE=ON \
142*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_EXTENSION_TENSOR=ON \
143*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_KERNELS_CUSTOM="$CUSTOM" \
144*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
145*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_KERNELS_QUANTIZED=ON \
146*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_XNNPACK="$XNNPACK" \
147*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_MPS="$MPS" \
148*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_COREML="$COREML" \
149*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_QNN="$QNN" \
150*523fa7a6SAndroid Build Coastguard Worker        -DQNN_SDK_ROOT="$QNN_SDK_ROOT" \
151*523fa7a6SAndroid Build Coastguard Worker        -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \
152*523fa7a6SAndroid Build Coastguard Worker        -Bcmake-out .
153*523fa7a6SAndroid Build Coastguard Worker    cmake --build cmake-out -j9 --target install --config Debug
154*523fa7a6SAndroid Build Coastguard Worker}
155*523fa7a6SAndroid Build Coastguard Worker
156*523fa7a6SAndroid Build Coastguard Workercmake_build_llama_runner() {
157*523fa7a6SAndroid Build Coastguard Worker    echo "Building llama runner"
158*523fa7a6SAndroid Build Coastguard Worker    dir="examples/models/llama"
159*523fa7a6SAndroid Build Coastguard Worker    retry cmake \
160*523fa7a6SAndroid Build Coastguard Worker        -DCMAKE_INSTALL_PREFIX=cmake-out \
161*523fa7a6SAndroid Build Coastguard Worker        -DCMAKE_BUILD_TYPE=Debug \
162*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_KERNELS_CUSTOM="$CUSTOM" \
163*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_KERNELS_OPTIMIZED=ON \
164*523fa7a6SAndroid Build Coastguard Worker        -DEXECUTORCH_BUILD_XNNPACK="$XNNPACK" \
165*523fa7a6SAndroid Build Coastguard Worker        -DPYTHON_EXECUTABLE="$PYTHON_EXECUTABLE" \
166*523fa7a6SAndroid Build Coastguard Worker        -Bcmake-out/${dir} \
167*523fa7a6SAndroid Build Coastguard Worker        ${dir}
168*523fa7a6SAndroid Build Coastguard Worker    cmake --build cmake-out/${dir} -j9 --config Debug
169*523fa7a6SAndroid Build Coastguard Worker
170*523fa7a6SAndroid Build Coastguard Worker}
171*523fa7a6SAndroid Build Coastguard Worker
172*523fa7a6SAndroid Build Coastguard Workercleanup_files() {
173*523fa7a6SAndroid Build Coastguard Worker  echo "Deleting downloaded and generated files"
174*523fa7a6SAndroid Build Coastguard Worker  rm "${CHECKPOINT_FILE_NAME}"
175*523fa7a6SAndroid Build Coastguard Worker  rm tokenizer.model
176*523fa7a6SAndroid Build Coastguard Worker  rm tokenizer.bin
177*523fa7a6SAndroid Build Coastguard Worker  rm "${EXPORTED_MODEL_NAME}"
178*523fa7a6SAndroid Build Coastguard Worker  rm result.txt
179*523fa7a6SAndroid Build Coastguard Worker  rm params.json
180*523fa7a6SAndroid Build Coastguard Worker}
181*523fa7a6SAndroid Build Coastguard Worker
182*523fa7a6SAndroid Build Coastguard Workerprepare_artifacts_upload() {
183*523fa7a6SAndroid Build Coastguard Worker  if [ -n "${UPLOAD_DIR}" ]; then
184*523fa7a6SAndroid Build Coastguard Worker    echo "Preparing for uploading generated artifacs"
185*523fa7a6SAndroid Build Coastguard Worker    zip -j model.zip "${EXPORTED_MODEL_NAME}" tokenizer.bin
186*523fa7a6SAndroid Build Coastguard Worker    mkdir -p "${UPLOAD_DIR}"
187*523fa7a6SAndroid Build Coastguard Worker    mv model.zip "${UPLOAD_DIR}"
188*523fa7a6SAndroid Build Coastguard Worker  fi
189*523fa7a6SAndroid Build Coastguard Worker}
190*523fa7a6SAndroid Build Coastguard Worker
191*523fa7a6SAndroid Build Coastguard Worker# Download and create artifacts.
192*523fa7a6SAndroid Build Coastguard WorkerPARAMS="params.json"
193*523fa7a6SAndroid Build Coastguard WorkerCHECKPOINT_FILE_NAME=""
194*523fa7a6SAndroid Build Coastguard Workertouch "${PARAMS}"
195*523fa7a6SAndroid Build Coastguard Workerif [[ "${MODEL_NAME}" == "stories110M" ]]; then
196*523fa7a6SAndroid Build Coastguard Worker  CHECKPOINT_FILE_NAME="stories110M.pt"
197*523fa7a6SAndroid Build Coastguard Worker  download_stories_model_artifacts
198*523fa7a6SAndroid Build Coastguard Workerelse
199*523fa7a6SAndroid Build Coastguard Worker  echo "Unsupported model name ${MODEL_NAME}"
200*523fa7a6SAndroid Build Coastguard Worker  exit 1
201*523fa7a6SAndroid Build Coastguard Workerfi
202*523fa7a6SAndroid Build Coastguard Worker
203*523fa7a6SAndroid Build Coastguard Worker# Check dtype.
204*523fa7a6SAndroid Build Coastguard WorkerEXPORTED_MODEL_NAME="tinyllama_${MODE}_${DTYPE}"
205*523fa7a6SAndroid Build Coastguard Workerif [[ "${DTYPE}" == "fp16" ]]; then
206*523fa7a6SAndroid Build Coastguard Worker  EXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}_h"
207*523fa7a6SAndroid Build Coastguard Workerelif [[ "${DTYPE}" == "bf16" ]]; then
208*523fa7a6SAndroid Build Coastguard Worker  EXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}_bf"
209*523fa7a6SAndroid Build Coastguard Workerelif [[ "${DTYPE}" == "fp32" ]]; then
210*523fa7a6SAndroid Build Coastguard Worker  :
211*523fa7a6SAndroid Build Coastguard Workerelse
212*523fa7a6SAndroid Build Coastguard Worker  echo "Unsupported dtype ${DTYPE}"
213*523fa7a6SAndroid Build Coastguard Worker  exit 1
214*523fa7a6SAndroid Build Coastguard Workerfi
215*523fa7a6SAndroid Build Coastguard Worker
216*523fa7a6SAndroid Build Coastguard Worker# Export model.
217*523fa7a6SAndroid Build Coastguard WorkerEXPORTED_MODEL_NAME="${EXPORTED_MODEL_NAME}.pte"
218*523fa7a6SAndroid Build Coastguard Workerecho "Exporting ${EXPORTED_MODEL_NAME}"
219*523fa7a6SAndroid Build Coastguard WorkerEXPORT_ARGS="-c ${CHECKPOINT_FILE_NAME} -p ${PARAMS} -d ${DTYPE} -n ${EXPORTED_MODEL_NAME} -kv"
220*523fa7a6SAndroid Build Coastguard Workerif [[ "${XNNPACK}" == "ON" ]]; then
221*523fa7a6SAndroid Build Coastguard Worker  EXPORT_ARGS="${EXPORT_ARGS} -X --xnnpack-extended-ops -qmode 8da4w -G 128"
222*523fa7a6SAndroid Build Coastguard Workerfi
223*523fa7a6SAndroid Build Coastguard Workerif [[ "${CUSTOM}" == "ON" ]]; then
224*523fa7a6SAndroid Build Coastguard Worker  EXPORT_ARGS="${EXPORT_ARGS} --use_sdpa_with_kv_cache"
225*523fa7a6SAndroid Build Coastguard Workerfi
226*523fa7a6SAndroid Build Coastguard Workerif [[ "${QE}" == "ON" ]]; then
227*523fa7a6SAndroid Build Coastguard Worker  EXPORT_ARGS="${EXPORT_ARGS} --embedding-quantize 8,1024"
228*523fa7a6SAndroid Build Coastguard Workerfi
229*523fa7a6SAndroid Build Coastguard Workerif [[ "${MPS}" == "ON" ]]; then
230*523fa7a6SAndroid Build Coastguard Worker  EXPORT_ARGS="${EXPORT_ARGS} -kv -v --mps --disable_dynamic_shape"
231*523fa7a6SAndroid Build Coastguard Workerfi
232*523fa7a6SAndroid Build Coastguard Workerif [[ "${COREML}" == "ON" ]]; then
233*523fa7a6SAndroid Build Coastguard Worker  EXPORT_ARGS="${EXPORT_ARGS} -kv -v --coreml --disable_dynamic_shape"
234*523fa7a6SAndroid Build Coastguard Workerfi
235*523fa7a6SAndroid Build Coastguard Workerif [[ "${QNN}" == "ON" ]]; then
236*523fa7a6SAndroid Build Coastguard Worker  EXPORT_ARGS="${EXPORT_ARGS} -kv -v --qnn --disable_dynamic_shape"
237*523fa7a6SAndroid Build Coastguard Workerfi
238*523fa7a6SAndroid Build Coastguard Worker# Add dynamically linked library location
239*523fa7a6SAndroid Build Coastguard Worker$PYTHON_EXECUTABLE -m examples.models.llama.export_llama ${EXPORT_ARGS}
240*523fa7a6SAndroid Build Coastguard Worker
241*523fa7a6SAndroid Build Coastguard Worker# Create tokenizer.bin.
242*523fa7a6SAndroid Build Coastguard Workerecho "Creating tokenizer.bin"
243*523fa7a6SAndroid Build Coastguard Worker$PYTHON_EXECUTABLE -m extension.llm.tokenizer.tokenizer -t tokenizer.model -o tokenizer.bin
244*523fa7a6SAndroid Build Coastguard Worker
245*523fa7a6SAndroid Build Coastguard Worker
246*523fa7a6SAndroid Build Coastguard WorkerRUNTIME_ARGS="--model_path=${EXPORTED_MODEL_NAME} --tokenizer_path=tokenizer.bin --prompt=Once --temperature=0 --seq_len=10 --warmup=1"
247*523fa7a6SAndroid Build Coastguard Worker# Check build tool.
248*523fa7a6SAndroid Build Coastguard Workerecho "Running ${EXPORTED_MODEL_NAME} in portable mode"
249*523fa7a6SAndroid Build Coastguard Workerif [[ "${BUILD_TOOL}" == "buck2" ]]; then
250*523fa7a6SAndroid Build Coastguard Worker  # Run model.
251*523fa7a6SAndroid Build Coastguard Worker  # shellcheck source=/dev/null
252*523fa7a6SAndroid Build Coastguard Worker  $BUCK run examples/models/llama:main -- ${RUNTIME_ARGS} > result.txt
253*523fa7a6SAndroid Build Coastguard Workerelif [[ "${BUILD_TOOL}" == "cmake" ]]; then
254*523fa7a6SAndroid Build Coastguard Worker  cmake_install_executorch_libraries
255*523fa7a6SAndroid Build Coastguard Worker  cmake_build_llama_runner
256*523fa7a6SAndroid Build Coastguard Worker  # Run llama runner
257*523fa7a6SAndroid Build Coastguard Worker  NOW=$(date +"%H:%M:%S")
258*523fa7a6SAndroid Build Coastguard Worker  echo "Starting to run llama runner at ${NOW}"
259*523fa7a6SAndroid Build Coastguard Worker  # shellcheck source=/dev/null
260*523fa7a6SAndroid Build Coastguard Worker  cmake-out/examples/models/llama/llama_main ${RUNTIME_ARGS} > result.txt
261*523fa7a6SAndroid Build Coastguard Worker  NOW=$(date +"%H:%M:%S")
262*523fa7a6SAndroid Build Coastguard Worker  echo "Finished at ${NOW}"
263*523fa7a6SAndroid Build Coastguard Workerelse
264*523fa7a6SAndroid Build Coastguard Worker  echo "Invalid build tool ${BUILD_TOOL}. Only buck2 is supported atm"
265*523fa7a6SAndroid Build Coastguard Worker  exit 1
266*523fa7a6SAndroid Build Coastguard Workerfi
267*523fa7a6SAndroid Build Coastguard WorkerRESULT=$(cat result.txt)
268*523fa7a6SAndroid Build Coastguard Worker# Check results.
269*523fa7a6SAndroid Build Coastguard WorkerEXPECTED_PREFIX="Once upon a time,"
270*523fa7a6SAndroid Build Coastguard Worker# Expected result - may take too long to generate:
271*523fa7a6SAndroid Build Coastguard Worker# "Once upon a time, there was a little girl named Lily. She loved to play outside" ...
272*523fa7a6SAndroid Build Coastguard Workerif [[ "${RESULT}" == "${EXPECTED_PREFIX}"* ]]; then
273*523fa7a6SAndroid Build Coastguard Worker  echo "Expected result prefix: ${EXPECTED_PREFIX}"
274*523fa7a6SAndroid Build Coastguard Worker  echo "Actual result: ${RESULT}"
275*523fa7a6SAndroid Build Coastguard Worker  echo "Success"
276*523fa7a6SAndroid Build Coastguard Worker
277*523fa7a6SAndroid Build Coastguard Worker  prepare_artifacts_upload
278*523fa7a6SAndroid Build Coastguard Worker  cleanup_files
279*523fa7a6SAndroid Build Coastguard Workerelse
280*523fa7a6SAndroid Build Coastguard Worker  echo "Expected result prefix: ${EXPECTED_PREFIX}"
281*523fa7a6SAndroid Build Coastguard Worker  echo "Actual result: ${RESULT}"
282*523fa7a6SAndroid Build Coastguard Worker  echo "Failure; results not the same"
283*523fa7a6SAndroid Build Coastguard Worker
284*523fa7a6SAndroid Build Coastguard Worker  cleanup_files
285*523fa7a6SAndroid Build Coastguard Worker  exit 1
286*523fa7a6SAndroid Build Coastguard Workerfi
287