ci: run Awkward backend tests on GPU - #733
Conversation
Adds a nightly workflow on the scikit-hep self-hosted runners, matrixed over CUDA 12 and 13, plus a smoke suite that runs vector's Awkward backend on cupy-backed arrays and compares the results against the CPU backend. Assisted-by: ClaudeCode:claude-opus-5
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #733 +/- ##
=======================================
Coverage 87.72% 87.72%
=======================================
Files 96 96
Lines 11194 11194
=======================================
Hits 9820 9820
Misses 1374 1374 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
I can't run the test from here, so it needs a merge to be tested. |
would you like me to review it so that you could merge it? |
|
Okay, let's merge and then followup on failures. Once merged it can be triggered via workflow-dispatch. |
|
🤖 AI text below 🤖 The GPU workflow ran on the merge to
Both jobs picked up the scikit-hep self-hosted runner, so the runner access assumption held. Two things I checked specifically, since a green tick alone would not have proved much:
The run takes about a minute per CUDA version, so the nightly cron is cheap. |
🤖 AI text below 🤖
Mirrors the GPU CI setup in awkward, which runs on the scikit-hep self-hosted runners we should also have access to.
.github/workflows/gpu.yml— nightly, push tomain, andworkflow_dispatch; matrixed over CUDA 12 and 13. Micromamba env withcupy, then run the CUDA tests. Not triggered on pull requests, to keep PRs off the shared runners.tests/cuda/test_awkward_cuda.py— vector's Awkward backend already pickslibfrom the layout's nplike, so a cuda-backed array computes withcupy. The tests run 19 unary ops, 13 binary ops, and all 12 4D coordinate round-trips on both backends and require the results to match, plus a check that results stay on thecudabackend.cudapytest marker.The test module
importorskips cupy and skips when no device is present, so the regular CI jobs collect and skip it.Draft because the GPU job has not run yet — it needs a
workflow_dispatchfrom this branch to confirm the runners pick it up. One thing to watch there:filterwarnings = ["error", ...]is repo-wide, so any warning from cupy or awkward's CUDA kernel loading will fail the job.