【问题标题】:TfIdfVectorizer is slower on GPU (cuml vs sklearn implementation)TfIdfVectorizer 在 GPU 上较慢(cuml 与 sklearn 实现)
【发布时间】:2021-08-24 07:25:48
【问题描述】:

我在大型数据上运行 TfIdfVectorizer(理想情况下,我想在我的所有数据上运行它,即 30000 个文本,每个文本大约 20000 个单词)。最初,我使用默认的sklearn.feature_extraction.text.TfidfVectorizer,但我决定在 GPU 上运行它,这样它会更快。结果恰恰相反——它真的,真的很慢!我在 Kaggle 笔记本 with Tesla P100-PCIE-16GB(非常强大的 GPU)上运行代码。 您可以在此处查看两个代码: 非 GPU 实现:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
df = pd.read_csv('data.csv')
X = df.input_text.astype(str).to_numpy()
print('Transforming...')
print(len(X))
model = TfidfVectorizer(lowercase=True, max_features=1000)
model.fit_transform(X)

GPU 实现:

import pandas as pd
from cuml.feature_extraction.text import TfidfVectorizer
import cudf
import numpy as np


df = pd.read_csv('data.csv')
X = df.input_text.astype(str).to_numpy()
X = cudf.Series(X)
print(X.shape)
print('Transforming...')
model = TfidfVectorizer(lowercase=True, max_features=1000)
model.fit_transform(X)

如果您运行这两段代码,您会注意到非 GPU 实现比 GPU 实现快很多。此外,您可以在 Kaggle 上进行测试,因为它们具有非常强大的 GPU。 我的问题是:为什么会这样?如何利用 GPU 来加快进程?

【问题讨论】:

    标签: python tensorflow nlp gpu tfidfvectorizer


    【解决方案1】:

    实现的执行速度不同的原因有很多。最可能的两种情况如下

    1. cuML 的 GPU 实现与 scikit-learn 的不同,只是效率较低。这可能是由于多种原因造成的:可能是由于更“高级”的计算(与 scikit-learn 的非常原生的实现相比),这会减慢部分操作;它也可能是一种无法在 GPU 上有效执行的转换(我对 GPU 计算不是很熟悉,但我认为不同长度的文本在这里播放效果不是很好)。

    2. 第二个原因可能是由于 CPU/GPU-shuffle 数据的开销。我已经给出了相关的答案here。在这种情况下,我们可以观察到 GPU 计算本身相当快,但是在内存之间复制数据会导致大量开销,以至于在观察到任何性能提升之前数据需要相当大。

    我的建议是检查 scikit-learn 和 cuML 实现的分析运行,并查看您的代码在哪些函数中花费的时间最多。这样,您可能会看到它是否是由于特定的函数调用cuML 或一般 GPU 效率低下。

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2019-12-27
      • 2014-06-20
      • 2020-02-17
      • 2021-12-31
      • 2013-12-06
      相关资源
      最近更新 更多