Skip to content

Commit 383aa70

Browse files
authored
Use a template for Apple test spec (#7151)
* Use a template for Apple test spec * Copy the model * Clean up upload-apple-test-specs
1 parent 3a088ce commit 383aa70

File tree

3 files changed

+75
-113
lines changed

3 files changed

+75
-113
lines changed

.github/workflows/apple-perf.yml

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@ name: apple-perf
33
on:
44
schedule:
55
- cron: 0 1 * * *
6+
pull_request:
7+
paths:
8+
- .github/workflows/apple-perf.yml
9+
- extension/benchmark/apple/Benchmark/default-ios-device-farm-appium-test-spec.yml.j2
10+
push:
11+
branches:
12+
- main
13+
paths:
14+
- .github/workflows/apple-perf.yml
15+
- extension/benchmark/apple/Benchmark/default-ios-device-farm-appium-test-spec.yml.j2
616
# Note: GitHub has an upper limit of 10 inputs
717
workflow_dispatch:
818
inputs:
@@ -25,10 +35,6 @@ on:
2535
description: The list of configs used the benchmark
2636
required: false
2737
type: string
28-
test_spec:
29-
description: The test spec to drive the test on AWS devices
30-
required: false
31-
type: string
3238
workflow_call:
3339
inputs:
3440
models:
@@ -50,10 +56,6 @@ on:
5056
description: The list of configs used the benchmark
5157
required: false
5258
type: string
53-
test_spec:
54-
description: The test spec to drive the test on AWS devices
55-
required: false
56-
type: string
5759

5860
concurrency:
5961
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref_name }}-${{ github.ref_type == 'branch' && github.sha }}-${{ github.event_name == 'workflow_dispatch' }}-${{ github.event_name == 'schedule' }}
@@ -74,9 +76,9 @@ jobs:
7476
# Separate default values from the workflow dispatch. To ensure defaults are accessible
7577
# during scheduled runs and to provide flexibility for different defaults between
7678
# on-demand and periodic benchmarking.
77-
CRON_DEFAULT_MODELS: "stories110M,mv3,mv2,ic4,ic3,resnet50,edsr,mobilebert,w2l"
78-
CRON_DEFAULT_DEVICES: "apple_iphone_15"
79-
CRON_DEFAULT_DELEGATES: "xnnpack,coreml,mps"
79+
CRON_DEFAULT_MODELS: ${{ github.event_name == 'schedule' && 'stories110M,mv3,mv2,ic4,ic3,resnet50,edsr,mobilebert,w2l' || 'stories110M' }}
80+
CRON_DEFAULT_DEVICES: apple_iphone_15
81+
CRON_DEFAULT_DELEGATES: ${{ github.event_name == 'schedule' && 'xnnpack,coreml,mps' || 'xnnpack' }}
8082
run: |
8183
set -ex
8284
MODELS="${{ inputs.models }}"
@@ -114,6 +116,41 @@ jobs:
114116
echo "devices=$(echo "$MAPPED_ARNS_JSON" | jq -c .)" >> $GITHUB_OUTPUT
115117
echo "delegates=$(echo $DELEGATES | jq -Rc 'split(",")')" >> $GITHUB_OUTPUT
116118
119+
prepare-test-specs:
120+
runs-on: linux.2xlarge
121+
needs: set-parameters
122+
strategy:
123+
matrix:
124+
model: ${{ fromJson(needs.set-parameters.outputs.models) }}
125+
delegate: ${{ fromJson(needs.set-parameters.outputs.delegates) }}
126+
fail-fast: false
127+
steps:
128+
- uses: actions/checkout@v3
129+
130+
- name: Prepare the spec
131+
shell: bash
132+
working-directory: extension/benchmark/apple/Benchmark
133+
run: |
134+
set -eux
135+
# The model will be exported in the next step to this S3 path
136+
MODEL_PATH="https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/${{ matrix.model }}_${{ matrix.delegate }}/model.zip"
137+
# We could write a script to properly use jinja here, but there is only one variable,
138+
# so let's just sed it
139+
sed -i -e 's,{{ model_path }},'"${MODEL_PATH}"',g' default-ios-device-farm-appium-test-spec.yml.j2
140+
cp default-ios-device-farm-appium-test-spec.yml.j2 default-ios-device-farm-appium-test-spec.yml
141+
# Just print the test spec for debugging
142+
cat default-ios-device-farm-appium-test-spec.yml
143+
144+
- name: Upload the spec
145+
uses: seemethere/upload-artifact-s3@v5
146+
with:
147+
s3-bucket: gha-artifacts
148+
s3-prefix: |
149+
${{ github.repository }}/${{ github.run_id }}/artifacts/${{ matrix.model }}_${{ matrix.delegate }}
150+
retention-days: 1
151+
if-no-files-found: error
152+
path: extension/benchmark/apple/Benchmark/default-ios-device-farm-appium-test-spec.yml
153+
117154
export-models:
118155
name: export-models
119156
uses: pytorch/test-infra/.github/workflows/macos_job.yml@main
@@ -173,10 +210,19 @@ jobs:
173210
DELEGATE_CONFIG="mps"
174211
fi
175212
PYTHON_EXECUTABLE=python ${CONDA_RUN} --no-capture-output \
176-
bash .ci/scripts/test_llama.sh "${{ matrix.model }}" "${BUILD_MODE}" "${DTYPE}" "${DELEGATE_CONFIG}" "${ARTIFACTS_DIR_NAME}"
213+
bash .ci/scripts/test_llama.sh \
214+
-model "${{ matrix.model }}" \
215+
-build_tool "${BUILD_MODE}" \
216+
-dtype "${DTYPE}" \
217+
-mode "${DELEGATE_CONFIG}" \
218+
-upload "${ARTIFACTS_DIR_NAME}"
177219
else
178220
PYTHON_EXECUTABLE=python ${CONDA_RUN} --no-capture-output \
179-
bash .ci/scripts/test_model.sh "${{ matrix.model }}" "${BUILD_MODE}" "${{ matrix.delegate }}" "${ARTIFACTS_DIR_NAME}"
221+
bash .ci/scripts/test_model.sh \
222+
"${{ matrix.model }}" \
223+
"${BUILD_MODE}" \
224+
"${{ matrix.delegate }}" \
225+
"${ARTIFACTS_DIR_NAME}"
180226
fi
181227
echo "::endgroup::"
182228
@@ -282,6 +328,7 @@ jobs:
282328
if: always()
283329
needs:
284330
- set-parameters
331+
- prepare-test-specs
285332
- upload-benchmark-app
286333
- export-models
287334
permissions:
@@ -307,8 +354,7 @@ jobs:
307354
# Uploaded to S3 from the previous job
308355
ios-ipa-archive: https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/Benchmark.ipa
309356
ios-xctestrun-zip: https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/Benchmark.xctestrun.zip
310-
test-spec: ${{ inputs.test_spec || 'https://ossci-ios.s3.amazonaws.com/executorch/default-ios-device-farm-appium-test-spec.yml' }}
311-
extra-data: https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/${{ matrix.model }}_${{ matrix.delegate }}/model.zip
357+
test-spec: https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/${{ matrix.model }}_${{ matrix.delegate }}/default-ios-device-farm-appium-test-spec.yml
312358

