我们在 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 设备插件仍被认为是测试版,并且...
- Kubernetes:Kubernetes 包括对管理 AMD 和 NVIDIA GPU 的实验性支持......