Skip to content

Commit e6d85ac

Browse files
authored
Merge pull request #8 from ReactiveBayes/add-rpi5-benchmark-runner
Add self-hosted Raspberry Pi 5 as a benchmark target
2 parents dc11414 + b9fca10 commit e6d85ac

10 files changed

Lines changed: 62 additions & 13 deletions

File tree

.github/workflows/benchmark.yml

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ concurrency:
2222
group: benchmark
2323
cancel-in-progress: false
2424

25+
# Run JS-based actions (checkout, setup-julia, and the actions/cache + pyTooling
26+
# steps vendored inside julia-actions/cache) on Node 24 — Node 20 is deprecated.
27+
env:
28+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
29+
2530
jobs:
2631
tests:
2732
name: Gate — full test suite
@@ -30,18 +35,24 @@ jobs:
3035
contents: read
3136

3237
bench:
33-
name: Benchmark (Julia ${{ matrix.julia }})
38+
name: Benchmark (${{ matrix.hardware }} · Julia ${{ matrix.julia }})
3439
needs: tests
35-
runs-on: ubuntu-latest
40+
runs-on: ${{ matrix.runner }}
3641
permissions:
3742
contents: write # pushes result files
3843
strategy:
3944
fail-fast: false
40-
max-parallel: 1 # serialize commits between Julia versions
45+
max-parallel: 1 # serialize commits across every hardware/Julia leg
4146
matrix:
42-
julia: ["1.10", "1.11", "1.12"]
47+
include:
48+
- { julia: "1.10", runner: ubuntu-latest, hardware: github-actions-ubuntu }
49+
- { julia: "1.11", runner: ubuntu-latest, hardware: github-actions-ubuntu }
50+
- { julia: "1.12", runner: ubuntu-latest, hardware: github-actions-ubuntu }
51+
- { julia: "1.10", runner: [self-hosted, ARM64, pi5], hardware: rpi5-8gb }
52+
- { julia: "1.11", runner: [self-hosted, ARM64, pi5], hardware: rpi5-8gb }
53+
- { julia: "1.12", runner: [self-hosted, ARM64, pi5], hardware: rpi5-8gb }
4354
env:
44-
RXBENCH_HARDWARE_ID: github-actions-ubuntu
55+
RXBENCH_HARDWARE_ID: ${{ matrix.hardware }}
4556
USE_DEV: "false"
4657
LOG_USING_RXINFER: "false"
4758
JULIA_FASTCHOLESKY_THROW_ERROR_NON_SYMMETRIC: "1"
@@ -90,7 +101,7 @@ jobs:
90101
echo "no new results"
91102
exit 0
92103
fi
93-
git commit -m "bench: results for ${GITHUB_SHA::7} (julia ${{ matrix.julia }}) [skip ci]"
104+
git commit -m "bench: results for ${GITHUB_SHA::7} (${{ matrix.hardware }} julia ${{ matrix.julia }}) [skip ci]"
94105
# Another matrix leg may have pushed first. Result files live in disjoint
95106
# folders, but the regenerated index.json/mirrors can conflict — resolve by
96107
# regenerating them from the union (they are wholesale-generated artifacts).

.github/workflows/pages.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ concurrency:
2222
group: pages
2323
cancel-in-progress: true
2424

25+
# Run JS-based actions on Node 24 — Node 20 is deprecated.
26+
env:
27+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
28+
2529
jobs:
2630
build:
2731
runs-on: ubuntu-latest

.github/workflows/test.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ on:
1717
permissions:
1818
contents: read
1919

20+
# Run JS-based actions (checkout, setup-julia, setup-node, and the actions/cache +
21+
# pyTooling steps vendored inside julia-actions/cache) on Node 24 — Node 20 is deprecated.
22+
env:
23+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
24+
2025
jobs:
2126
harness:
2227
name: Harness (Julia ${{ matrix.julia }})

IDEA.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ pooled samples.
4545

4646
**CI** (`.github/workflows/`): every Monday, benchmarks run on GitHub Actions for several Julia
4747
versions (always against the latest released RxInfer via `Pkg.update()`), and a bot commits the
48-
new/merged result files. Weekly tests keep everything honest. Later, self-hosted runners
49-
(Raspberry Pi and other hardware) add their own result folders — different hardware runs at
50-
different times, and the data format doesn't care.
48+
new/merged result files. Weekly tests keep everything honest. A self-hosted Raspberry Pi 5
49+
(`rpi5-8gb`, ARM64) runs the same suite on the same schedule into its own result folder — and
50+
further self-hosted hardware can be added the same way; different hardware runs at different
51+
times, and the data format doesn't care.
5152

