0

我正在尝试将 Spacy.io 与自定义管道一起用于语言处理,但似乎当我向管道添加自定义函数时,该进程仅在一个线程上运行。使用默认管道进程使用指定的所有线程。

这就是我定义管道的方式:

nlp = spacy.load(language, create_pipeline=custom_pipeline)

这是custom_pipeline功能:

def custom_pipeline(nlp):
    return (nlp.tagger, score_vocab_pipe)

这就是我运行管道的方式:

nlp.pipe(texts, batch_size=1000, n_threads=8)

自定义管道函数是否有任何必要条件来支持 spacy 的多线程?

4

1 回答 1

2

这篇文章可能会让您更好地理解多线程是如何实现的。多线程在此处的文档中进行了描述。

简而言之:标注器当前没有发布 GIL,所以 tagger.pipe() 方法只是一个一个一个地应用标注器的生成器。对于每个进程一个线程的大多数工作负载,标记器应该非常快,特别是因为它不使用太多内存。您可以在此处查看多处理批处理作业的配方。

我们也可以在标记器周围释放 GIL,以实现高效的多线程。如果您想解决这个问题,我们可以在跟踪器或 spaCy Gitter 上讨论它。

于 2016-11-15T20:34:12.040 回答