You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cudf高效加载Pickle文件:寻求更内存友好的方案

内存高效加载Pickle文件到cuDF DataFrame的方案

当前先加载到pandas再转cuDF的方式会占用大量CPU内存(pandas需要把整个文件加载到CPU内存中),对于大文件来说内存压力很大,以下是几个更高效的解决方案:

1. 直接使用cuDF的原生Pickle读取方法(推荐,若版本支持)

从cuDF 22.06版本开始,已经支持直接读取Pickle文件,无需经过pandas。可以直接调用cudf.read_pickle()方法:

import cudf

# 直接加载Pickle文件到cuDF DataFrame
cudf_dataframe = cudf.read_pickle('Large_File.pkl')

注意:如果你的cuDF版本较低,需要先升级到支持该功能的版本。这个方法完全跳过CPU内存的中间存储,内存效率最高。

2. 用Dask分块加载并转换

如果文件过大,单进程无法一次性加载到内存,可以用Dask分块读取Pickle,再逐块转换为cuDF格式,避免一次性占用过多CPU内存:

import dask.dataframe as dd
import cudf

# 分块读取Pickle文件
dask_df = dd.read_pickle('Large_File.pkl')

# 将每个Dask分区转换为cuDF DataFrame
dask_cudf_df = dask_df.map_partitions(cudf.DataFrame.from_pandas)

# 按需计算或转换为完整cuDF DataFrame(若GPU内存足够)
cudf_dataframe = dask_cudf_df.compute()

这种方式通过分块处理,把CPU内存占用控制在单块数据的大小,适合超大型文件。

3. 转换为GPU友好的列式存储格式(长期优化)

Pickle是面向CPU的序列化格式,对GPU读取不友好。可以一次性将Pickle文件转换为Parquet或ORC格式(列式存储,cuDF原生支持高效读取),后续直接用cuDF读取:

转换步骤(仅需执行一次)

import pandas as pd
import cudf

# 一次性加载并转换为Parquet
pd_df = pd.read_pickle('Large_File.pkl')
cudf_df = cudf.DataFrame.from_pandas(pd_df)
cudf_df.to_parquet('Large_File.parquet')

后续直接读取

import cudf

# 直接从Parquet加载到cuDF,内存效率极高
cudf_dataframe = cudf.read_parquet('Large_File.parquet')

Parquet格式支持压缩、列裁剪、分区等优化,后续加载速度和内存占用都会远优于Pickle。

内容的提问来源于stack exchange,提问作者C18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:13