使用 Spacy 训练 NER 模型仅使用一个内核



当我使用 Spacy 训练 NER 模型并监控我的 CPU 时,我可以看到它只使用 1 个内核。

我在 Spacy 文档中只发现了一个多处理的例子,但它不适用于训练:https://github.com/explosion/spaCy/blob/master/examples/pipeline/multi_processing.py我只是使用示例中提供的训练代码,但TRAINING_DATA中具有 500000 个元组的列表,其结构相同:("rawtext", {"entities": [(entity_start_offset, entity_end_offset, "ENTITY"(]}(

with nlp.disable_pipes(*other_pipes):  # only train NER
    for itn in range(n_iter):
        random.shuffle(TRAIN_DATA)
        losses = {}
        batches = spacy.util.minibatch(TRAIN_DATA,
                            size=spacy.util.compounding(4., 32., 1.001))
        for i, batch in enumerate(batches):
            print(i)
            texts, annotations = zip(*batch)
            # Updating the weights
            nlp.update(texts, annotations, sgd=optimizer,
                       drop=0.35, losses=losses)
        print('Losses', losses)

我需要使用多个内核加快训练速度。目前,使用 1 个单核的每个 epoc 需要 40 分钟。

似乎从 2.1 版开始,Spacy 中的训练只用一个内核完成。(https://github.com/explosion/spaCy/issues/3507(当矩阵乘法的并行化在其他框架中被证明是有价值的时,我发现这有点奇怪。

根据文档:https://spacy.io/usage/processing-pipelines#multiprocessing(spaCy 3(

spaCy 包括对使用 nlp.pipe 进行多处理的内置支持使用n_process选项:

# Multiprocessing with 4 processes
docs = nlp.pipe(texts, n_process=4)
# With as many processes as CPUs (use with caution!)
docs = nlp.pipe(texts, n_process=-1)

相关内容

  • 没有找到相关文章

最新更新