Dask-Rapids 数据移动和内存不足问题

Posted

技术标签:

【中文标题】Dask-Rapids 数据移动和内存不足问题【英文标题】:Dask-Rapids data movment and out of memory issue 【发布时间】:2021-03-19 08:29:05 【问题描述】:

我在我的项目中使用 dask (2021.3.0) 和 rapids(0.18)。在此,我在 CPU 上执行预处理任务,然后将预处理后的数据传输到 GPU 进行 K-means 聚类。但是在这个过程中,我遇到了以下问题:

1 个工作作业中的 1 个失败:std::bad_alloc:CUDA 错误:~/envs/include/rmm/mr/device/cuda_memory_resource.hpp:69:cudaErrorMemoryAllocation 内存不足 (在完全使用 GPU 内存之前它给出了错误,即它没有完全使用 GPU 内存)

我有一个大小为 40 GB 的 GPU。 内存大小 512 GB。

我正在使用以下 sn-p 代码:

cluster=LocalCluster(n_workers=1, threads_per_worker=1)
cluster.scale(100)
##perform my preprocessing on data and get output on variable A
# convert A varible to cupy
x = A.map_blocks(cp.asarray)
km =KMeans(n_clusters=4)
predict=km.fit_predict(x).compute()

我也在寻找一种解决方案,以便可以预处理大于 GPU 内存的数据,并且每当 GPU 内存溢出时,溢出的数据就会被传输到临时目录或 CPU 中(就像我们定义的 dask 一样内存溢出时的临时目录)。

如有任何帮助,将不胜感激。

【问题讨论】:

【参考方案1】:

有几种方法可以运行比 GPU 更大的数据集。

    查看Nick Becker's blog,其中有一些方法有据可查 查看BlazingSQL,它建立在 RAPIDS 之上,可以执行核心外处理。您可以在 beta.blazingsql.com 上试用。

【讨论】:

亲爱的 TaureanDyerNV, 感谢您对我的问题的关注。但是,我通过首先创建 LocalCluster 对输入的数据集使用基于 CPU 的预处理,然后将数据传输到 GPU,这可以通过 LocalCudaCluster 进行控制。在这种情况下,我想知道如何将数据从 LocalCluster 传输到 LocalCudaCluster。在我的代码 sn-p 中,我直接将数据从 LocalCluster 传输到 GPU,而不使用 LocalCudaCluster。您能否在这方面也帮助我,因为我没有得到任何解决方案。

以上是关于Dask-Rapids 数据移动和内存不足问题的主要内容,如果未能解决你的问题,请参考以下文章

华为T8300 ROOT之后,还是存储空间不足,还点不开,要怎么办。求大神相助

C++ 优先队列push()时,出现内存不足,怎么办,能又啥办法解决吗

华为mate9总提示内存不足安装软件失败怎么办

macos升级磁盘空间不足

arcgis合并数据提示内存不足

Keras 和 Tensorflow GPU 在大图像数据上内存不足