1

如何在大型数据集 dask_cudf 上运行 dask_cuML(例如逻辑回归)?

我无法在我的 cudf 数据帧上运行 cuML,因为数据集很大,所以一旦我尝试任何东西,就会“内存不足”。好的一面是我有 4 个 GPU 可以与 dask_cudf 一起使用。

有人知道例如在 dask_cudf 数据帧上运行逻辑回归的步骤吗?

关于我的 cudf 和 cuml 逻辑函数:

type(gdf)
cudf.core.dataframe.DataFrame

logreg = cuml.LogisticRegression(penalty='none', tol=1e-6, max_iter=10000)
logreg.fit(gdf[['A', 'B', 'C', 'D', 'E']], gdf['Z'])

我的想法 - 逐步:(不工作!)

1- 将 gdf ​​cudf 转换为 dask_cudf。

  ddf = dask_cudf.from_cudf(gdf, npartitions=2) -- what's the number of partitions?

2-meta_dtypes = dict(zip(ddf.columns, ddf.dtypes))

3-

def logistic_regression(gdf):
              return logreg.fit(gdf[['A', 'B', 'C', 'D', 'E']], gdf['Z'])

4-ddf = ddf .map_partitions(logistic_regression, meta=meta_dtypes)

ddf.compute().persist()

任何建议或见解表示赞赏!

4

1 回答 1

3

感谢您试用cuml!cuml 的官方版本还没有针对多个 gpu 的逻辑回归(即将推出!)。我正在使用dask-glmand实施解决方法cupy。准备好后,我将在此线程中发布我的笔记本。以下是一般步骤:

  1. 如果您的数据集太大,我建议使用 dask_cudf 读取 csv 文件,而不是将 cudf 数据帧转换为 dask_cudf。假设有多个 csv 文件,您可以使用
ddf = dask_cudf.read_csv("*.csv")
  1. 通过调用将 dask cudf 数据帧转换为 dask 数组
X = ddf[['A', 'B', 'C', 'D', 'E']].values
y = ddf['Z'].values

其中 dask 数组的每个块都是一个cupy数组。

  1. 用我的 dask-glm 逻辑回归版本拟合 dask 数组。
from dask_glm.estimators import LogisticRegression
clf = LogisticRegression()
clf.fit(X,y)
于 2020-02-06T18:58:25.923 回答