首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Dask cuDF中内存不足

在Dask cuDF中内存不足
EN

Stack Overflow用户
提问于 2022-06-24 15:05:25
回答 1查看 116关注 0票数 0

最近,我在最近的项目中一直试图解决dask_cudf中的内存管理问题,但我似乎遗漏了一些东西,需要您的帮助。我正在工作的特斯拉T4 GPU与15 GiB内存。我有几个ETL步骤,但是GPU最近似乎在其中的大多数上失败了(其中大多数只是过滤或转换步骤,但很少有旋转移动)。我的数据包括大约20,500 My的拼花文件。对于这个特定的问题,我将提供一段用于过滤的代码,这将使GPU由于内存不足而失败。

我首先建立一个数据自动化系统集群:

代码语言:javascript
运行
复制
CUDA_VISIBLE_DEVICES = os.environ.get("CUDA_VISIBLE_DEVICES", "0")

cluster = LocalCUDACluster(
#     rmm_pool_size=get_rmm_size(0.6 * device_mem_size()),
    CUDA_VISIBLE_DEVICES=CUDA_VISIBLE_DEVICES,
    local_directory=os.path.join(WORKING_DIR, "dask-space"),
    device_memory_limit=parse_bytes("12GB")
)
client = Client(cluster)
client

根据是否提供rmm_pool_size参数,错误是不同的。当参数被提供时,我得到了最大池限制,否则我会得到以下错误:MemoryError: std::bad_alloc: CUDA error at: ../include/rmm/mr/device/cuda_memory_resource.hpp:70: cudaErrorMemoryAllocation out of memory

接下来,我将创建一个对数据执行的筛选操作(该操作主要检查列中的值是否出现在包含大约80000个值的集合中):

代码语言:javascript
运行
复制
def remove_invalid_values_filter_factory(valid_value_set_or_series):
    def f(df):
        mask = df['col'].isin(valid_value_set_or_series)
        return df.loc[mask]
    return f

# Load valid values from another file
valid_values_info_df = pd.read_csv(...)
# The series is around 1 MiB in size
keep_known_values_only = remove_invalid_values_filter_factory(valid_values_info_df['values'])
# Tried both and both cause the error
# keep_known_values_only = remove_invalid_values_filter_factory(set(valid_values_info_df['values']))

最后,我对数据应用这个过滤器操作,并得到错误:

代码语言:javascript
运行
复制
%%time
# Error occures during this processing step
keep_known_values_only(
    dask_cudf.read_parquet(...)
).to_parquet(...)

我感到完全迷失了,我遇到的大多数来源都有这个错误,因为我使用cuDF而没有Dask,或者没有设置CUDA集群,但我两者都有。此外,根据直觉,过滤操作不应该是内存昂贵的,所以我不知道该做什么。我认为我设置集群的方式有问题,修复它将使更多内存昂贵的操作也能正常工作。

我很感谢你的帮助,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-01 23:36:28

为此,我将使用dask来利用它在核心之外进行处理的能力。

至于dask_cudf功能失败,请在cudf回购中提出一个问题,最低限度的可重现性!我们会很感激的!)

你可能不想在一起做dask_cudf和RMM,除非你真的必须并且知道你在做什么(这就像急流超级使用模式,当你真的需要最大化GPU的大小时,使用一个algo)。如果您的使用需要这样做(而且您在这里使用的是拼花文件,这就是为什么我没有深入研究它的原因),它确实会有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72746034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档