GPU runners for GitHub Actions

Run GitHub Actions jobs on an NVIDIA GPU in your own AWS or Modal account: the labels, what each GPU costs, and the quota AWS starts you at.

A job that says runs-on: superci-gpu gets a machine with one NVIDIA GPU, in your own AWS or Modal account. The machine is gone when the job ends, so you pay for the GPU only while the job runs.

jobs:
  train:
    runs-on: superci-gpu
    steps:
      - uses: actions/checkout@v5
      - run: nvidia-smi

Which GPU

superci-gpu asks for any GPU and gets the least costly one, a T4. Name a GPU to choose it:

LabelGPUWhere
superci-t4NVIDIA T4AWS, Modal
superci-l4NVIDIA L4AWS, Modal
superci-a10gNVIDIA A10GAWS, Modal
superci-l40sNVIDIA L40SAWS, Modal
superci-a100NVIDIA A100, 40 GBModal
superci-h100NVIDIA H100Modal
superci-h200NVIDIA H200Modal
superci-b200NVIDIA B200Modal

Each machine has one GPU. Beside it, an AWS machine has 4 CPUs and 16 GB of memory and a Modal sandbox 2 CPUs and 8 GB, unless the label says more: superci-l4-8cpu-32gb. The other parts of a label work too: superci-gpu-ondemand, superci-gpu-aws, superci-a10g-modal.

GPU machines run Linux on x64. There are none with Windows or on Arm, and Cloudflare has no GPUs, so it is passed by.

What it costs

GitHub’s own GPU runner is one size: 4 cores and a T4, at $0.052 a minute, which is $3.12 an hour. The same GPU in your own account, by the hour:

GPUAWS machineAWS spotAWS on-demandModal, the GPU alone
T4g4dn.xlarge$0.27$0.53$0.59
L4g6.xlarge$0.53$0.80$0.80
A10Gg5.xlarge$0.40$1.01$1.10
L40Sg6e.xlarge$1.83$1.86$1.95

AWS’s prices are for us-east-1 on 12 October 2026; spot prices move through the day. On AWS the machine’s CPUs and memory are in the price. On Modal they are billed beside the GPU, by the second: a sandbox with 2 CPUs, 8 GB and a T4 comes to about $0.92 an hour.

GitHub’s runner has 28 GB of memory, more than the machines in the table. For one like it, superci-gpu-4cpu-32gb gets a g4dn.2xlarge on AWS (8 CPUs, 32 GB, a T4), at $0.25 an hour on spot and $0.75 on demand that day. The calculator adds up a month of GPU jobs on that size beside GitHub’s bill.

On AWS

  • Your account starts with no GPU machines. AWS’s quotas for them (All G and VT Spot Instance Requests and Running On-Demand G and VT instances) are 0 in a new account. A GPU job then fails at once with a message naming the quota to raise. Ask for at least 4 vCPUs of each in Service Quotas.
  • What a job finds: Ubuntu 24.04 with NVIDIA’s driver, the CUDA toolkit and the container toolkit, from the public images RunsOn publishes.
  • Spot first. GPU machines are spot machines unless the label says -ondemand. Spot GPUs are scarcer than other machines: when AWS has none, superci-gpu tries an L4 machine and then an A10G before the job goes to the next provider in your order.

On Modal

  • A payment method. Modal gives GPUs only to workspaces with one. Without it the job fails at once, with Modal’s own message.
  • What a job finds: a sandbox with GitHub’s runner and the GPU. There is no Docker inside a sandbox, so a job that builds or runs containers belongs on AWS.
  • Modal has the larger GPUs (A100, H100, H200, B200), which SuperCI does not start on AWS.

Which one gets the job

A GPU job goes to the first of AWS and Modal in your order that can run it. With AWS first, a T4 job runs on a spot machine when there is one, and on Modal when AWS has none and Modal is next. To keep a job in one place, name it in the label: superci-gpu-aws.