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