Spacy"train"命令使用命令行选项--gpu 0,允许在使用gpu和不使用gpu的训练之间进行"最后一分钟"选择—仅使用CPU。
但是,使用https://spacy.io/usage/training#quickstart在GPU和CPU之间进行选择会导致(基本(配置的主要差异。在我的案例中(处理NER(,我得到了两个不同的管道:
- 对于CPU:管道=[">tok2vec","ner"]
- 对于GPU:管道=[">变压器","ner"]
(以下组件设置非常不同(。
由于我的GPU只有6GB的内存,我很快就用完了GPU内存-无法使用它。但当我切换到只使用CPU时,两个管道之间的训练行为大不相同:
["tok2vec","ner"]管道几乎在单个核心上运行,在几个小时内训练我的模型(8000个训练,2000个开发/验证文档(。明显快于Spacy 2(即使使用GPU(,尽管有时会使用大量内存(高达30G(。
["transformer","ner"]管道爆炸式地使用了多达20个核心(在40个逻辑核心的机器上(,所以我希望它运行得很快。但它似乎永远都在运行。在一个小时内,我只完成了第一个"历元",然后(在下一个历元上(它崩溃了(见下文(。由于我的数据(DocBin文件每个批处理100个"文档"(是相同的,下面的崩溃(无序B/I标记(很难解释。
我的主要问题是为什么针对GPU和CPU时管道不同?在以GPU为目标的情况下,矢量在哪里?
崩溃:…
File "C:WorkMLSpacy3libsite-packagesspacytrainingloop.py", line 98, in train
for batch, info, is_best_checkpoint in training_step_iterator:
File "C:WorkMLSpacy3libsite-packagesspacytrainingloop.py", line 194, in train_while_improving
nlp.update(
File "C:WorkMLSpacy3libsite-packagesspacylanguage.py", line 1107, in update
proc.update(examples, sgd=None, losses=losses, **component_cfg[name])
File "spacypipelinetransition_parser.pyx", line 350, in spacy.pipeline.transition_parser.Parser.update
File "spacypipelinetransition_parser.pyx", line 604, in spacy.pipeline.transition_parser.Parser._init_gold_batch
File "spacypipeline_parser_internalsner.pyx", line 273, in spacy.pipeline._parser_internals.ner.BiluoPushDown.init_gold
File "spacypipeline_parser_internalsner.pyx", line 53, in spacy.pipeline._parser_internals.ner.BiluoGold.__init__
File "spacypipeline_parser_internalsner.pyx", line 69, in spacy.pipeline._parser_internals.ner.create_gold_state
File "spacytrainingexample.pyx", line 240, in spacy.training.example.Example.get_aligned_ner
File "spacytokensdoc.pyx", line 698, in spacy.tokens.doc.Doc.ents.__get__
ValueError: [E093] token.ent_iob values make invalid sequence: I without B
基本上,如果您选择"GPU";在quickstart中,spaCy使用Transformers管道,这在架构上与CPU管道非常不同。快速启动中的设置是推荐的基本设置,而spaCy实际能够使用的设置要广泛得多(训练中的-gpu标志就是其中之一(。
转换器使用注意力来生成上下文嵌入,因此不存在单个单词嵌入的真正概念。这些上下文嵌入通常比单词嵌入更好。由于这个原因,spaCy变形金刚模型不包括单词嵌入。变形金刚的缺点是,它们需要相当强大的硬件,包括GPU才能运行。如果你有一个强大的GPU,使用变形金刚通常是有意义的。
CPU管道使用的模型不需要专门的硬件,通常运行速度更快,同时仍为许多应用程序提供足够的准确性。如果你没有GPU,它们基本上也是你唯一的选择。如果你有一个GPU,你可以用它来训练非Transformers管道,它可能会提供加速,但好处通常并不显著。所以spaCy支持在GPU上训练非变形金刚模型,但如果你有GPU,通常最好使用变形金刚。