GPU 上的应用功能 colab

Posted

技术标签:

【中文标题】GPU 上的应用功能 colab【英文标题】:GPU on apply function colab 【发布时间】:2021-11-11 06:47:03 【问题描述】:

我在我的代码上使用了这个应用函数:

def entities_extraction(text):
    doc = nlp(text)
    entities= [ent.text for sentence in doc.sentences for ent in sentence.entities if ent.type in "PERSON", "ORG", "GPE", "NORP", "FAC", "LOC", "PRODUCT", "EVENT", "WORK_OF_ART", "LAW", "LANGUAGE", "MISC"]
    return entities

df["entities"] = df['text'].progress_apply(lambda x: entities_extraction(x))

问题是,目前太慢了(需要将近12个小时)

所以我尝试修改它以使用colab gpu:

@cuda.jit
def entities_extraction(text):
    doc = nlp(text)
    entities= [ent.text for sentence in doc.sentences for ent in sentence.entities if ent.type in "PERSON", "ORG", "GPE", "NORP", "FAC", "LOC", "PRODUCT", "EVENT", "WORK_OF_ART", "LAW", "LANGUAGE", "MISC"]
    return entities

但我收到此错误:

ValueError: 
Kernel launch configuration was not specified. Use the syntax:

kernel_function[blockspergrid, threadsperblock](arg0, arg1, ..., argn)

See https://numba.pydata.org/numba-doc/latest/cuda/kernels.html#kernel-invocation for help.

您知道如何解决它,或者您在应用函数上有更好的 gpu 实现吗?

对不起,如果我犯了很多错误,我对 gpu 的论点是新的,以获得更快的代码。 感谢您的帮助!

【问题讨论】:

nlp 函数是取自 spaCy 还是其他? 取自 Stanza 你不能使用 Numba cuda 内核来做你想做的事情。 GPU 不支持 entities_extraction 函数中的任何内容 【参考方案1】:

您应该编写 cuda.jit 装饰器期望的代码,如 link 所示,或者您可以尝试使用 cuDF.apply。但是,我不确定 cuDF 是否支持您在 lambda 中的函数。

或者,您可以将 Stanza Pipeline API 与 use_gpu=True 参数一起使用。请参阅基本示例部分,您应该注意其中的注释。

【讨论】:

问题是 cuDF 在 colab 中不可用,当我尝试安装它时出现此错误:错误:cudf 构建轮失败,构建 cudf 失败 @Radix 我认为您可以使用 Stanza Pipeline,而不是在 Google Colab 中构建 cuDF。

以上是关于GPU 上的应用功能 colab的主要内容,如果未能解决你的问题,请参考以下文章

Google Colab 上的 GPU 内存不足错误消息

毕设之旅--Colab GPU

Google colab 上的结果与本地结果不同

GPU服务器之Colab配置及使用教程

GPU服务器之Colab配置及使用教程

仅使用 Colab Pro 的 GPU