Dask Helm Chart#

Dask 有一个 Helm Chart,它会创建以下资源:

  • 1 个 Jupyter 服务器(已预配置好访问 Dask 集群)

  • 1 个 Dask 调度器

  • 3 个连接到调度器的 Dask 工作节点(可伸缩)

通过为 Jupyter 服务器和 Dask 工作节点提供 GPU 并使用包含 RAPIDS 库的容器镜像,可以配置此 helm chart 来运行 RAPIDS。

配置 RAPIDS#

基于 Dask Helm Chart 构建,rapids-config.yaml 文件包含设置 RAPIDS 环境所需的额外配置。

# rapids-config.yaml
scheduler:
  image:
    repository: "nvcr.io/nvidia/rapidsai/base"
    tag: "25.04-cuda12.8-py3.12"

worker:
  image:
    repository: "nvcr.io/nvidia/rapidsai/base"
    tag: "25.04-cuda12.8-py3.12"
  dask_worker: "dask_cuda_worker"
  replicas: 3
  resources:
    limits:
      nvidia.com/gpu: 1

jupyter:
  image:
    repository: "nvcr.io/nvidia/rapidsai/notebooks"
    tag: "25.04-cuda12.8-py3.12"
  servicePort: 8888
  # Default password hash for "rapids"
  password: "argon2:$argon2id$v=19$m=10240,t=10,p=8$TBbhubLuX7efZGRKQqIWtw$RG+jCBB2KYF2VQzxkhMNvHNyJU9MzNGTm2Eu2/f7Qpc"
  resources:
    limits:
      nvidia.com/gpu: 1

[jupyter|scheduler|worker].image.* 会更新为稳定版本中的 RAPIDS “runtime” 镜像,该镜像包含启动 RAPIDS 加速库并使用 dask 进行伸缩所需的环境。请注意,所有调度器、工作节点和 jupyter pod 都需要使用相同的镜像。这确保了 dask 调度器和工作节点版本匹配。

[jupyter|worker].resources 显式为每个工作节点 pod 和 Jupyter pod 请求一个 GPU,这对于 RAPIDS 中的许多加速库是必需的。

worker.dask_worker 是工作节点 pod 内部 dask 工作节点的启动命令。为了利用分配给每个 Pod 的 GPU,启动的是 dask_cuda_worker 命令而不是常规的 dask_worker

如果希望设置不同于默认的 jupyter notebook 密码,计算 <您的密码> 的哈希值并更新 jupyter.password。您可以通过遵循 jupyter notebook 指南 计算密码哈希值。

安装 Helm Chart#

$ helm install rapids-release --repo https://helm.dask.org dask -f rapids-config.yaml

这将部署与 dask helm chart 具有相同拓扑结构的集群,详情请参阅 dask helm chart 文档

注意

默认情况下,Dask Helm Chart 不会创建 Ingress 资源。可以配置自定义的 Ingress 来接收外部流量并重定向到相应的服务。

为简单起见,本指南将通过端口转发设置对 Jupyter 服务器的访问。

运行 Rapids Notebook#

首先,设置从集群到外部端口的端口转发

# For the Jupyter server
$ kubectl port-forward --address 127.0.0.1 service/rapids-release-dask-jupyter 8888:8888

# For the Dask dashboard
$ kubectl port-forward --address 127.0.0.1 service/rapids-release-dask-scheduler 8787:8787

打开浏览器访问 localhost:8888 以访问 Jupyter,访问 localhost:8787 以访问 dask dashboard。输入密码(默认为 rapids)并访问 notebook 环境。

Notebooks 和集群伸缩#

现在我们可以通过运行一些示例 notebook 来验证一切是否正常工作。

打开 cudf/10-min.ipynb 下的 10 Minutes to cuDF and Dask-cuDF notebook。

在顶部添加一个新单元格以连接到 Dask 集群。方便的是,helm chart 已在客户端环境中预配置了调度器地址。因此您无需向 Client 对象传递任何配置。

from dask.distributed import Client

client = Client()
client

默认情况下,我们可以看到创建了 3 个工作节点,每个节点都分配了 1 个 GPU。

dask worker

逐步执行示例,验证 dask 集群是否已正确设置,以及工作节点是否可以访问 GPU。可以在 dask dashboard 中检查工作节点指标。

dask worker

如果您想通过添加更多 GPU 工作节点来扩展集群,可以使用 kubectlhelm upgrade 来实现。

$ kubectl scale deployment rapids-release-dask-worker --replicas=8

# or

$ helm upgrade --set worker.replicas=8 rapids-release dask/dask

dask worker