313359
upload-benchmark-results:
314360
needs:

.github/workflows/upload-apple-test-specs.yml

Lines changed: 0 additions & 95 deletions
This file was deleted.

extension/benchmark/apple/Benchmark/default-ios-device-farm-appium-test-spec.yml renamed to extension/benchmark/apple/Benchmark/default-ios-device-farm-appium-test-spec.yml.j2

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,22 @@ phases:
1010
# The pre-test phase includes commands that setup your test environment.
1111
pre_test:
1212
commands:
13+
# Download the model from S3
14+
- curl -s --fail '{{ model_path }}' -o model.zip
15+
- unzip model.zip && ls -la
16+
17+
# Extract the app
18+
- unzip $DEVICEFARM_APP_PATH -d /tmp
19+
20+
# Copy the model
21+
- mkdir -p /tmp/Payload/Benchmark.app/aatp/data
22+
- cp *.bin /tmp/Payload/Benchmark.app/aatp/data
23+
- cp *.pte /tmp/Payload/Benchmark.app/aatp/data
24+
1325
- mkdir $DEVICEFARM_TEST_PACKAGE_PATH/Debug-iphoneos
1426
- mkdir $DEVICEFARM_TEST_PACKAGE_PATH/Release-iphoneos
15-
- unzip $DEVICEFARM_APP_PATH -d /tmp
16-
- cp -r /tmp/Payload/*.app $DEVICEFARM_TEST_PACKAGE_PATH/Debug-iphoneos/
17-
- cp -r /tmp/Payload/*.app $DEVICEFARM_TEST_PACKAGE_PATH/Release-iphoneos/
27+
- cp -r /tmp/Payload/Benchmark.app $DEVICEFARM_TEST_PACKAGE_PATH/Debug-iphoneos/
28+
- cp -r /tmp/Payload/Benchmark.app $DEVICEFARM_TEST_PACKAGE_PATH/Release-iphoneos/
1829

1930
# The test phase includes commands that run your test suite execution.
2031
test:

0 commit comments

Comments
 (0)