Add self-hosted GPU runner job to CI (PASCAL-compatible)
- Dominant language
- Rust
- Stars
- 0
- Forks
- 1
- Avg merge
- 11m
- Merged PRs (30d)
- 47
Description
Currently voxora's CI runs on GitHub-hosted `ubuntu-latest`
runners which have CPU only. The CUDA / Metal / Vulkan code paths
in `voxora-backend` and `voxora-qwen3asr` are not exercised by CI.
## What
Add a self-hosted GPU runner to the voxora CI. The runner:
- Runs on a host with an NVIDIA PASCAL or newer GPU (sm_60+).
- Self-hosted registration token stored as a GitHub Actions
secret (`SELF_HOSTED_GPU_TOKEN`).
- Only consumes minutes for jobs explicitly targeted at it
(`runs-on: [self-hosted, gpu, linux, gpu-pascal]`).
## Jobs to add
- `cuda-build`: `cargo build --workspace --features
voxora-qwen3asr/cuda` and `voxora-whisper/cuda`. Verifies the
CUDA code paths compile.
- `cuda-smoke`: `cargo test --workspace
--features voxora-qwen3asr/cuda
-- --ignored` to run the parity suite on the GPU. The runner
pre-downloads the ggml-tiny.bin + Qwen3-ASR-0.6B checkpoints
into a runner-local cache.
## Compatibility notes
- PASCAL GPUs (sm_60) are supported by whisper-rs but NOT by
candle-core 0.9+ which requires sm_70+ (Volta). The `cuda-smoke`
job should therefore run on a Volta-or-newer host, not PASCAL.
- Label the PASCAL-compatible job `gpu-pascal` and the
candle-compatible one `gpu-volta` if they need to be split
across two hosts.
## Acceptance
- A new CI workflow `gpu.yml` (or jobs added to the existing
`ci.yml`).
- `cuda-build` and `cuda-smoke` jobs run on self-hosted runner,
gated by `workflow_dispatch` and `schedule:` (so they run
nightly, not on every PR — saves minutes).
- Documentation in `AGENTS.md` and `CONTRIBUTING.md` on how to
register a new self-hosted runner.
## Out of scope
- Multi-GPU testing. Single GPU is sufficient.
- ROCm / AMD testing. NVIDIA-only for now.
Contributor guide
Assessment
This issue has not been assessed yet.