Versionshinweise
Einführung
Support-Matrix
Leistung
Beschleunigung des Transformer-Trainings
Beschleunigung des BERT-Trainings
Beschleunigung der Transformatorinferenz
Beschleunigung der BERT-Inferenz
Installation
Von PyPI installieren
Aus der Quelle erstellen
Erste Schritte
LightSeq-Training von Grund auf
LightSeq-Schulung von Fairseq
LightSeq-Training von Hugging Face BERT
LightSeq-Inferenz von Fairseq
LightSeq-Inferenz von Hugging Face BERT
LightSeq-Bereitstellung mit Inference Server
Zitieren Sie uns
Wir stellen ein!
[2022.10.25] Veröffentlichung der Version v3.0.0, die int8-Training und -Inferenz mit gemischter Präzision unterstützt. [中文介绍]
[2021.06.18] Version v2.0.0 veröffentlichen, die fp16-Training mit gemischter Präzision unterstützt. [中文介绍]
[2019.12.06] Version v1.0.0 veröffentlichen, die fp16-Inferenz mit gemischter Genauigkeit unterstützt. [中文介绍]
LightSeq ist eine leistungsstarke Trainings- und Inferenzbibliothek für die Sequenzverarbeitung und -generierung, die in CUDA implementiert ist. Es ermöglicht eine hocheffiziente Berechnung moderner NLP- und CV-Modelle wie BERT, GPT, Transformer usw. Es eignet sich daher am besten für maschinelle Übersetzung, Textgenerierung, Bildklassifizierung und andere sequenzbezogene Aufgaben.
Die Bibliothek basiert auf der offiziellen CUDA-Bibliothek (cuBLAS, Thrust, CUB) und benutzerdefinierten Kernelfunktionen, die speziell für die Transformer-Modellfamilie zusammengeführt und optimiert wurden. Zusätzlich zu den Modellkomponenten bietet die Inferenzbibliothek auch eine einfach bereitzustellende Modellverwaltung und ein Bereitstellungs-Backend auf Basis des TensorRT-Inferenzservers. Mit LightSeq kann man mit wenig zusätzlichem Code problemlos eine modifizierte Transformer-Architektur entwickeln.
Das LightSeq-Training und die Inferenz sind sehr schnell. Nachfolgend finden Sie die Gesamtleistung:
Das LightSeq fp16-Training erreicht eine bis zu dreifache Beschleunigung im Vergleich zum PyTorch fp16-Training.
Das LightSeq int8-Training erreicht eine bis zu fünffache Geschwindigkeitssteigerung im Vergleich zu PyTorch QAT (d. h. quantisierungsbewusstes Training).
Die LightSeq-fp16- und die int8-Inferenz erzielen eine Geschwindigkeitssteigerung von bis zu 12x bzw. 15x im Vergleich zur PyTorch-fp16-Inferenz.
LightSeq unterstützt mehrere Funktionen, die in der folgenden Tabelle aufgeführt sind.
Merkmale | Support-Liste |
---|---|
Modell | Transformator, BERT, BART, GPT2, ViT, T5, MT5, XGLM, VAE, Mehrsprachig, MoE |
Schicht | Einbettung, Encoder, Decoder, Kriterium, Optimierer |
Präzision | fp32, fp16, int8 |
Modus | Training, Schlussfolgerung |
Kompatibilität | Fairseq, Hugging Face, DeepSpeed |
Dekodierungsalgorithmus | Strahlsuche, vielfältige Strahlsuche, Probenahme, CRF |
Andere | Quantisierung der Gradientenkommunikation, automatisch abgestimmter GEMM-Algorithmus |
Die folgende Tabelle zeigt die Laufmodi und die Präzision, die derzeit von verschiedenen Modellen unterstützt werden.
Modelle | fp16 Training | fp16 Schlussfolgerung | int8-Schulung | int8-Inferenz |
---|---|---|---|---|
Transformator | Ja | Ja | Ja | Ja |
BERT | Ja | Ja | Ja | Ja |
GPT2 | Ja | Ja | Ja | Ja |
BART | Ja | Ja | - | - |
T5 | - | Ja | - | - |
MT5 | - | Ja | - | - |
XGLM | - | Ja | - | - |
ViT | Ja | Ja | Ja | Ja |
VAE | - | Ja | - | - |
Mehrsprachig | - | Ja | - | Ja |
MoE | - | Ja | - | - |
Wir testen die Beschleunigung des LightSeq-Trainings und der Inferenz mit fp16- und int8-Mix-Präzision auf Transformer- und BERT-Modellen. Die Basislinie ist die PyTorch fp16-Mischgenauigkeit. Trainingsexperimente werden auf einer A100-GPU und Inferenzexperimente auf acht A100-GPUs getestet.
Weitere Leistungsergebnisse finden Sie hier.
Batch-Token-Größe | 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 |
Batch-Token-Größe | 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 |
Chargengröße | Sequenzlänge | 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 |
Chargengröße | Sequenzlänge | 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 |
Sie können LightSeq von PyPI installieren, das unter Linux nur Python 3.6 bis 3.8 unterstützt:
pip install Lightseq
Sie können auch aus dem Quellcode erstellen:
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 pip install -e $PROJECT_DIR
Eine ausführliche Baueinführung finden Sie hier.
Wir stellen hier mehrere Beispiele zur Verfügung, um die Verwendung von LightSeq zu zeigen. Weitere Einzelheiten finden Sie im vollständigen Benutzerhandbuch und in den Beispielen.
Sie können die von LightSeq bereitgestellten Module verwenden, um Ihre eigenen Modelle zu erstellen. Im Folgenden finden Sie ein Beispiel für den Aufbau einer Transformer-Encoderschicht.
Importieren Sie zunächst das LightSeq Transformer-Encodermodul:
aus Lightseq.training LSTransformerEncoderLayer importieren
Erstellen Sie dann eine Encoderkonfiguration und eine LightSeq Transformer-Encoderschicht, die mit der Konfiguration initialisiert wird:
config = 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(config)
Zusätzlich zu Encoder-Schichten können die anderen Module mit ähnlichen Methoden erstellt und dann als normale PyTorch-Modelle trainiert werden.
Weitere Nutzungsmöglichkeiten finden Sie hier.
LightSeq integriert alle Fast- und Lightning-Module in Fairseq.
Installieren Sie zunächst die beiden folgenden Anforderungen:
pip install fairseq==0.10.2 sacremoses
Sie können eine fp16-Mix-Precision-Übersetzungsaufgabe für den wmt14 en2de-Datensatz trainieren, indem Sie:
sh examples/training/fairseq/ls_fairseq_wmt14en2de.sh
(Optional) Anschließend können Sie das int8-Mix-Präzisionstraining auf der Grundlage von fp16-Vortrainingsmodellen starten, indem Sie:
sh examples/training/fairseq/ls_fairseq_quant_wmt14en2de.sh
Weitere Nutzungsmöglichkeiten finden Sie hier.
LightSeq ersetzt die Encoderschichten von Hugging Face BERT durch LightSeq-Schnellschichten.
Zuerst sollten Sie diese Voraussetzungen installieren:
Pip installiert Transformers-Seqeval-Datensätze
Bevor Sie das nächste Training durchführen, müssen Sie in das folgende Verzeichnis wechseln:
CD-Beispiele/training/huggingface/bert
Dann können Sie BERT ganz einfach für verschiedene Aufgaben optimieren. Am Beispiel einer Aufgabe zur Erkennung benannter Entitäten können Sie das BERT mit fp16 gemischter Genauigkeit trainieren, indem Sie Folgendes verwenden:
Python task_ner/run_ner.sh
(Optional) Sie können das int8-Mix-Präzisionstraining auch auf der Grundlage von fp16-Vortrainingsmodellen starten, indem Sie:
Python task_ner/run_quant_ner.sh
Weitere Nutzungsmöglichkeiten finden Sie hier.
Nach dem Training mit den oben genannten Skripten können Sie mit LightSeq schnell auf die Modelle schließen.
Sie sollten die fp16-PyTorch-Gewichte in LightSeq-Protobuf oder HDF5 umwandeln:
python export/fairseq/ls_fs_transformer_export.py
(Optional) Sie können die int8 PyTorch-Gewichte auch in LightSeq protobuf oder HDF5 umwandeln:
python export/fairseq/ls_fs_quant_transformer_export.py
Sobald Sie die LightSeq-Gewichte erhalten haben, können Sie diese mithilfe des folgenden Codes schnell ableiten:
importiere Lightseq.inference als 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 ]])
Hier ist MODEL_PATH der Pfad Ihrer LightSeq-Gewichte und MAX_BATCH_SIZE die maximale Stapelgröße Ihrer Eingabesätze.
Sie können die int8 LightSeq-Gewichte auch schnell ableiten, indem Sie lsi.Transformer
durch lsi.QuantTransformer
ersetzen.
Weitere Nutzungsmöglichkeiten finden Sie hier.
Wir stellen ein End2End-Bert-Base-Beispiel bereit, um zu sehen, wie schnell Lightseq im Vergleich zum ursprünglichen Hugging Face ist.
Zuerst sollten Sie die Anforderungen installieren und das angegebene Verzeichnis suchen:
pip install TransformersCD-Beispiele/Inferenz/Python
Anschließend können Sie die Leistung überprüfen, indem Sie einfach die folgenden Befehle ausführen. hf_bert_export.py
wird verwendet, um PyTorch-Gewichte in LightSeq-Protobuf oder HDF5 umzuwandeln.
Python-Export/huggingface/hf_bert_export.py python test/ls_bert.py
Weitere Nutzungsmöglichkeiten finden Sie hier.
Wir stellen ein Docker-Image bereit, das Tritonserver und die dynamische Linkbibliothek von LightSeq enthält. Sie können einen Inferenzserver bereitstellen, indem Sie einfach die Modelldatei durch Ihre eigene Modelldatei ersetzen.
sudo docker pull hexisyztem/tritonserver_lightseq:22.01-1
Weitere Nutzungsmöglichkeiten finden Sie hier.
Wenn Sie LightSeq in Ihrer Forschung verwenden, zitieren Sie bitte die folgenden Artikel.
@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} }
Das LightSeq-Team stellt Praktikanten und Vollzeitkräfte mit Erfahrung in Deep-Learning-Systemen, Verarbeitung natürlicher Sprache, Computer Vision, Sprache usw. ein. Wir sind in Peking und Shanghai ansässig. Bei Interesse senden Sie bitte Ihren Lebenslauf an [email protected].