Skip to content

Execute ZKVM-Perf

Execute ZKVM-Perf #20

Workflow file for this run

name: Execute ZKVM-Perf
on:
workflow_dispatch:
inputs:
ami_id:
description: 'AMI ID'
required: true
type: string
default: 'ami-079a6a210557ef0e4'
provers:
description: 'Provers to use (comma-separated)'
required: true
type: string
default: 'sp1,risc0'
programs:
description: 'Programs to benchmark (comma-separated, leave empty for all)'
required: false
type: string
filename:
description: 'Filename for the benchmark'
required: true
default: 'benchmark'
type: string
trials:
description: 'Number of trials to run'
required: true
default: '1'
type: number
hashfns:
description: 'Hash functions to use (comma-separated)'
required: true
type: string
default: 'poseidon'
shard_sizes:
description: 'Shard sizes to use (comma-separated)'
required: true
default: '22'
type: string
sp1_ref:
description: 'SP1 reference (commit hash or branch name)'
required: false
type: string
default: '2e8b0a8'
pull_request:
branches: [main]
jobs:
matrix_prep:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- id: set-matrix
run: |
echo "matrix=$(jq -c . << EOF
{
"instance_config": [
{"type": "g6.16xlarge", "gpu": true},
{"type": "r7i.16xlarge", "gpu": false}
]
}
EOF
)" >> $GITHUB_OUTPUT
start-runner:
needs: matrix_prep
strategy:
matrix: ${{fromJson(needs.matrix_prep.outputs.matrix)}}
name: Start Self-Hosted EC2 Runner
runs-on: ubuntu-latest
outputs:
label: ${{ steps.start-ec2-runner.outputs.label }}
ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Start EC2 runner
id: "start-ec2-runner"
uses: "xJonathanLEI/ec2-github-runner@main"
with:
mode: start
github-token: ${{ secrets.GH_PAT }}
ec2-image-id: ${{ inputs.ami_id }}
ec2-instance-type: ${{ matrix.instance_config.type }}
subnet-id: ${{ secrets.AWS_SUBNET_ID }}
security-group-id: ${{ secrets.AWS_SG_ID }}
perf:
needs: start-runner
name: Run ZKVM-Perf on ${{ matrix.instance_config.type }}
runs-on: ${{ needs.start-runner.outputs.label }}
env:
CARGO_NET_GIT_FETCH_WITH_CLI: "true"
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: rust-cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
~/.rustup/
key: rust-1.79.0-${{ hashFiles('**/Cargo.toml') }}
restore-keys: rust-1.79.0-
- name: Update SP1 reference
run: |
chmod +x update_sp1_and_build.sh
SP1_REF=${{ inputs.sp1_ref }} RUN_BUILD=false ./update_sp1_and_build.sh
- name: Run docker build
run: |
docker build -t zkvm-perf --platform linux/amd64 -f Dockerfile.gpu --build-arg SP1_REF=${{ inputs.sp1_ref }} .
- name: Run Tests (docker)
run: |
docker run ${{ matrix.instance_config.gpu && '--gpus all' || '' }} --platform linux/amd64 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ./benchmarks:/usr/src/app/benchmarks \
-e RUST_BACKTRACE=full \
--network host \
zkvm-perf \
"python3 sweep.py --filename ${{ inputs.filename }} \
--trials ${{ inputs.trials }} \
${{ inputs.programs && format('--programs {0}', inputs.programs) || '' }} \
--provers ${{ inputs.provers }} \
--hashfns ${{ inputs.hashfns }} \
--shard-sizes ${{ inputs.shard_sizes }}"
- name: Print Results
run: |
cat benchmarks/*.csv
stop-runner:
name: Stop Self-Hosted EC2 Runner
needs:
- start-runner
- perf
runs-on: ubuntu-latest
if: always()
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Stop EC2 runner
uses: "xJonathanLEI/ec2-github-runner@main"
with:
mode: stop
github-token: ${{ secrets.GH_PAT }}
label: ${{ needs.start-runner.outputs.label }}
ec2-instance-id: ${{ needs.start-runner.outputs.ec2-instance-id }}