0

我们在 Kubernetes 上运行 DASK 集群已经有一段时间了。到目前为止,我们一直在使用 CPU 进行处理,当然还有系统内存来存储大约 1.5 TB 的数据帧(每个 DASK 集群,分成 960 个工作人员)。现在我们想更新我们的算法以利用 GPU。但似乎 GPU 上的可用内存不足以满足我们的需求,这将是一个限制因素(在我们当前的设置中,每个虚拟核心使用超过 1GB 的内存)。

我想知道是否可以使用 GPU(考虑 NVDIA、具有 PCIe 连接的 AMD 卡和它们自己的 VRAMS,而不是使用系统内存的集成 GPU)进行处理,并使用系统内存(不是 GPU 内存/VRAM)来存储 DASK 数据帧。我的意思是,这在技术上可行吗?你有没有尝试过这样的事情?我可以安排一个 kubernetes pod 使其同时使用 GPU 内核和系统内存吗?

另一件事是,即使可以将系统 RAM 分配为 GPU 的 VRAM,对这个可分配的系统 RAM 的大小是否有限制?

  • 注意 1. 我知道将系统 RAM 与 GPU 一起使用(如果可能的话)会通过 PCIe 总线产生不必要的流量,并导致性能下降,但我仍然需要使用真实数据测试此配置。

  • 注 2:GPU 速度很快,因为它们有许多简单的内核可以同时/并行执行简单的任务。如果单个 GPU 内核不优于单个 CPU 内核,那么我可能是在追逐错误的梦想吗?我已经在已经可以访问数百个 CPU 内核的 kubernetes 上运行 dask worker。最后,拥有大量工作人员和我的部分数据并不意味着更好的性能(增加洗牌)。无限增加核心数量是没有用的。

  • 注 3. 我们主要是使用 C++ 中实现的 .so 库调用来操作 python 对象和进行数学计算。

Edit1:DASK-CUDA库似乎支持从 GPU 内存溢出到主机内存,但溢出不是我所追求的。

Edit2:令人非常沮丧的是,在 Kubernetes 上使用 GPU 所需的大多数组件仍处于试验阶段/测试阶段。

  • Dask-CUDA这个库是实验性的......
  • NVIDIA 设备插件NVIDIA 设备插件仍被认为是测试版,并且...
  • KubernetesKubernetes 包括对管理 AMD 和 NVIDIA GPU 的实验性支持......
4

1 回答 1

0

我认为这在今天是不可能直接实现的,但提及原因并回复您提出的一些观点很有用:

  • 是的,dask-cuda当我想到您的用例时,首先想到的是。文档确实说这是实验性的,但据我所知,团队计划继续支持和改进它。:)
  • 接下来,dask-cuda的溢出机制是出于某种原因设计的——在进行 GPU 计算时,您最大的瓶颈是数据传输(正如您也注意到的),因此我们希望通过以下方式将尽可能多的数据保留在 GPU 内存上设计。

我鼓励您在Dask 的 Discourse 论坛上打开一个主题,我们可以在其中联系一些可以帮助确认的 NVIDIA 开发人员。:)

附带说明一下,关于改进 Dask 如何管理 GPU 资源的讨论正在进行中。这还处于早期阶段,但我们可能会在接下来的几个月中看到很酷的新功能!

于 2022-03-04T13:14:55.630 回答