Skip to content

ci: run Awkward backend tests on GPU - #733

Merged
henryiii merged 1 commit into
mainfrom
ci/gpu-tests
Jul 24, 2026
Merged

ci: run Awkward backend tests on GPU#733
henryiii merged 1 commit into
mainfrom
ci/gpu-tests

Conversation

@henryiii

Copy link
Copy Markdown
Member

🤖 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 to main, and workflow_dispatch; matrixed over CUDA 12 and 13. Micromamba env with cupy, 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 picks lib from the layout's nplike, so a cuda-backed array computes with cupy. 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 the cuda backend.
  • Registered the cuda pytest 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_dispatch from 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.

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

codecov Bot commented Jul 24, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.72%. Comparing base (e79158a) to head (38cf889).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@henryiii
henryiii marked this pull request as ready for review July 24, 2026 20:25
@henryiii

Copy link
Copy Markdown
Member Author

I can't run the test from here, so it needs a merge to be tested.

@ianna

ianna commented Jul 24, 2026

Copy link
Copy Markdown
Member

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?

@ianna ianna left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@henryiii - Great! This looks consistent with awkward CUDA workflow. Thanks!

@henryiii

Copy link
Copy Markdown
Member Author

Okay, let's merge and then followup on failures. Once merged it can be triggered via workflow-dispatch.

@henryiii
henryiii merged commit 7da810b into main Jul 24, 2026
20 checks passed
@henryiii
henryiii deleted the ci/gpu-tests branch July 24, 2026 20:37
@henryiii

Copy link
Copy Markdown
Member Author

🤖 AI text below 🤖

The GPU workflow ran on the merge to main and passed on real GPUs: run 30124750331.

Job Result
CUDA 12 34 passed in 5.90s
CUDA 13 34 passed in 6.08s

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 tests ran rather than skipped. collected 34 items, all PASSED, zero skips. A missing cupy or a GPU-less machine would have skipped the whole module at import and still exited 0, and the job would have looked identical. It did not; cupy imported and getDeviceCount() found a device.
  • The warnings-as-errors concern did not materialize. Nothing from cupy or awkward's CUDA kernel loading tripped filterwarnings = ["error", ...], so no ignore entry is needed for now.

The run takes about a minute per CUDA version, so the nightly cron is cheap.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants