【问题标题】:Handle "std::bad_alloc: out_of_memory: CUDA error" at Dask-cudf在 Dask-cudf 处理“std::bad_alloc:out_of_memory:CUDA 错误”
【发布时间】:2022-07-02 07:48:28
【问题描述】:

我有一台配备 Nvida 3090 和 32GB 内存的电脑。

我正在加载一个 9GB 的 csv 数据集,其中包含数百万行和 5 列。

任何时候我运行compute() 它都不起作用并抛出std::bad_alloc: out_of_memory: CUDA error

如何在我的电脑中处理这些数据?执行所有统计操作、绘图、ML 等...

【问题讨论】:

  • 这是在加载/读取期间(不太可能)还是在某些处理之后发生?如果是后者,这将有助于了解您正在执行哪些操作。
  • 请注意compute() 将结果完全加载到内存中。因此,内存不足问题可能发生在工作流期间的内存瓶颈或仅在计算最终结果时。对于 ML 管道中的 9GB 数据集来说,32GB 的空间并不大——你只需要一个维度扩展或几个副本就完成了,所以诊断很大程度上取决于你的分块方案和工作流程。如果没有看到您的代码,我们无能为力。

标签: python-3.x dask rapids


【解决方案1】:

听起来您正在使用单个 GPU 来处理这个并尝试使用 dask_cudf 来允许您运行比 GPU 操作更大的操作。正如迈克尔所说,compute() 返回一个 cudf 结果数据帧,该数据帧必须适合 GPU 以及 dask_cudf 处理空间。您可以使用 .persist()。 Coiled 有一个很棒的博客:https://coiled.io/blog/dask-persist-dataframe/

另一种选择是将 dask-sql 与 RAPIDS 结合使用,并将数据从 csv 转换为 parquet。这可以让您快速轻松地对数据进行分块处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 2022-07-02
    • 2020-01-26
    • 2022-08-20
    • 2021-02-11
    • 2020-03-02
    • 2020-12-18
    • 2020-07-13
    相关资源
    最近更新 更多