5253
**Dashboard** (`frontend/`): Next.js + Tailwind + shadcn (static export, Julia-colored theme),
5354
fetching the data at runtime from this repo's `data/` folder on GitHub — so new benchmark results

benchmarks/harness/test/test_config.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ const REPO_ROOT = normpath(joinpath(@__DIR__, "..", "..", ".."))
6060
@testset "hardware: real repo file parses" begin
6161
hw = Harness.load_hardware(joinpath(REPO_ROOT, "data", "hardware.yml"))
6262
@test haskey(hw, "github-actions-ubuntu")
63+
@test haskey(hw, "rpi5-8gb")
64+
@test hw["rpi5-8gb"]["label"] == "Raspberry Pi 5 (8GB)"
65+
@test hw["rpi5-8gb"]["arch"] == "aarch64"
6366
end
6467

6568
@testset "hardware: duplicate ids rejected" begin

data/hardware.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99
"notes": "Shared CI runner; absolute numbers are noisy, trends are meaningful.",
1010
"os": "linux"
1111
},
12+
{
13+
"label": "Raspberry Pi 5 (8GB)",
14+
"kind": "self-hosted",
15+
"arch": "aarch64",
16+
"id": "rpi5-8gb",
17+
"notes": "Self-hosted Raspberry Pi 5 (8GB) ARM64 runner; tracks RxInfer performance on embedded/ARM hardware.",
18+
"os": "linux"
19+
},
1220
{
1321
"label": "Local development machine",
1422
"kind": "local",

data/hardware.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ hardware:
1111
arch: x86_64
1212
notes: Shared CI runner; absolute numbers are noisy, trends are meaningful.
1313

14+
- id: rpi5-8gb
15+
label: Raspberry Pi 5 (8GB)
16+
kind: self-hosted
17+
os: linux
18+
arch: aarch64
19+
notes: Self-hosted Raspberry Pi 5 (8GB) ARM64 runner; tracks RxInfer performance on embedded/ARM hardware.
20+
1421
- id: local-dev
1522
label: Local development machine
1623
kind: local

data/seed/hardware.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99
"notes": "Shared CI runner; absolute numbers are noisy, trends are meaningful.",
1010
"os": "linux"
1111
},
12+
{
13+
"label": "Raspberry Pi 5 (8GB)",
14+
"kind": "self-hosted",
15+
"arch": "aarch64",
16+
"id": "rpi5-8gb",
17+
"notes": "Self-hosted Raspberry Pi 5 (8GB) ARM64 runner; tracks RxInfer performance on embedded/ARM hardware.",
18+
"os": "linux"
19+
},
1220
{
1321
"label": "Local development machine",
1422
"kind": "local",

data/seed/results/index.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"generated_utc": "2026-06-03T14:39:51Z",
2+
"generated_utc": "2026-06-16T14:07:55Z",
33
"schema_version": 2,
44
"hardware": [
55
{

design/architecture.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ results appear without a rebuild. `pages.yml` only reacts to `frontend/**` chang
6060
## Multi-hardware, multi-Julia
6161

6262
- Hardware targets are registered in `data/hardware.yml`; a runner identifies itself via the
63-
`RXBENCH_HARDWARE_ID` env var. GitHub Actions runners now; self-hosted (Raspberry Pi, etc.)
64-
later — each gets its own results folder, runs on its own schedule, and the data format never
65-
assumes aligned timelines.
63+
`RXBENCH_HARDWARE_ID` env var. Two targets are live today: the shared GitHub Actions runner
64+
(`github-actions-ubuntu`, x86_64) and a self-hosted Raspberry Pi 5 (`rpi5-8gb`, ARM64,
65+
targeted in `benchmark.yml` via the `[self-hosted, ARM64, pi5]` labels). Each gets its own
66+
results folder, runs on its own schedule, and the data format never assumes aligned timelines —
67+
so adding further self-hosted hardware is purely additive.
6668
- Benchmarks run for a **fixed list of Julia versions** (currently 1.10, 1.11, 1.12 — extend the
6769
matrix in `.github/workflows/` when a new minor lands), always against the **latest released
6870
RxInfer**. Each (hardware, Julia minor) pair has its own results subfolder; the dashboard lets

0 commit comments

Comments
 (0)