如何将GPU支持与Dask网关集成?

如何将GPU支持与Dask网关集成?,dask,dask-distributed,dask-ml,dask-kubernetes,dask-gateway,Dask,Dask Distributed,Dask Ml,Dask Kubernetes,Dask Gateway,我们目前使用的Dask网关只有CPU工人。然而,随着深度学习越来越被广泛采用,我们希望过渡到为通过Dask网关创建的集群添加GPU支持 我已经查看了Dask网关文档,没有太多关于如何设置此功能以及需要更改helm图表/配置的哪些部分以启用此功能的详细说明 我的想法是,首先在GCP上的GKE集群中添加一个GPU,然后为使用此GPU的dask工作人员使用RAPIDS dockerfile?这就是Dask网关所需的全部设置吗 如果有人能给我指出正确的方向,我将不胜感激。要在能够进行GPU计算的Kube

我们目前使用的Dask网关只有CPU工人。然而,随着深度学习越来越被广泛采用,我们希望过渡到为通过Dask网关创建的集群添加GPU支持

我已经查看了Dask网关文档,没有太多关于如何设置此功能以及需要更改helm图表/配置的哪些部分以启用此功能的详细说明

我的想法是,首先在GCP上的GKE集群中添加一个GPU,然后为使用此GPU的dask工作人员使用RAPIDS dockerfile?这就是Dask网关所需的全部设置吗


如果有人能给我指出正确的方向,我将不胜感激。

要在能够进行GPU计算的Kubernetes上运行Dask群集,您需要以下几点:

  • Kubernetes节点需要GPU和驱动程序。这可以通过设置
  • 调度器和工人吊舱将需要安装NVIDIA工具的Docker映像。正如你所建议的那样,这些都是好的
  • pod容器规范需要GPU资源,如
    resources.limits.nvidia.com/GPU:1
  • 需要使用
    Dask_cuda
    包(包含在RAPIDS图像中)中的
    Dask cuda worker
    命令启动Dask worker
注意:对于Dask网关,您的容器映像还需要安装
Dask网关
软件包。我们可以将其配置为在运行时安装,但最好在安装此包的情况下创建自定义映像

因此,这里是一个最小的Dask网关配置,它将为您提供一个GPU集群

#config.yaml
网关:
后端:
图片:
名称:rapidsai/rapidsai
标记:cuda11.0-runtime-ubuntu18.04-py3.8#确保与您的k8s CUDA版本和用户的Python版本相匹配
工人:
容器外配置:
环境:
-名称:额外包装
值:“dask网关”
资源:
限制:
nvidia.com/gpu:1#这可能大于1,每个gpu的pod中会有一个工作进程
调度程序:
容器外配置:
环境:
-名称:额外包装
值:“dask网关”
资源:
限制:
nvidia.com/gpu:1#调度程序需要gpu以防意外反序列化
外部配置:
cudaworker:|
c、 ClusterConfig.worker_cmd=“dask cuda worker”

我们可以通过启动Dask网关、创建Dask集群和运行一些特定于GPU的工作来测试工作。下面是一个例子,从每个工作人员那里得到英伟达驱动程序版本。
$ helm install dgwtest daskgateway/dask-gateway -f config.yaml
[1]中的
:来自dask_网关导入网关
在[2]中:网关=网关(“http://dask-gateway-service")
[3]中:cluster=gateway.new_cluster()
在[4]中:集群规模(1)
在[5]中:来自dask.distributed import Client
在[6]中:客户机=客户机(集群)
在[7]:def get_nvidia_driver_version():
…:导入pynvml
…:返回pynvml.nvmlSystemGetDriverVersion()
...: 
在[9]:client.run(获取nvidia驱动程序版本)
Out[9]:{'tls://10.42.0.225:44899':b'450.80.02'}

我已经为你问题的主要部分添加了答案。我建议您就SciKeras、Skorch等需要GPU的问题单独提问。非常感谢@JacobTomlinson。我一定会的。我的最后一个问题是关于我们的组织,您是否建议我们有两个网关实例:一个用于CPU计算,另一个用于GPU计算?或者,使用GPU计算的网关实例可能会取代使用CPU计算的网关实例吗?老实说,我不确定。如果Gateway有概要文件的概念就好了,这样您就可以选择不同的集群配置(也许您可以提出一个GitHub问题来提出这个问题)。我认为今天最简单的做法是拥有多个网关。非常感谢@JacobTomlinson。这是非常有用的信息。