C.W.K.
Stream
Lesson 07 of 12 · published

GPU Runners

~11 min · gpu, runners, cost

Level 0Apprentice
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Where to run GPU workloads

GitHub doesn't include GPU in the standard hosted runners. Three viable options:

1) GitHub Larger Runners (GPU)

  • Available at the org level. NVIDIA T4 / A10 options.
  • Easy to enable — same runs-on: label syntax.
  • Per-minute pricing; reasonable for occasional GPU CI.

2) Self-hosted GPU runner

  • Set up on your own machine (homelab Linux box, Apple Silicon Mac for MLX work).
  • Tag with labels: [self-hosted, gpu, linux-x64] or [self-hosted, macos, apple-silicon].
  • Free per-minute; you pay electricity and maintenance.
  • Best for: heavy continuous use, persistent caches, exotic hardware.

3) Cloud GPU as a service from CI

  • From a regular Linux runner, call out to Modal, RunPod, vast.ai, Lambda Cloud.
  • Run the GPU job there, fetch results.
  • Pay-per-second; scales to zero when idle.
  • Best for: spiky workloads, no fleet to maintain.

Apple Silicon special case

For MLX work on Apple Silicon, only self-hosted Mac runners work. Hosted macOS runners on GitHub use Intel Mac VMs (no MLX support). Set up a self-hosted runner on your office Mac if MLX is in your eval suite.

Code

Apple Silicon MLX self-hosted runner·yaml
  mlx-eval:
    runs-on: [self-hosted, macos, apple-silicon]
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Activate mlx env (preset on the runner)
        run: |
          source ~/miniconda3/etc/profile.d/conda.sh
          conda activate mlx
          pip install -U mlx mlx-lm  # always latest, MLX is fast-moving
      - run: |
          source ~/miniconda3/etc/profile.d/conda.sh && conda activate mlx
          pytest tests/mlx/ -q

External links

Exercise

If you have any GPU workload (PyTorch, MLX, JAX, ML training), pick the cheapest viable runner option for your usage pattern. Time the cold-start vs warm-start of the first GPU job; that tells you whether caching weights is worth the bytes.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.