Skip to content

Commit ee1ce67

Browse files
committed
chore(ci): try to run on a GPU
1 parent f6f0241 commit ee1ce67

2 files changed

Lines changed: 128 additions & 2 deletions

File tree

.github/workflows/ci_bench_commenter.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Comment benchmark results
22
on:
33
workflow_run:
4-
workflows: ["Benchmark PR"]
4+
workflows: ["Benchmark PR", "GPU Benchmark PR"]
55
types: [completed]
66

77
jobs:
@@ -31,4 +31,5 @@ jobs:
3131
auto-draft-on-regression: "false"
3232
label-before: base
3333
label-after: pr
34-
runner-info: ubuntu-24.04
34+
# Dynamically set the comment title based on which workflow triggered it
35+
runner-info: ${{ github.event.workflow_run.name == 'GPU Benchmark PR' && 'self-hosted-cuda' || 'ubuntu-24.04' }}

.github/workflows/gpu_bench.yaml

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
name: GPU Benchmark PR
2+
concurrency:
3+
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
4+
cancel-in-progress: true
5+
on:
6+
pull_request:
7+
8+
jobs:
9+
benchmark:
10+
runs-on: self-hosted
11+
# PRIMARY GATE: Block all forks. Only runs on branches pushed directly to the main repository.
12+
if: github.event.pull_request.head.repo.full_name == github.repository
13+
steps:
14+
# SECONDARY GATE: Require a specific repository secret to execute.
15+
- name: Authorize Execution
16+
env:
17+
SECURE_GATE: ${{ secrets.CUDA_RUNNER_SECRET }}
18+
run: |
19+
if [ -z "$SECURE_GATE" ]; then
20+
echo "::error::Unauthorized: Missing required repository secret."
21+
exit 1
22+
fi
23+
24+
- name: Checkout GROMACS
25+
uses: actions/checkout@v4
26+
with:
27+
fetch-depth: 0
28+
path: gromacs
29+
30+
- name: Checkout pixi_envs
31+
uses: actions/checkout@v4
32+
with:
33+
repository: HaoZeke/pixi_envs
34+
ref: main
35+
path: pixi_envs
36+
37+
- name: Place GROMACS inside pixi_envs layout
38+
run: ln -s ${{ github.workspace }}/gromacs pixi_envs/orgs/metatensor/gromacs/gromacs
39+
40+
- name: Install pixi
41+
uses: prefix-dev/setup-pixi@v0.8.1
42+
with:
43+
manifest-path: pixi_envs/orgs/metatensor/gromacs/pixi.toml
44+
environments: metatomic-cuda
45+
46+
- name: Install ASV
47+
working-directory: pixi_envs/orgs/metatensor/gromacs
48+
run: pixi run -e metatomic-cuda pip install asv
49+
50+
- name: Initialise ASV machine
51+
working-directory: pixi_envs/orgs/metatensor/gromacs
52+
run: pixi run -e metatomic-cuda bash -c "asv machine --yes"
53+
54+
- name: Record commit SHAs
55+
id: shas
56+
working-directory: gromacs
57+
run: |
58+
echo "pr=${{ github.event.pull_request.head.sha }}" >> "$GITHUB_OUTPUT"
59+
echo "base=$(git rev-parse origin/${{ github.event.pull_request.base.ref }})" >> "$GITHUB_OUTPUT"
60+
61+
# -- Benchmark base -----------------------------------------------
62+
- name: Build GROMACS (base)
63+
working-directory: pixi_envs/orgs/metatensor/gromacs
64+
run: |
65+
git -C ${{ github.workspace }}/gromacs checkout -f ${{ steps.shas.outputs.base }}
66+
pixi run -e metatomic-cuda gromk-tmpi Release
67+
68+
- name: Generate test model (base)
69+
working-directory: pixi_envs/orgs/metatensor/gromacs
70+
run: |
71+
pixi run -e metatomic-cuda python benchmarks/data/create_model.py
72+
mv model.pt benchmarks/data/
73+
74+
- name: Benchmark base
75+
id: bench_base
76+
continue-on-error: true
77+
working-directory: pixi_envs/orgs/metatensor/gromacs
78+
env:
79+
GMX_BIN: ${{ github.workspace }}/pixi_envs/orgs/metatensor/gromacs/.pixi/envs/metatomic-cuda/bin/gmx
80+
run: |
81+
pixi run -e metatomic-cuda bash -c \
82+
"asv run -E 'existing:\$(which python)' --set-commit-hash ${{ steps.shas.outputs.base }} --record-samples --quick"
83+
84+
# -- Benchmark PR HEAD --------------------------------------------
85+
- name: Build GROMACS (PR)
86+
working-directory: pixi_envs/orgs/metatensor/gromacs
87+
run: |
88+
git -C ${{ github.workspace }}/gromacs checkout -f ${{ steps.shas.outputs.pr }}
89+
pixi run -e metatomic-cuda gromk-tmpi Release
90+
91+
- name: Benchmark PR
92+
id: bench_pr
93+
continue-on-error: true
94+
working-directory: pixi_envs/orgs/metatensor/gromacs
95+
env:
96+
GMX_BIN: ${{ github.workspace }}/pixi_envs/orgs/metatensor/gromacs/.pixi/envs/metatomic-cuda/bin/gmx
97+
run: |
98+
pixi run -e metatomic-cuda bash -c \
99+
"asv run -E 'existing:\$(which python)' --set-commit-hash ${{ steps.shas.outputs.pr }} --record-samples --quick"
100+
101+
# -- Compare and upload -------------------------------------------
102+
- name: Generate comparison
103+
working-directory: pixi_envs/orgs/metatensor/gromacs
104+
run: |
105+
mkdir -p results
106+
pixi run -e metatomic-cuda bash -c \
107+
"asv compare ${{ steps.shas.outputs.base }} ${{ steps.shas.outputs.pr }}" > results/comparison.txt || true
108+
cat results/comparison.txt
109+
110+
- name: Write metadata
111+
working-directory: pixi_envs/orgs/metatensor/gromacs
112+
run: |
113+
cat > results/metadata.txt <<EOF
114+
base=${{ steps.shas.outputs.base }}
115+
contender=${{ steps.shas.outputs.pr }}
116+
pr=${{ github.event.pull_request.number }}
117+
EOF
118+
sed -i 's/^[[:space:]]*//' results/metadata.txt
119+
120+
- name: Upload benchmark results
121+
uses: actions/upload-artifact@v4
122+
with:
123+
name: benchmark-results
124+
path: pixi_envs/orgs/metatensor/gromacs/results/
125+
retention-days: 7

0 commit comments

Comments
 (0)