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

问题描述

我在我的项目中使用了 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。

我正在使用以下代码片段:

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 中定义的那样) RAM 溢出时的临时目录)。

任何帮助都会得到认可。

解决方法

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

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