Ciphertext and Keys sizes benchmarks #11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Run sizes benchmarks on an instance and return parsed results to Slab CI bot. | |
| name: Ciphertext and Keys sizes benchmarks | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| # Monthly benchmarks will be triggered each 24th of the month at 1a.m. | |
| - cron: '0 1 24 * 6' | |
| 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 }} | |
| permissions: {} | |
| # zizmor: ignore[concurrency-limits] only Zama organization members and GitHub can trigger this workflow | |
| jobs: | |
| setup-instance: | |
| name: Setup instance (sizes-benchmarks) | |
| if: github.event_name == 'workflow_dispatch' || | |
| (github.event_name == 'schedule' && github.repository == 'zama-ai/tfhe-rs') | |
| 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: cpu-big | |
| sizes-benchmarks: | |
| name: Execute sizes client benchmarks | |
| needs: setup-instance | |
| if: needs.setup-instance.result != 'skipped' | |
| runs-on: ${{ needs.setup-instance.outputs.runner-name }} | |
| 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@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # zizmor: ignore[stale-action-refs] this action doesn't create releases | |
| with: | |
| toolchain: nightly | |
| - name: Measure public key and ciphertext sizes in HL Api | |
| run: | | |
| make measure_hlapi_compact_pk_ct_sizes | |
| - name: Parse key and ciphertext sizes results | |
| run: | | |
| python3 ./ci/benchmark_parser.py tfhe-benchmark/hlapi_ct_key_sizes.csv "${RESULTS_FILENAME}" \ | |
| --database tfhe_rs \ | |
| --hardware "m6i.32xlarge" \ | |
| --project-version "${COMMIT_HASH}" \ | |
| --branch "${REF_NAME}" \ | |
| --commit-date "${COMMIT_DATE}" \ | |
| --bench-date "${BENCH_DATE}" \ | |
| --object-sizes | |
| env: | |
| REF_NAME: ${{ github.ref_name }} | |
| - name: Measure key sizes in shortint | |
| run: | | |
| make measure_shortint_key_sizes | |
| - name: Parse key sizes results | |
| run: | | |
| python3 ./ci/benchmark_parser.py tfhe-benchmark/shortint_key_sizes.csv "${RESULTS_FILENAME}" \ | |
| --object-sizes \ | |
| --append-results | |
| - name: Upload parsed results artifact | |
| uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 | |
| with: | |
| name: ${{ github.sha }}_ct_key_sizes | |
| path: ${{ env.RESULTS_FILENAME }} | |
| - name: Checkout Slab repo | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 | |
| with: | |
| repository: zama-ai/slab | |
| path: slab | |
| persist-credentials: 'false' | |
| token: ${{ secrets.REPO_CHECKOUT_TOKEN }} | |
| - 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() }} | |
| continue-on-error: true | |
| uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 | |
| env: | |
| SLACK_COLOR: ${{ job.status }} | |
| SLACK_MESSAGE: "Sizes benchmarks finished with status: ${{ job.status }}. (${{ env.ACTION_RUN_URL }})" | |
| teardown-instance: | |
| name: Teardown instance (sizes-benchmarks) | |
| if: ${{ always() && needs.setup-instance.result == 'success' }} | |
| needs: [ setup-instance, sizes-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 (sizes-benchmarks) finished with status: ${{ job.status }}. (${{ env.ACTION_RUN_URL }})" |