Примечания к выпуску
Введение
Матрица поддержки
Производительность
Ускорение обучения Трансформатора
Ускорение обучения BERT
Ускорение вывода трансформатора
Ускорение вывода BERT
Установка
Установить из PyPI
Сборка из исходного кода
Начиная
Обучение LightSeq с нуля
Обучение LightSeq от Fairseq
Обучение LightSeq от Hugging Face BERT
Вывод LightSeq из Fairseq
Вывод LightSeq по обнимающему лицу BERT
Развертывание LightSeq с использованием сервера вывода
Цитируйте нас
Мы нанимаем!
[2022.10.25] Выпуск версии v3.0.0, которая поддерживает обучение и вывод смешанной точности int8. [中文介绍]
[2021.06.18] Выпуск версии v2.0.0, которая поддерживает обучение смешанной точности fp16. [中文介绍]
[2019.12.06] Выпуск версии v1.0.0, которая поддерживает вывод смешанной точности fp16. [中文介绍]
LightSeq — это высокопроизводительная библиотека обучения и вывода для обработки и генерации последовательностей, реализованная в CUDA. Он обеспечивает высокоэффективные вычисления современных моделей NLP и CV, таких как BERT, GPT, Transformer и т. д. Поэтому он лучше всего подходит для машинного перевода, генерации текста, классификации изображений и других задач, связанных с последовательностями.
Библиотека построена на основе официальной библиотеки CUDA (cuBLAS, Thrust, CUB) и пользовательских функций ядра, которые специально объединены и оптимизированы для семейства моделей Transformer. Помимо компонентов модели, библиотека вывода также обеспечивает простое в развертывании управление моделями и обслуживающий сервер на основе сервера вывода TensorRT. С помощью LightSeq можно легко разработать модифицированную архитектуру Transformer с небольшим дополнительным кодом.
Обучение и вывод LightSeq выполняются очень быстро. Ниже представлена общая производительность:
Обучение LightSeq fp16 обеспечивает ускорение до 3 раз по сравнению с обучением PyTorch fp16.
Обучение LightSeq int8 обеспечивает ускорение до 5 раз по сравнению с PyTorch QAT (т. е. обучение с учетом квантования).
Вывод LightSeq fp16 и int8 обеспечивает ускорение до 12x и 15x по сравнению с выводом PyTorch fp16 соответственно.
LightSeq поддерживает несколько функций, которые показаны в таблице ниже.
Функции | Список поддержки |
---|---|
Модель | Трансформатор, BERT, BART, GPT2, ViT, T5, MT5, XGLM, VAE, многоязычный, МО |
Слой | встраивание, кодер, декодер, критерий, оптимизатор |
Точность | фп32, фп16, int8 |
Режим | обучение, вывод |
Совместимость | Fairseq, Обнимающее лицо, DeepSpeed |
Алгоритм декодирования | поиск луча, поиск разнонаправленных лучей, выборка, CRF |
Другие | квантование градиентной связи, автоматическая настройка алгоритма GEMM |
В таблице ниже показаны режимы работы и точность, которые в настоящее время поддерживаются различными моделями.
Модели | fp16 Обучение | fp16 Вывод | int8 Обучение | int8 Вывод |
---|---|---|---|---|
Трансформатор | Да | Да | Да | Да |
БЕРТ | Да | Да | Да | Да |
GPT2 | Да | Да | Да | Да |
БАРТ | Да | Да | - | - |
Т5 | - | Да | - | - |
МТ5 | - | Да | - | - |
XGLM | - | Да | - | - |
ВИТ | Да | Да | Да | Да |
ВАЭ | - | Да | - | - |
Многоязычный | - | Да | - | Да |
МО | - | Да | - | - |
Мы тестируем ускорение обучения и вывода LightSeq, используя точность смешивания fp16 и int8 на моделях Transformer и BERT. Базовым уровнем является точность смешивания PyTorch fp16. Обучающие эксперименты тестируются на одном графическом процессоре A100, а эксперименты по выводу — на восьми графических процессорах A100.
Дополнительные результаты производительности доступны здесь.
Размер пакетного токена | PyTorch QAT | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
512 | 0,36 | 1,99 | 1,86 |
1024 | 0,37 | 1,78 | 1,69 |
2048 | 0,37 | 1,56 | 1,50 |
4096 | 0,39 | 1,47 | 1.44 |
8192 | 0,41 | 1.44 | 1.44 |
15000 | 0,43 | 1.44 | 1.44 |
Размер пакетного токена | PyTorch QAT | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
8 | 0,45 | 2.12 | 1,99 |
16 | 0,44 | 1,92 | 1,80 |
32 | 0,42 | 1,59 | 1,52 |
64 | 0,46 | 1,62 | 1,58 |
128 | 0,46 | 1,74 | 1,70 |
256 | 0,46 | 1,68 | 1,73 |
Размер партии | Длина последовательности | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 8.00 | 9.33 |
1 | 32 | 6.48 | 7.38 |
1 | 128 | 6.24 | 6.19 |
8 | 8 | 9.38 | 10.71 |
8 | 32 | 8.24 | 8,75 |
8 | 128 | 6,83 | 7.28 |
32 | 8 | 11.82 | 14.44 |
32 | 32 | 9,68 | 11.15 |
32 | 128 | 6,68 | 7,74 |
Размер партии | Длина последовательности | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 9.22 | 9,87 |
1 | 32 | 10.51 | 11.30 |
1 | 128 | 9,96 | 10.85 |
8 | 8 | 9,88 | 10.33 |
8 | 32 | 7,79 | 8.22 |
8 | 128 | 4.04 | 4.35 |
32 | 8 | 10.60 | 11.02 |
32 | 32 | 8.11 | 8,85 |
32 | 128 | 1,82 | 2.04 |
Вы можете установить LightSeq из PyPI, который поддерживает только Python 3.6–3.8 в Linux:
pip установить LightSeq
Вы также можете собрать из исходного кода:
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 pip install -e $PROJECT_DIR
Подробное описание здания доступно здесь.
Здесь мы приводим несколько примеров, демонстрирующих использование LightSeq. Для получения более подробной информации обратитесь к полному руководству пользователя и примерам.
Вы можете использовать модули LightSeq для создания собственных моделей. Ниже приведен пример создания слоя кодера Transformer.
Сначала импортируйте модуль кодировщика LightSeq Transformer:
из Lightseq.training импорт LSTransformerEncoderLayer
Затем создайте конфигурацию кодировщика и создайте слой кодировщика LightSeq Transformer, инициализированный этой конфигурацией:
конфигурация = LSTransformerEncoderLayer.get_config(max_batch_tokens=4096,max_seq_len=512,hidden_size=1024,intermediate_size=4096,nhead=16,attn_prob_d ropout_ratio=0.1,activation_dropout_ratio=0.1,hidden_dropout_ratio=0.1,pre_layer_norm=True,activation_fn="relu",fp16=True,local_rank=0, ) Layer = LSTransformerEncoderLayer (конфигурация)
Помимо слоев кодировщика, другие модули можно создавать с использованием аналогичных методов, а затем обучать их как обычные модели PyTorch.
Больше возможностей использования доступно здесь.
LightSeq интегрирует все быстрые и молниеносные модули в Fairseq.
Сначала установите два следующих требования:
pip install fairseq==0.10.2 священные
Вы можете обучить задачу перевода fp16 с точностью смешивания на наборе данных wmt14 en2de следующим образом:
примеры sh/training/fairseq/ls_fairseq_wmt14en2de.sh
(Необязательно) Затем вы можете начать обучение с точностью смешивания int8 на основе моделей предварительного обучения fp16:
примеры sh/training/fairseq/ls_fairseq_quant_wmt14en2de.sh
Больше возможностей использования доступно здесь.
LightSeq заменяет слои кодера Hugging Face BERT быстрыми слоями LightSeq.
Сначала вам следует установить эти требования:
pip install трансформаторы, наборы данных seqeval
Прежде чем приступить к следующему обучению, вам необходимо переключиться в следующий каталог:
CD примеры/обучение/huggingface/берт
Затем вы сможете легко настроить BERT для различных задач. Взяв в качестве примера задачу распознавания именованного объекта, вы можете обучить BERT со смешанной точностью fp16, используя:
python Task_ner/run_ner.sh
(Необязательно) Вы также можете начать обучение int8 mix-precision на основе моделей предварительного обучения fp16:
python Task_ner/run_quant_ner.sh
Больше возможностей использования доступно здесь.
После обучения с использованием приведенных выше сценариев вы можете быстро вывести модели с помощью LightSeq.
Вам следует преобразовать веса fp16 PyTorch в LightSeq protobuf или HDF5:
экспорт Python/fairseq/ls_fs_transformer_export.py
(Необязательно) Вы также можете преобразовать веса int8 PyTorch в protobuf LightSeq или HDF5:
экспорт Python/fairseq/ls_fs_quant_transformer_export.py
Получив веса LightSeq, вы можете быстро вывести их, используя следующий код:
импортируйте Lightseq.inference как lsimodel = lsi.Transformer(MODEL_PATH, MAX_BATCH_SIZE)results = model.infer([[63, 47, 65, 1507, 88, 74, 10, 2057, 362, 9, 284, 6, 2, 1 ]])
Здесь MODEL_PATH — это путь к весам LightSeq, а MAX_BATCH_SIZE — максимальный размер пакета входных предложений.
Вы также можете быстро определить веса int8 LightSeq, заменив lsi.Transformer
на lsi.QuantTransformer
.
Больше возможностей использования доступно здесь.
Мы предоставляем пример end2end bert-base, чтобы увидеть, насколько быстро Lightseq сравнивается с оригинальным Hugging Face.
Сначала вам следует установить требования и перейти в указанный каталог:
pip install Transformerscd примеры/вывод/python
Затем вы можете проверить производительность, просто выполнив следующие команды. hf_bert_export.py
используется для преобразования весов PyTorch в protobuf LightSeq или HDF5.
экспорт Python/huggingface/hf_bert_export.py тест Python/ls_bert.py
Больше возможностей использования доступно здесь.
Мы предоставляем образ докера, который содержит tritonserver и библиотеку динамической компоновки LightSeq, и вы можете развернуть сервер вывода, просто заменив файл модели собственным файлом модели.
sudo docker pull hexisyztem/tritonserver_lightseq:22.01-1
Больше возможностей использования доступно здесь.
Если вы используете LightSeq в своих исследованиях, цитируйте следующие статьи.
@InProceedings{wang2021lightseq, title = "{L}ight{S}eq: A High Performance Inference Library for Transformers", author = "Wang, Xiaohui and Xiong, Ying and Wei, Yang and Wang, Mingxuan and Li, Lei", booktitle = "Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies: Industry Papers (NAACL-HLT)", month = jun, year = "2021", publisher = "Association for Computational Linguistics", pages = "113--120", } @article{wang2021lightseq2, title={LightSeq2: Accelerated Training for Transformer-based Models on GPUs}, author={Wang, Xiaohui and Xiong, Ying and Qian, Xian and Wei, Yang and Li, Lei and Wang, Mingxuan}, journal={arXiv preprint arXiv:2110.05722}, year={2021} }
Команда LightSeq нанимает стажеров и штатных сотрудников с опытом работы в области систем глубокого обучения, обработки естественного языка, компьютерного зрения, речи и т. д . Мы находимся в Пекине и Шанхае. Если вы заинтересованы, отправьте свое резюме по адресу [email protected].