了解 dask cudf 对象生命周期

问题描述

我想了解 dask 对象的高效内存管理过程。我已经设置了一个 dask GPU 集群,并且能够执行跨集群运行的任务。但是,对于 dask 对象,尤其是当我运行计算函数时,由于使用越来越多的内存,在 GPU 上运行的进程正在快速增长,很快我就会收到“内存不足错误”。

我想了解在使用完 dask 对象后如何从它们中释放内存。在以下示例中,在计算函数之后我如何释放该对象。我正在运行以下代码几次。内存在它运行的进程中不断增长

import cupy as cp
import pandas as pd
import cudf
import dask_cudf

nrows = 100000000
df2 = cudf.DataFrame({'a': cp.arange(nrows),'b': cp.arange(nrows)})
ddf2 = dask_cudf.from_cudf(df2,npartitions=5)
ddf2['c'] = ddf2['a'] + 5
ddf2

ddf2.compute()

解决方法

Please check this blog post by Nick Becker. 您可能想先设置一个客户端。

您首先阅读cudf,您不应该这样做。您应该直接读入 dask_cudf。

当 dask_cudf 计算时,结果作为 cudf 数据帧返回,它必须适合您 GPU 的剩余内存。有可能首先读入 cudf 可能占用了您的大量记忆。

然后,您可以在使用 client.cancel() 完成后删除 dask 对象。