Self-hosted GPU runner¶
GitHub-hosted runners have no GPU, so gpu-marked tests, slow backtests and
the full GPU weekly pipeline run on the project workstation (Intel i9-14900,
RTX 4500 Ada 24 GB, 128 GB RAM). The workflow is
.github/workflows/gpu.yml.
Labels¶
The runner is registered with these labels. gpu.yml requires all of them.
| Label | Meaning |
|---|---|
self-hosted, windows, x64 |
Added by GitHub automatically |
gpu |
A CUDA GPU is present |
kairos |
This project's workstation, not a shared runner |
Security¶
A self-hosted runner executes whatever code a workflow checks out. On a public repository that must never include code from fork pull requests.
gpu.ymltriggers only onpushtomain,scheduleandworkflow_dispatch. It has nopull_requesttrigger.- In Settings → Actions → General, set "Fork pull request workflows" to require approval for all outside collaborators.
- Run the runner service as a dedicated local user with no admin rights and no access to personal files.
- The job token is read-only (
permissions: contents: read). Ledger commits come from the hostedweekly.ymljob, not from this machine.
One-time setup (Windows, PowerShell)¶
- Prerequisites: NVIDIA driver with CUDA 12.x, Git, PowerShell 7 (
pwsh), anduvon the service user'sPATH.
winget install --id Microsoft.PowerShell
winget install --id astral-sh.uv
nvidia-smi # must list the RTX 4500 Ada
-
Create a dedicated user, for example
kairos-runner, and log in as it once. -
In the repository go to Settings → Actions → Runners → New self-hosted runner, choose Windows x64, and follow the download and checksum steps into
C:\actions-runner. -
Configure it with the project labels and install it as a service:
cd C:\actions-runner
.\config.cmd --url https://github.com/guru-bharadwaj20/Kairos-Observatory `
--token <REGISTRATION_TOKEN> `
--name kairos-workstation `
--labels gpu,kairos `
--runasservice `
--windowslogonaccount .\kairos-runner
- Check that the runner shows as Idle with all five labels, then start
gpu.ymlfrom the Actions tab with Run workflow.
Resource limits¶
Jobs follow the hardware plan in the design notes: 28 worker
processes at most, BLAS threads pinned to 1, peak VRAM under 20 GB. The
workflow's concurrency group keeps it to one GPU job at a time.
Maintenance¶
- The runner updates itself. Update the NVIDIA driver by hand and re-run
uv run kairos doctorafterwards. - To remove it:
.\config.cmd remove --token <REMOVAL_TOKEN>.