目标是以python -m spacy train
FP16 混合精度运行,以便在有限的 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-config
为project.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"
测试了什么
- 添加
--fp16
到python -m spacy project run
- 添加
--fp16
到python -m spacy train
- 添加
fp16 = true
到default.cfg
各个部分 ([components.transformer], [components.transformer.model], [training], [initialize]
)
逻辑transformers
在 FP16 中运行,如下所示:
from transformers import TrainingArguments
TrainingArguments(..., fp16=True, ...)
软件堆栈细节
- spacy 3.0.3
- spacy-transformers 1.0.1
- transformers 4.2.2
- torch 1.6.0+cu101