Skip to content

Commit

Permalink
refactor to properly use matrix
Browse files Browse the repository at this point in the history
  • Loading branch information
yourbuddyconner committed Sep 19, 2024
1 parent 7638370 commit 485ff78
Show file tree
Hide file tree
Showing 3 changed files with 252 additions and 169 deletions.
159 changes: 159 additions & 0 deletions .github/workflows/adhoc-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
name: Execute ZKVM-Perf (Matrix)

on:
workflow_dispatch:
inputs:
provers:
description: 'Provers to use (comma-separated)'
required: false
type: string
default: 'sp1'
programs:
description: 'Programs to benchmark (comma-separated)'
required: false
type: string
default: 'loop,fibonacci,tendermint,reth1,reth2'
filename:
description: 'Filename for the benchmark'
required: false
type: string
default: 'benchmark'
trials:
description: 'Number of trials to run'
required: false
type: string
default: '1'
sp1_ref:
description: 'SP1 reference (commit hash or branch name)'
required: false
type: string
default: '2e8b0a8'
additional_params:
description: 'Additional parameters as JSON'
required: false
type: string
default: '{"hashfns":"poseidon","shard_sizes":"22"}'

jobs:
run-benchmarks:
strategy:
matrix:
include:
- instance_type: g6.16xlarge
enable_gpu: true
ami_id: ami-079a6a210557ef0e4
- instance_type: r7i.16xlarge
enable_gpu: false
ami_id: ami-079a6a210557ef0e4

name: Run on ${{ matrix.instance_type }}
runs-on: ubuntu-latest

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
# Must use personal access token here as `GITHUB_TOKEN` does not have access to runners.
# Use a fine-grained token with these permissions to at least this repository:
# - Administration: Read and write
# - Contents: Read and write
# - Metadata: Read-only
# - Workflows: Read and write
# - Actions: Read and write
github-token: ${{ secrets.GH_PAT }}
ec2-image-id: ${{ matrix.ami_id }}
ec2-instance-type: ${{ matrix.instance_type }}
subnet-id: ${{ secrets.AWS_SUBNET_ID }}
security-group-id: ${{ secrets.AWS_SG_ID }}
storage-size: 1024

- name: Run benchmarks
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GH_PAT }}
script: |
const runnerName = '${{ steps.start-ec2-runner.outputs.label }}';
const maxAttempts = 5;
const initialDelay = 30000; // 30 seconds
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
console.log(`Attempt ${attempt} to trigger benchmark workflow`);
await new Promise(resolve => setTimeout(resolve, initialDelay * attempt));
try {
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'run-on-runner.yml',
ref: context.ref,
inputs: {
runner_name: runnerName,
instance_type: '${{ matrix.instance_type }}',
enable_gpu: '${{ matrix.enable_gpu }}',
provers: '${{ inputs.provers }}',
programs: '${{ inputs.programs }}',
filename: '${{ inputs.filename }}_${{ matrix.instance_type }}',
trials: '${{ inputs.trials }}',
sp1_ref: '${{ inputs.sp1_ref }}',
additional_params: '${{ inputs.additional_params }}'
}
});
console.log('Benchmark workflow triggered successfully');
break;
} catch (error) {
console.log(`Failed to trigger workflow: ${error.message}`);
if (attempt === maxAttempts) {
core.setFailed('Failed to trigger benchmark workflow after multiple attempts');
}
}
}
- name: Wait for benchmark completion
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GH_PAT }}
script: |
const maxWaitTime = 3600000; // 1 hour in milliseconds
const checkInterval = 60000; // 1 minute in milliseconds
const startTime = Date.now();
while (true) {
const runs = await github.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'run-on-runner.yml',
status: 'in_progress'
});
if (runs.data.total_count === 0) {
console.log('Benchmark workflow completed');
break;
}
if (Date.now() - startTime > maxWaitTime) {
core.setFailed('Benchmark workflow did not complete within the maximum wait time');
break;
}
console.log('Waiting for benchmark to complete...');
await new Promise(resolve => setTimeout(resolve, checkInterval));
}
- name: Stop EC2 runner
if: always()
uses: xJonathanLEI/ec2-github-runner@main
with:
mode: stop
github-token: ${{ secrets.GH_PAT }}
label: ${{ steps.start-ec2-runner.outputs.label }}
ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }}
169 changes: 0 additions & 169 deletions .github/workflows/adhoc.yml

This file was deleted.

Loading

0 comments on commit 485ff78

Please sign in to comment.