Summary
Add a non-blocking or scheduled CI path that runs a small subset of GPU tests on real CUDA hardware (Vast.ai or a self-hosted runner), so device regressions are not only caught manually.
Motivation
.github/workflows/ci.yml builds on ubuntu and runs LIT + clang-tidy + format + ruff. It never executes PTX. Shared-memory, address-space, and runner bugs have historically needed manual Vast runs.
Full gpu_test on every PR may be too slow/costly; a smoke subset on a schedule or workflow_dispatch is enough.
Proposed design
- Workflow
gpu-smoke.yml:
workflow_dispatch + weekly schedule
- Secrets:
VASTAI_API_KEY (or self-hosted GPU runner)
- Run a short pytest marker, e.g.
@pytest.mark.gpu_smoke
- Smoke cases: addition, one shared+barrier kernel, one multi-param store (keep under ~N minutes)
- Status: report as a separate check; do not hard-gate
canon until stable
- Document cost controls (instance type, idle teardown — reuse existing conftest patterns)
Acceptance criteria
Related
Summary
Add a non-blocking or scheduled CI path that runs a small subset of GPU tests on real CUDA hardware (Vast.ai or a self-hosted runner), so device regressions are not only caught manually.
Motivation
.github/workflows/ci.ymlbuilds on ubuntu and runs LIT + clang-tidy + format + ruff. It never executes PTX. Shared-memory, address-space, and runner bugs have historically needed manual Vast runs.Full
gpu_teston every PR may be too slow/costly; a smoke subset on a schedule orworkflow_dispatchis enough.Proposed design
gpu-smoke.yml:workflow_dispatch+ weeklyscheduleVASTAI_API_KEY(or self-hosted GPU runner)@pytest.mark.gpu_smokecanonuntil stableAcceptance criteria
Related