mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-09 14:47:56 -05:00
The term "bpr" means Branch Protection Rule. It helps one to identify any job that must pass before being able to merge to the base branch.
228 lines
8.3 KiB
YAML
228 lines
8.3 KiB
YAML
# Run all signed integer benchmarks on an AWS instance and return parsed results to Slab CI bot.
|
|
name: benchmark_signed_integer
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
all_precisions:
|
|
description: "Run all precisions"
|
|
type: boolean
|
|
default: false
|
|
bench_type:
|
|
description: "Benchmarks type"
|
|
type: choice
|
|
default: latency
|
|
options:
|
|
- latency
|
|
- throughput
|
|
- both
|
|
|
|
schedule:
|
|
# Weekly benchmarks will be triggered each Saturday at 1a.m.
|
|
- cron: '0 1 * * 6'
|
|
# Quarterly benchmarks will be triggered right before end of quarter, the 25th of the current month at 4a.m.
|
|
# These benchmarks are far longer to execute hence the reason to run them only four time a year.
|
|
- cron: '0 4 25 MAR,JUN,SEP,DEC *'
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
RESULTS_FILENAME: parsed_benchmark_results_${{ github.sha }}.json
|
|
ACTION_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
RUST_BACKTRACE: "full"
|
|
RUST_MIN_STACK: "8388608"
|
|
SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }}
|
|
SLACK_ICON: https://pbs.twimg.com/profile_images/1274014582265298945/OjBKP9kn_400x400.png
|
|
SLACK_USERNAME: ${{ secrets.BOT_USERNAME }}
|
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
|
FAST_BENCH: TRUE
|
|
|
|
|
|
permissions: {}
|
|
|
|
jobs:
|
|
prepare-matrix:
|
|
name: benchmark_signed_integer/prepare-matrix
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name != 'schedule' ||
|
|
(github.event_name == 'schedule' && github.repository == 'zama-ai/tfhe-rs')
|
|
outputs:
|
|
op_flavor: ${{ steps.set_op_flavor.outputs.op_flavor }}
|
|
bench_type: ${{ steps.set_bench_type.outputs.bench_type }}
|
|
steps:
|
|
- name: Weekly benchmarks
|
|
if: github.event.schedule == '0 1 * * 6'
|
|
run: |
|
|
echo "OP_FLAVOR=[\"default\"]" >> "${GITHUB_ENV}"
|
|
|
|
- name: Quarterly benchmarks
|
|
if: github.event.schedule == '0 4 25 MAR,JUN,SEP,DEC *'
|
|
run: |
|
|
echo "OP_FLAVOR=[\"default\", \"unchecked\"]" >> "${GITHUB_ENV}"
|
|
|
|
- name: Set benchmark types
|
|
if: github.event_name == 'workflow_dispatch'
|
|
run: |
|
|
echo "OP_FLAVOR=[\"default\"]" >> "${GITHUB_ENV}"
|
|
if [[ "${INPUTS_BENCH_TYPE}" == "both" ]]; then
|
|
echo "BENCH_TYPE=[\"latency\", \"throughput\"]" >> "${GITHUB_ENV}"
|
|
else
|
|
echo "BENCH_TYPE=[\"${INPUTS_BENCH_TYPE}\"]" >> "${GITHUB_ENV}"
|
|
fi
|
|
env:
|
|
INPUTS_BENCH_TYPE: ${{ inputs.bench_type }}
|
|
|
|
- name: Default benchmark type
|
|
if: github.event_name != 'workflow_dispatch'
|
|
run: |
|
|
echo "BENCH_TYPE=[\"latency\"]" >> "${GITHUB_ENV}"
|
|
|
|
- name: Set operation flavor output
|
|
id: set_op_flavor
|
|
run: | # zizmor: ignore[template-injection] this env variable is safe
|
|
echo "op_flavor=${{ toJSON(env.OP_FLAVOR) }}" >> "${GITHUB_OUTPUT}"
|
|
|
|
- name: Set benchmark types output
|
|
id: set_bench_type
|
|
run: | # zizmor: ignore[template-injection] this env variable is safe
|
|
echo "bench_type=${{ toJSON(env.BENCH_TYPE) }}" >> "${GITHUB_OUTPUT}"
|
|
|
|
setup-instance:
|
|
name: benchmark_signed_integer/setup-instance
|
|
needs: prepare-matrix
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
runner-name: ${{ steps.start-instance.outputs.label }}
|
|
steps:
|
|
- name: Start instance
|
|
id: start-instance
|
|
uses: zama-ai/slab-github-runner@79939325c3c429837c10d6041e4fd8589d328bac
|
|
with:
|
|
mode: start
|
|
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
|
|
slab-url: ${{ secrets.SLAB_BASE_URL }}
|
|
job-secret: ${{ secrets.JOB_SECRET }}
|
|
backend: aws
|
|
profile: bench
|
|
|
|
signed-integer-benchmarks:
|
|
name: benchmark_signed_integer/signed-integer-benchmarks
|
|
needs: [ prepare-matrix, setup-instance ]
|
|
runs-on: ${{ needs.setup-instance.outputs.runner-name }}
|
|
concurrency:
|
|
group: ${{ github.workflow_ref }}
|
|
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
|
timeout-minutes: 1440 # 24 hours
|
|
strategy:
|
|
max-parallel: 1
|
|
matrix:
|
|
command: [ integer, integer_multi_bit ]
|
|
op_flavor: ${{ fromJSON(needs.prepare-matrix.outputs.op_flavor) }}
|
|
bench_type: ${{ fromJSON(needs.prepare-matrix.outputs.bench_type) }}
|
|
steps:
|
|
- name: Checkout tfhe-rs repo with tags
|
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
|
with:
|
|
fetch-depth: 0
|
|
persist-credentials: 'false'
|
|
token: ${{ secrets.REPO_CHECKOUT_TOKEN }}
|
|
|
|
- name: Get benchmark details
|
|
run: |
|
|
COMMIT_DATE=$(git --no-pager show -s --format=%cd --date=iso8601-strict "${SHA}");
|
|
{
|
|
echo "BENCH_DATE=$(date --iso-8601=seconds)";
|
|
echo "COMMIT_DATE=${COMMIT_DATE}";
|
|
echo "COMMIT_HASH=$(git describe --tags --dirty)";
|
|
} >> "${GITHUB_ENV}"
|
|
env:
|
|
SHA: ${{ github.sha }}
|
|
|
|
- name: Install rust
|
|
uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # zizmor: ignore[stale-action-refs] this action doesn't create releases
|
|
with:
|
|
toolchain: nightly
|
|
|
|
- name: Checkout Slab repo
|
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
|
with:
|
|
repository: zama-ai/slab
|
|
path: slab
|
|
persist-credentials: 'false'
|
|
token: ${{ secrets.REPO_CHECKOUT_TOKEN }}
|
|
|
|
- name: Should run benchmarks with all precisions
|
|
if: inputs.all_precisions
|
|
run: |
|
|
echo "FAST_BENCH=FALSE" >> "${GITHUB_ENV}"
|
|
|
|
- name: Run benchmarks with AVX512
|
|
run: |
|
|
make BENCH_OP_FLAVOR="${OP_FLAVOR}" BENCH_TYPE="${BENCH_TYPE}" bench_signed_"${BENCH_COMMAND}"
|
|
env:
|
|
OP_FLAVOR: ${{ matrix.op_flavor }}
|
|
BENCH_TYPE: ${{ matrix.bench_type }}
|
|
BENCH_COMMAND: ${{ matrix.command }}
|
|
|
|
- name: Parse results
|
|
run: |
|
|
python3 ./ci/benchmark_parser.py target/criterion "${RESULTS_FILENAME}" \
|
|
--database tfhe_rs \
|
|
--hardware "hpc7a.96xlarge" \
|
|
--project-version "${COMMIT_HASH}" \
|
|
--branch "${REF_NAME}" \
|
|
--commit-date "${COMMIT_DATE}" \
|
|
--bench-date "${BENCH_DATE}" \
|
|
--walk-subdirs \
|
|
--name-suffix avx512 \
|
|
--bench-type "${BENCH_TYPE}"
|
|
env:
|
|
REF_NAME: ${{ github.ref_name }}
|
|
BENCH_TYPE: ${{ matrix.bench_type }}
|
|
|
|
- name: Upload parsed results artifact
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
|
|
with:
|
|
name: ${{ github.sha }}_${{ matrix.command }}_${{ matrix.op_flavor }}_${{ matrix.bench_type }}
|
|
path: ${{ env.RESULTS_FILENAME }}
|
|
|
|
- name: Send data to Slab
|
|
shell: bash
|
|
run: |
|
|
python3 slab/scripts/data_sender.py "${RESULTS_FILENAME}" "${JOB_SECRET}" \
|
|
--slab-url "${SLAB_URL}"
|
|
env:
|
|
JOB_SECRET: ${{ secrets.JOB_SECRET }}
|
|
SLAB_URL: ${{ secrets.SLAB_URL }}
|
|
|
|
- name: Slack Notification
|
|
if: ${{ failure() || (cancelled() && github.event_name != 'pull_request') }}
|
|
continue-on-error: true
|
|
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661
|
|
env:
|
|
SLACK_COLOR: ${{ job.status }}
|
|
SLACK_MESSAGE: "Signed integer full benchmarks finished with status: ${{ job.status }}. (${{ env.ACTION_RUN_URL }})"
|
|
|
|
teardown-instance:
|
|
name: benchmark_signed_integer/teardown-instance
|
|
if: ${{ always() && needs.setup-instance.result == 'success' }}
|
|
needs: [ setup-instance, signed-integer-benchmarks ]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Stop instance
|
|
id: stop-instance
|
|
uses: zama-ai/slab-github-runner@79939325c3c429837c10d6041e4fd8589d328bac
|
|
with:
|
|
mode: stop
|
|
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
|
|
slab-url: ${{ secrets.SLAB_BASE_URL }}
|
|
job-secret: ${{ secrets.JOB_SECRET }}
|
|
label: ${{ needs.setup-instance.outputs.runner-name }}
|
|
|
|
- name: Slack Notification
|
|
if: ${{ failure() }}
|
|
continue-on-error: true
|
|
uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661
|
|
env:
|
|
SLACK_COLOR: ${{ job.status }}
|
|
SLACK_MESSAGE: "Instance teardown (signed-integer-benchmarks) finished with status: ${{ job.status }}. (${{ env.ACTION_RUN_URL }})"
|