v3.4 changelog quickstart →

GPU runners

NVIDIA and AMD GPU runners on EC2 for ML and graphics workloads, from Flex labels or Fleet runner definitions.

RunsOn gives you the full range of GPU EC2 instances — NVIDIA (T4, A10G, L4, L40S, M60, V100, A100, H100, H200) and AMD (Radeon Pro V520) — for much cheaper than the official GitHub Actions GPU runners (typically ~10x cheaper on spot; see pricing). Available on all GitHub plans, including free.

Flex

Select a GPU-capable EC2 family and a GPU image in the job label:

.github/workflows/ci.yml
jobs:
gpu:
runs-on: runs-on=${{ github.run_id }}/family=g5.xlarge/image=ubuntu24-gpu-x64
Fleet

Publish a GPU runner fleet in Terraform and target the fleet label:

main.tf
runners = {
gpu = {
family = ["g5.xlarge"]
image = "ubuntu24-gpu-x64"
}
}
fleets = {
gpu = {
runner = "gpu"
}
}
.github/workflows/ci.yml
jobs:
gpu:
runs-on: runs-on/fleet=gpu/env=production

GPU images#

Since v2.6.5, RunsOn provides official gpu images pre-configured with the latest NVIDIA driver, CUDA toolkit, and container toolkit, on top of the standard full image software. Recommended for most use cases.

ImageArchitectureDescription
ubuntu22-gpu-x64x64Ubuntu 22.04 + NVIDIA driver, CUDA toolkit, container toolkit.
ubuntu24-gpu-x64x64Ubuntu 24.04 + NVIDIA driver, CUDA toolkit, container toolkit.
ubuntu24-gpu-arm64arm64For NVIDIA GPU runners on Graviton instances such as g5g + NVIDIA driver, CUDA toolkit, container toolkit.

Workflow example#

.github/workflows/machine-learning-job.yml
jobs:
default:
runs-on: "runs-on=${{ github.run_id }}/family=g4dn.xlarge/image=ubuntu24-gpu-x64"
steps:
- uses: runs-on/action@v2
- name: Display NVIDIA SMI details
run: |
nvidia-smi
nvidia-smi -L
nvidia-smi -q -d Memory
- name: Ensure Docker is available with GPU support
run: docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
- name: Execute your machine learning script
run: echo "Running ML script..."

For ARM64 GPU workloads, use ubuntu24-gpu-arm64 with a compatible family such as g5g:

.github/workflows/ci.yml
jobs:
arm64-gpu:
runs-on: "runs-on=${{ github.run_id }}/family=g5g.xlarge/image=ubuntu24-gpu-arm64"
steps:
- uses: runs-on/action@v2
- name: Display NVIDIA SMI details
run: |
nvidia-smi
uname -m

Deep Learning AMIs#

Combined with custom images, you can use AWS’s official Deep Learning AMIs ↗ (DLAMI). Define a custom image referencing the latest DLAMI and a custom runner referencing that image and your GPU family — see Custom runners & images for the full setup. Note that DLAMI-based runners take longer to start because the base image is very large; a streamlined custom image built with Packer boots faster.

Quotas#

New AWS accounts have GPU instance quotas set to zero by default, so you will likely need to request an increase.

How to request an increase
  1. Search for “Quotas” in the AWS console.
  2. Click “Request quota increase”.
  3. Select “EC2” as the service.
  4. Select “G” as the instance type.
  5. Fill in the form and submit.
  6. Repeat for both spot and on-demand quotas.
Quota increase