RAPIDS

This is a short example for getting started with GPUs using Coiled and RAPIDS.

You can use the publicly available RAPIDS image with the container argument and request GPU-enabled machines with the worker_gpu argument:

import coiled

cluster = coiled.Cluster(
    container="nvcr.io/nvidia/rapidsai/rapidsai-core:23.04-cuda11.8-runtime-ubuntu22.04-py3.10" 
    n_workers=4,
    worker_gpu=1,  # single T4 per worker
    worker_class="dask_cuda.CUDAWorker",  # recommended
    environ={"DISABLE_JUPYTER": "true"},  # needed for "stable" RAPIDS image
    worker_options={"nthreads": 1}, # launch one task per worker.  Avoids oversaturating the GPU
)

You’ll notice a couple arguments we recommend, but are not required:

  • worker_class='dask_cuda.CUDAWorker' can be helpful if you’re using multiple GPUs per worker

  • environ={'DISABLE_JUPYTER': 'true'} is only needed if you are using the stable RAPIDS image and disables the default Jupyter server from starting

Verification

You can then verify this cluster is working as expected.

from dask.distributed import Client


def test_gpu():
    import numpy as np
    import cupy as cp

    x = cp.arange(6).reshape(2, 3).astype("f")
    result = x.sum()
    return cp.asnumpy(result), str(result.device)

client = Client(cluster)
f = client.submit(test_gpu)
f.result()

This should return (array(15., dtype=float32), '<CUDA Device 0>'). You can also verify workers are using GPUs with cluster.scheduler_info["workers"].

cluster.scheduler_info["workers"]

And close your cluster when you’re done.

client.shutdown()

Next steps

For more examples of what you can do with a GPU cluster, see: