【问题标题】:Understanding dask cudf object lifecycle了解 dask cdf 对象生命周期
【发布时间】:2021-05-05 20:33:37
【问题描述】:

我想了解 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()

【问题讨论】:

    标签: dask dask-distributed dask-dataframe cudf


    【解决方案1】:

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

    您首先阅读 cudf,您不应该将其作为练习。您应该直接阅读 dask_cudf。

    当 dask_cudf 计算时,结果以 cudf 数据帧的形式返回,该数据帧必须适合 GPU 的剩余内存。有可能首先读取 cudf 可能占用了你的大部分内存。

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

    【讨论】:

    • 感谢您的回复。我已经在使用客户端,并且在启动它来执行代码方面没有任何问题关于直接读入 dask_cudf,我们是否有一个可以使用列表创建 Dataframe 的函数。到目前为止,我看到的示例是使用 cudf,然后用于 dask_cudf。就像我在上面分享的示例和github.com/rapidsai/dask-cudf/blob/branch-0.9/dask_cudf/tests/… 下面的链接中一样,我也尝试使用 client.cancel() 删除对象。即使我删除对象,GPU 使用内存的大小也在下降
    • 我看到您使用的是一些旧文档。那是 RAPIDS 0.9 版。 0.19 是我们最近的稳定版本。 :) 您还应该期望 GPU 内存会减少,但是如果内存不足,您正在做以下三件事之一: 1. 结果数据帧太大。 2. 您可能需要 split_out 或 rmm。 3.你需要更多的GPU内存。您使用的是什么 GPU?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多