Skip to content

Commit b611d59

Browse files
helunwencserfacebook-github-bot
authored andcommitted
add CI job for phi-3-mini (#5532)
Summary: This PR adds a CI job for phi-3-mini Pull Request resolved: #5532 Test Plan: The CI Job is green: https://github.com/pytorch/executorch/actions/runs/10967809307/job/30458161933?pr=5532 Reviewed By: iseeyuan Differential Revision: D63157703 Pulled By: helunwencser fbshipit-source-id: fc7f54e166062443f396e7a304712f7b60e5db90
1 parent cab6335 commit b611d59

File tree

4 files changed

+157
-9
lines changed

4 files changed

+157
-9
lines changed

.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

.github/workflows/pull.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,3 +414,30 @@ jobs:
414414
PYTHON_EXECUTABLE=python bash examples/models/llama2/install_requirements.sh
415415
# Test llama2
416416
PYTHON_EXECUTABLE=python bash .ci/scripts/test_llama.sh stories110M "${BUILD_TOOL}" "${DTYPE}" "${MODE}"
417+
418+
test-phi-3-mini-runner-linux:
419+
name: test-phi-3-mini-runner-linux
420+
uses: pytorch/test-infra/.github/workflows/linux_job.yml@main
421+
strategy:
422+
fail-fast: false
423+
with:
424+
runner: linux.24xlarge
425+
docker-image: executorch-ubuntu-22.04-clang12
426+
submodules: 'true'
427+
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
428+
timeout: 90
429+
script: |
430+
# The generic Linux job chooses to use base env, not the one setup by the image
431+
CONDA_ENV=$(conda env list --json | jq -r ".envs | .[-1]")
432+
conda activate "${CONDA_ENV}"
433+
434+
PYTHON_EXECUTABLE=python bash .ci/scripts/setup-linux.sh "cmake"
435+
436+
# install pybind
437+
bash install_requirements.sh --pybind xnnpack
438+
439+
# install phi-3-mini requirements
440+
bash examples/models/phi-3-mini/install_requirements.sh
441+
442+
# run e2e (export, tokenizer and runner)
443+
PYTHON_EXECUTABLE=python bash .ci/scripts/test_phi_3_mini.sh
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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 -x
9+
10+
pip install transformers==4.44.2
11+
12+
pip install sentencepiece
13+
14+
pip list

examples/models/phi-3-mini/runner.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,8 @@ void Runner::generate(const std::string& prompt, std::size_t max_seq_len) {
5454
ET_CHECK_MSG(
5555
encode_res.error() == Error::Ok, "Failed to encode %s", prompt.c_str());
5656
auto input_tokens = encode_res.get();
57-
58-
std::cout << "Prefilling tokens ..." << std::endl;
59-
for (auto token : input_tokens) {
60-
std::cout << token << " ";
61-
}
62-
std::cout << std::endl;
63-
std::cout.flush();
6457
auto prev_token = input_tokens.back();
6558
auto current_token = prefill(input_tokens);
66-
67-
std::cout << "Generating tokens ..." << std::endl;
6859
std::cout << tokenizer_->decode(prev_token, current_token).get();
6960
std::cout.flush();
7061

0 commit comments

Comments
 (0)