如何使用 FP16 混合精度训练 Spacy3 项目

Ron*_*Luc 5 nlp spacy pytorch huggingface-transformers spacy-3

目标是以python -m spacy trainFP16 混合精度运行,以便能够在有限的 VRAM (RTX 2080ti 11 GB) 中使用大型变压器(roberta-large、等)。albert-large

新的 Spacy3 project.yml训练方法直接使用通过Spacy-transformers v1.0加载的Huggingface-transformers 模型。只需添加标志即可以混合精度运行 Huggingface 模型(如此处所述)。--fp16

spacy 配置是使用 生成的python -m spacy init config --lang en --pipeline ner --optimize efficiency --gpu -F default.cfg,并通过 进行检查是否完整python -m spacy init fill-config default.cfg config.cfg --diff。然而没有找到 FP16/混合精度。

重现

使用spaCy 项目:命名实体识别 (WikiNER)并更改init-configproject.yml使用 GPU 和变压器(roberta-base默认情况下):

commands:
  -
    name: init-config
    help: "Generate a transformer English NER config"
    script:
      - "python -m spacy init config --lang en --pipeline ner --gpu -F --optimize efficiency -C configs/${vars.config}.cfg"
Run Code Online (Sandbox Code Playgroud)

测试了什么

  • 添加--fp16python -m spacy project run
  • 添加--fp16python -m spacy train
  • 添加fp16 = truedefault.cfg各个部分 ( [components.transformer], [components.transformer.model], [training], [initialize])

逻辑transformers在 FP16 中运行,如下所示:

from transformers import TrainingArguments
TrainingArguments(..., fp16=True, ...)
Run Code Online (Sandbox Code Playgroud)

软件堆栈细节

 - spacy              3.0.3
 - spacy-transformers 1.0.1
 - transformers       4.2.2
 - torch              1.6.0+cu101
Run Code Online (Sandbox Code Playgroud)