ARM

ARM machines can be significantly faster and cheaper than default instances with Intel or AMD hardware. We ran a number of Dask workloads on both Intel and ARM-based instance types and found costs were typically 20–30% lower when using ARM (see our blog post).

Using ARM hardware on Coiled on AWS is often no different from spinning up a non-ARM cluster.

cluster = coiled.Cluster(
    n_workers=15,
    arm=True,    # <<----------
)
client = cluster.get_client()

Instance types

When creating an AWS cluster, specifying arm=True will default to requesting m7g class (first choice) and t4g class (second choice) of instance types. You can also request specific instance types, however, multi-architecture clusters are not currently supported (see Allowable Instance Types ).

cluster = coiled.Cluster(
    # ARM instance types for scheduler and workers
    scheduler_vm_types=["t4g.large"],
    worker_vm_types=["c7g.xlarge"],
    n_workers=10,
)

For common Intel instance types you might be using already, there’s a roughly equivalent ARM instance type you could try instead.

Intel

ARM

Description

t3

t4g

burstable (best for interactive/non-compute-intensive work)

m6i

m7g

non-burstable balanced compute/memory (sensible default for common workloads)

c6i

c7g

compute-optimized (higher ratio of vCPUs to memory)

r6i

r7g

memory-optimized (higher ratio of memory to vCPUs)

The *7g families have Graviton 3 and are slightly more expensive than corresponding *6g family with older generation ARM processor, though Graviton 3 is significantly better and is still cheaper (typically by 15%) than corresponding Intel instance type.

Using a custom Docker image

You can use GitHub Actions to build your own multi-arch (x86 and ARM) Docker image (see this example yaml file).

Locally, you can build multi-arch images like this:

docker buildx build --platform linux/arm64,linux/amd64 \
-t <your-image-name>:latest --push .

You can then upload your local image to wherever you usually store Docker images (e.g. Docker Hub or Amazon ECR) and create a Coiled Python environment using this image (see Docker for instructions).