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).