Как обучить проект Spacy3 со смешанной точностью FP16
Цель состоит в том, чтобы работать со смешанной точностью FP16, чтобы можно было использовать большие трансформаторы (
roberta-large
,
albert-large
и т. д.) в ограниченной VRAM (RTX 2080ti 11 ГБ).
Новый подход Spacy3 project.yml к обучению напрямую использует модели Huggingface-transformers, загруженные через Spacy-transformers v1.0. Модели Huggingface можно запускать со смешанной точностью, просто добавив флаг ( как описано здесь ).
Просторная конфигурация была создана с использованием
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"
Что было проверено
- Добавлено в
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