From f6eaf619e9f750b294ce919530c7828a5cb7dfc5 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Fri, 12 Jun 2026 11:38:00 +0200 Subject: [PATCH 1/4] Update Buildkite pipeline for the new JuliaGPU cluster. Switch to the per-backend queues of the new JuliaGPU cluster. Co-Authored-By: Claude Fable 5 --- .buildkite/pipeline-julia.yml | 50 +++++++++++++++++++++++++++++++++++ .buildkite/pipeline.yml | 6 ----- .buildkite/runbenchmarks.yml | 49 +++++++++------------------------- .buildkite/runtests.yml | 37 +++----------------------- 4 files changed, 66 insertions(+), 76 deletions(-) create mode 100644 .buildkite/pipeline-julia.yml diff --git a/.buildkite/pipeline-julia.yml b/.buildkite/pipeline-julia.yml new file mode 100644 index 0000000..dc8f72d --- /dev/null +++ b/.buildkite/pipeline-julia.yml @@ -0,0 +1,50 @@ +steps: + - label: "Metal: Julia {{matrix.version}}" + matrix: + setup: + version: + - "1.10" + plugins: + - JuliaCI/julia#v1: + version: "{{matrix.version}}" + - JuliaCI/julia-coverage#v1: + codecov: true + command: | + julia -e 'using Pkg + + println("--- :julia: Instantiating environment") + Pkg.add("Metal") + Pkg.develop(path=".") + + println("+++ :julia: Running tests") + Pkg.test("DistanceTransforms"; coverage=true, test_args=["Metal"])' + agents: + queue: "juliaecosystem" + os: "macos" + arch: "aarch64" + if: build.message !~ /\[skip tests\]/ + timeout_in_minutes: 10 + + - label: "Metal: Run Benchmarks" + key: "metal-benchmarks" + plugins: + - JuliaCI/julia#v1: + version: "1.10" + command: | + julia --project=benchmarks -e ' + using Pkg; + Pkg.instantiate(); + Pkg.develop(path=pwd()); + Pkg.add("Metal"); + ' + julia --project=benchmarks benchmarks/runbenchmarks.jl + artifacts: + - "benchmarks/results/Metalbenchmarks.json" + agents: + queue: "juliaecosystem" + os: "macos" + arch: "aarch64" + env: + BENCHMARK_GROUP: Metal + if: build.message !~ /\[skip benchmarks\]/ + timeout_in_minutes: 12 diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 6490309..80cf236 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,13 +1,9 @@ steps: - label: ":pipeline: Launch Tests" command: buildkite-agent pipeline upload .buildkite/runtests.yml - agents: - queue: "juliagpu" - label: ":pipeline: Launch Benchmarks" if: build.message !~ /skip benchmarks/ - agents: - queue: "juliagpu" plugins: - monorepo-diff#v1.0.1: diff: "git diff --name-only HEAD~1" @@ -20,5 +16,3 @@ steps: - "Project.toml" config: command: "buildkite-agent pipeline upload .buildkite/runbenchmarks.yml" - agents: - queue: "juliagpu" \ No newline at end of file diff --git a/.buildkite/runbenchmarks.yml b/.buildkite/runbenchmarks.yml index ac185e1..809edc4 100644 --- a/.buildkite/runbenchmarks.yml +++ b/.buildkite/runbenchmarks.yml @@ -16,7 +16,8 @@ steps: artifacts: - "benchmarks/results/CPUbenchmarks1threads.json" agents: - queue: "benchmark" + queue: "cuda" + benchmark: "*" env: BENCHMARK_GROUP: CPU JULIA_NUM_THREADS: 1 @@ -38,7 +39,8 @@ steps: artifacts: - "benchmarks/results/CPUbenchmarks2threads.json" agents: - queue: "benchmark" + queue: "cuda" + benchmark: "*" env: BENCHMARK_GROUP: CPU JULIA_NUM_THREADS: 2 @@ -60,7 +62,8 @@ steps: artifacts: - "benchmarks/results/CPUbenchmarks4threads.json" agents: - queue: "benchmark" + queue: "cuda" + benchmark: "*" env: BENCHMARK_GROUP: CPU JULIA_NUM_THREADS: 4 @@ -82,7 +85,8 @@ steps: artifacts: - "benchmarks/results/CPUbenchmarks8threads.json" agents: - queue: "benchmark" + queue: "cuda" + benchmark: "*" env: BENCHMARK_GROUP: CPU JULIA_NUM_THREADS: 8 @@ -105,8 +109,7 @@ steps: artifacts: - "benchmarks/results/CUDAbenchmarks.json" agents: - queue: "juliagpu" - cuda: "*" + queue: "cuda" env: BENCHMARK_GROUP: CUDA if: build.message !~ /\[skip benchmarks\]/ @@ -128,8 +131,7 @@ steps: artifacts: - "benchmarks/results/AMDGPUbenchmarks.json" agents: - queue: "juliagpu" - rocm: "*" + queue: "rocm" rocmgpu: "*" env: BENCHMARK_GROUP: AMDGPU @@ -152,37 +154,12 @@ steps: artifacts: - "benchmarks/results/oneAPIbenchmarks.json" agents: - queue: "juliagpu" - intel: "*" + queue: "oneapi" env: BENCHMARK_GROUP: oneAPI if: build.message !~ /\[skip benchmarks\]/ timeout_in_minutes: 12 - - label: "Metal: Run Benchmarks" - key: "metal-benchmarks" - plugins: - - JuliaCI/julia#v1: - version: "1.10" - command: | - julia --project=benchmarks -e ' - using Pkg; - Pkg.instantiate(); - Pkg.develop(path=pwd()); - Pkg.add("Metal"); - ' - julia --project=benchmarks benchmarks/runbenchmarks.jl - artifacts: - - "benchmarks/results/Metalbenchmarks.json" - agents: - queue: "juliaecosystem" - os: "macos" - arch: "aarch64" - env: - BENCHMARK_GROUP: Metal - if: build.message !~ /\[skip benchmarks\]/ - timeout_in_minutes: 12 - - wait: ~ # Wait for all benchmarks to finish - label: "Combine Benchmarks" @@ -195,7 +172,6 @@ steps: - "cuda-benchmarks" - "oneapi-benchmarks" - "amdgpu-benchmarks" - - "metal-benchmarks" plugins: - JuliaCI/julia#v1: version: "1.10" @@ -208,7 +184,8 @@ steps: artifacts: - "benchmarks/results/combinedbenchmarks.json" agents: - queue: "benchmark" + queue: "cuda" + benchmark: "*" env: if: build.message !~ /\[skip benchmarks\]/ timeout_in_minutes: 12 \ No newline at end of file diff --git a/.buildkite/runtests.yml b/.buildkite/runtests.yml index 91eeff7..2cd9b26 100644 --- a/.buildkite/runtests.yml +++ b/.buildkite/runtests.yml @@ -17,8 +17,6 @@ steps: println("+++ :julia: Running tests") Pkg.test("DistanceTransforms"; coverage=true, julia_args=`--threads=auto`)' - agents: - queue: "juliagpu" if: build.message !~ /\[skip tests\]/ timeout_in_minutes: 10 @@ -42,34 +40,7 @@ steps: println("+++ :julia: Running tests") Pkg.test("DistanceTransforms"; coverage=true, test_args=["CUDA"])' agents: - queue: "juliagpu" - cuda: "*" - if: build.message !~ /\[skip tests\]/ - timeout_in_minutes: 10 - - - label: "Metal: Julia {{matrix.version}}" - matrix: - setup: - version: - - "1.10" - plugins: - - JuliaCI/julia#v1: - version: "{{matrix.version}}" - - JuliaCI/julia-coverage#v1: - codecov: true - command: | - julia -e 'using Pkg - - println("--- :julia: Instantiating environment") - Pkg.add("Metal") - Pkg.develop(path=".") - - println("+++ :julia: Running tests") - Pkg.test("DistanceTransforms"; coverage=true, test_args=["Metal"])' - agents: - queue: "juliaecosystem" - os: "macos" - arch: "aarch64" + queue: "cuda" if: build.message !~ /\[skip tests\]/ timeout_in_minutes: 10 @@ -93,8 +64,7 @@ steps: println("+++ :julia: Running tests") Pkg.test("DistanceTransforms"; coverage=true, test_args=["oneAPI"])' agents: - queue: "juliagpu" - intel: "*" + queue: "oneapi" if: build.message !~ /\[skip tests\]/ timeout_in_minutes: 10 @@ -118,8 +88,7 @@ steps: println("+++ :julia: Running tests") Pkg.test("DistanceTransforms"; coverage=true, test_args=["AMDGPU"])' agents: - queue: "juliagpu" - rocm: "*" + queue: "rocm" rocmgpu: "*" if: build.message !~ /\[skip tests\]/ timeout_in_minutes: 10 \ No newline at end of file From 08af33fe0e565e0e49e206e5dd155d1716f1d70e Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Fri, 12 Jun 2026 15:09:19 +0200 Subject: [PATCH 2/4] Move the Metal job(s) to the new metal queue. The JuliaGPU cluster now has a macOS agent with an Apple Silicon GPU, so Metal jobs no longer need a separate pipeline on the ecosystem cluster. Co-Authored-By: Claude Fable 5 --- .buildkite/pipeline-julia.yml | 50 ----------------------------------- .buildkite/runbenchmarks.yml | 23 ++++++++++++++++ .buildkite/runtests.yml | 25 +++++++++++++++++- 3 files changed, 47 insertions(+), 51 deletions(-) delete mode 100644 .buildkite/pipeline-julia.yml diff --git a/.buildkite/pipeline-julia.yml b/.buildkite/pipeline-julia.yml deleted file mode 100644 index dc8f72d..0000000 --- a/.buildkite/pipeline-julia.yml +++ /dev/null @@ -1,50 +0,0 @@ -steps: - - label: "Metal: Julia {{matrix.version}}" - matrix: - setup: - version: - - "1.10" - plugins: - - JuliaCI/julia#v1: - version: "{{matrix.version}}" - - JuliaCI/julia-coverage#v1: - codecov: true - command: | - julia -e 'using Pkg - - println("--- :julia: Instantiating environment") - Pkg.add("Metal") - Pkg.develop(path=".") - - println("+++ :julia: Running tests") - Pkg.test("DistanceTransforms"; coverage=true, test_args=["Metal"])' - agents: - queue: "juliaecosystem" - os: "macos" - arch: "aarch64" - if: build.message !~ /\[skip tests\]/ - timeout_in_minutes: 10 - - - label: "Metal: Run Benchmarks" - key: "metal-benchmarks" - plugins: - - JuliaCI/julia#v1: - version: "1.10" - command: | - julia --project=benchmarks -e ' - using Pkg; - Pkg.instantiate(); - Pkg.develop(path=pwd()); - Pkg.add("Metal"); - ' - julia --project=benchmarks benchmarks/runbenchmarks.jl - artifacts: - - "benchmarks/results/Metalbenchmarks.json" - agents: - queue: "juliaecosystem" - os: "macos" - arch: "aarch64" - env: - BENCHMARK_GROUP: Metal - if: build.message !~ /\[skip benchmarks\]/ - timeout_in_minutes: 12 diff --git a/.buildkite/runbenchmarks.yml b/.buildkite/runbenchmarks.yml index 809edc4..7f9c168 100644 --- a/.buildkite/runbenchmarks.yml +++ b/.buildkite/runbenchmarks.yml @@ -160,6 +160,28 @@ steps: if: build.message !~ /\[skip benchmarks\]/ timeout_in_minutes: 12 + - label: "Metal: Run Benchmarks" + key: "metal-benchmarks" + plugins: + - JuliaCI/julia#v1: + version: "1.10" + command: | + julia --project=benchmarks -e ' + using Pkg; + Pkg.instantiate(); + Pkg.develop(path=pwd()); + Pkg.add("Metal"); + ' + julia --project=benchmarks benchmarks/runbenchmarks.jl + artifacts: + - "benchmarks/results/Metalbenchmarks.json" + agents: + queue: "metal" + env: + BENCHMARK_GROUP: Metal + if: build.message !~ /\[skip benchmarks\]/ + timeout_in_minutes: 12 + - wait: ~ # Wait for all benchmarks to finish - label: "Combine Benchmarks" @@ -172,6 +194,7 @@ steps: - "cuda-benchmarks" - "oneapi-benchmarks" - "amdgpu-benchmarks" + - "metal-benchmarks" plugins: - JuliaCI/julia#v1: version: "1.10" diff --git a/.buildkite/runtests.yml b/.buildkite/runtests.yml index 2cd9b26..81930d4 100644 --- a/.buildkite/runtests.yml +++ b/.buildkite/runtests.yml @@ -91,4 +91,27 @@ steps: queue: "rocm" rocmgpu: "*" if: build.message !~ /\[skip tests\]/ - timeout_in_minutes: 10 \ No newline at end of file + timeout_in_minutes: 10 + - label: "Metal: Julia {{matrix.version}}" + matrix: + setup: + version: + - "1.10" + plugins: + - JuliaCI/julia#v1: + version: "{{matrix.version}}" + - JuliaCI/julia-coverage#v1: + codecov: true + command: | + julia -e 'using Pkg + + println("--- :julia: Instantiating environment") + Pkg.add("Metal") + Pkg.develop(path=".") + + println("+++ :julia: Running tests") + Pkg.test("DistanceTransforms"; coverage=true, test_args=["Metal"])' + agents: + queue: "metal" + if: build.message !~ /\[skip tests\]/ + timeout_in_minutes: 10 From 80ae49ecbcdcb1af317e1cf3044de5ff0501cd73 Mon Sep 17 00:00:00 2001 From: Dale Black Date: Fri, 12 Jun 2026 13:14:01 -0700 Subject: [PATCH 3/4] Remove CPU test and benchmark steps from JuliaGPU CI The JuliaGPU CI environment is not intended for CPU testing. Co-Authored-By: Claude Fable 5 --- .buildkite/runbenchmarks.yml | 96 ------------------------------------ .buildkite/runtests.yml | 21 -------- 2 files changed, 117 deletions(-) diff --git a/.buildkite/runbenchmarks.yml b/.buildkite/runbenchmarks.yml index 7f9c168..c79851a 100644 --- a/.buildkite/runbenchmarks.yml +++ b/.buildkite/runbenchmarks.yml @@ -1,98 +1,6 @@ steps: - group: ":racehorse: Benchmarks" steps: - - label: "CPU: Run Benchmarks (1 thread)" - key: "cpu-benchmarks-1" - plugins: - - JuliaCI/julia#v1: - version: "1.10" - command: | - julia --project=benchmarks -e ' - using Pkg; - Pkg.instantiate(); - Pkg.develop(path=pwd()); - ' - julia --project=benchmarks --threads=1 benchmarks/runbenchmarks.jl - artifacts: - - "benchmarks/results/CPUbenchmarks1threads.json" - agents: - queue: "cuda" - benchmark: "*" - env: - BENCHMARK_GROUP: CPU - JULIA_NUM_THREADS: 1 - if: build.message !~ /\[skip benchmarks\]/ - timeout_in_minutes: 12 - - - label: "CPU: Run Benchmarks (2 threads)" - key: "cpu-benchmarks-2" - plugins: - - JuliaCI/julia#v1: - version: "1.10" - command: | - julia --project=benchmarks -e ' - using Pkg; - Pkg.instantiate(); - Pkg.develop(path=pwd()); - ' - julia --project=benchmarks --threads=2 benchmarks/runbenchmarks.jl - artifacts: - - "benchmarks/results/CPUbenchmarks2threads.json" - agents: - queue: "cuda" - benchmark: "*" - env: - BENCHMARK_GROUP: CPU - JULIA_NUM_THREADS: 2 - if: build.message !~ /\[skip benchmarks\]/ - timeout_in_minutes: 12 - - - label: "CPU: Run Benchmarks (4 threads)" - key: "cpu-benchmarks-4" - plugins: - - JuliaCI/julia#v1: - version: "1.10" - command: | - julia --project=benchmarks -e ' - using Pkg; - Pkg.instantiate(); - Pkg.develop(path=pwd()); - ' - julia --project=benchmarks --threads=4 benchmarks/runbenchmarks.jl - artifacts: - - "benchmarks/results/CPUbenchmarks4threads.json" - agents: - queue: "cuda" - benchmark: "*" - env: - BENCHMARK_GROUP: CPU - JULIA_NUM_THREADS: 4 - if: build.message !~ /\[skip benchmarks\]/ - timeout_in_minutes: 12 - - - label: "CPU: Run Benchmarks (8 threads)" - key: "cpu-benchmarks-8" - plugins: - - JuliaCI/julia#v1: - version: "1.10" - command: | - julia --project=benchmarks -e ' - using Pkg; - Pkg.instantiate(); - Pkg.develop(path=pwd()); - ' - julia --project=benchmarks --threads=8 benchmarks/runbenchmarks.jl - artifacts: - - "benchmarks/results/CPUbenchmarks8threads.json" - agents: - queue: "cuda" - benchmark: "*" - env: - BENCHMARK_GROUP: CPU - JULIA_NUM_THREADS: 8 - if: build.message !~ /\[skip benchmarks\]/ - timeout_in_minutes: 12 - - label: "CUDA: Run Benchmarks" key: "cuda-benchmarks" plugins: @@ -187,10 +95,6 @@ steps: - label: "Combine Benchmarks" key: "combine-benchmarks" depends_on: - - "cpu-benchmarks-1" # Update these - - "cpu-benchmarks-2" - - "cpu-benchmarks-4" - - "cpu-benchmarks-8" - "cuda-benchmarks" - "oneapi-benchmarks" - "amdgpu-benchmarks" diff --git a/.buildkite/runtests.yml b/.buildkite/runtests.yml index 81930d4..0ab3e0f 100644 --- a/.buildkite/runtests.yml +++ b/.buildkite/runtests.yml @@ -1,25 +1,4 @@ steps: - - label: "CPU: Julia v{{matrix.version}}" - matrix: - setup: - version: - - "1.10" - plugins: - - JuliaCI/julia#v1: - version: "{{matrix.version}}" - - JuliaCI/julia-coverage#v1: - codecov: true - command: | - julia -e 'using Pkg - - println("--- :julia: Instantiating environment") - Pkg.develop(path=".") - - println("+++ :julia: Running tests") - Pkg.test("DistanceTransforms"; coverage=true, julia_args=`--threads=auto`)' - if: build.message !~ /\[skip tests\]/ - timeout_in_minutes: 10 - - label: "CUDA: Julia {{matrix.version}}" matrix: setup: From c9a8ef9daea1eb54dda3b7461882877dcfb9a557 Mon Sep 17 00:00:00 2001 From: Dale Black Date: Fri, 12 Jun 2026 16:18:03 -0700 Subject: [PATCH 4/4] Disable auto-precompilation in test pipeline Tests launch with --check-bounds=yes, so precompilation from Pkg commands under --check-bounds=auto would go unused. Co-Authored-By: Claude Fable 5 --- .buildkite/runtests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.buildkite/runtests.yml b/.buildkite/runtests.yml index 0ab3e0f..4613055 100644 --- a/.buildkite/runtests.yml +++ b/.buildkite/runtests.yml @@ -94,3 +94,6 @@ steps: queue: "metal" if: build.message !~ /\[skip tests\]/ timeout_in_minutes: 10 + +env: + JULIA_PKG_PRECOMPILE_AUTO: false