Notes de version
Introduction
Matrice de support
Performance
Accélération de la formation des transformateurs
Accélération de la formation BERT
Accélération de l'inférence du transformateur
Accélération de l'inférence BERT
Installation
Installer depuis PyPI
Construire à partir de la source
Commencer
Formation LightSeq à partir de zéro
Formation LightSeq de Fairseq
Formation LightSeq de Hugging Face BERT
Inférence LightSeq à partir de Fairseq
Inférence LightSeq à partir de Hugging Face BERT
Déploiement de LightSeq à l'aide du serveur d'inférence
Cite-nous
Nous recrutons !
[2022.10.25] Version v3.0.0, qui prend en charge la formation et l'inférence de précision mixte int8. [中文介绍]
[2021.06.18] Version v2.0.0, qui prend en charge l'entraînement fp16 à précision mixte. [中文介绍]
[2019.12.06] Version v1.0.0, qui prend en charge l'inférence fp16 à précision mixte. [中文介绍]
LightSeq est une bibliothèque de formation et d'inférence hautes performances pour le traitement et la génération de séquences implémentée dans CUDA. Il permet un calcul très efficace de modèles NLP et CV modernes tels que BERT, GPT, Transformer, etc. Il est donc particulièrement utile pour la traduction automatique, la génération de texte, la classification d'images et d'autres tâches liées aux séquences.
La bibliothèque est construite sur la bibliothèque officielle CUDA (cuBLAS, Thrust, CUB) et sur des fonctions de noyau personnalisées spécialement fusionnées et optimisées pour la famille de modèles Transformer. En plus des composants de modèle, la bibliothèque d'inférence fournit également une gestion de modèle facile à déployer et un backend de service basé sur le serveur d'inférence TensorRT. Avec LightSeq, on peut facilement développer une architecture Transformer modifiée avec peu de code supplémentaire.
La formation et l’inférence LightSeq sont très rapides. Ci-dessous la performance globale :
La formation LightSeq fp16 atteint une accélération jusqu'à 3x par rapport à la formation PyTorch fp16.
La formation LightSeq int8 atteint une accélération jusqu'à 5x , par rapport à PyTorch QAT (c'est-à-dire une formation prenant en compte la quantification).
L'inférence LightSeq fp16 et int8 atteint une accélération allant jusqu'à 12x et 15x , par rapport à l'inférence PyTorch fp16, respectivement.
LightSeq prend en charge plusieurs fonctionnalités, indiquées dans le tableau ci-dessous.
Caractéristiques | Liste de soutien |
---|---|
Modèle | Transformateur, BERT, BART, GPT2, ViT, T5, MT5, XGLM, VAE, multilingue, MoE |
Couche | intégration, encodeur, décodeur, critère, optimiseur |
Précision | fp32, fp16, int8 |
Mode | formation, inférence |
Compatibilité | Fairseq, visage câlin, DeepSpeed |
Algorithme de décodage | recherche de faisceaux, recherche de faisceaux diversifiés, échantillonnage, CRF |
Autres | quantification de communication par gradient, algorithme GEMM à réglage automatique |
Le tableau ci-dessous montre les modes de fonctionnement et la précision actuellement pris en charge par différents modèles.
Modèles | fp16 Formation | fp16 Inférence | int8 Formation | int8 Inférence |
---|---|---|---|---|
Transformateur | Oui | Oui | Oui | Oui |
BERTE | Oui | Oui | Oui | Oui |
GPT2 | Oui | Oui | Oui | Oui |
BART | Oui | Oui | - | - |
T5 | - | Oui | - | - |
MT5 | - | Oui | - | - |
XGLM | - | Oui | - | - |
ViT | Oui | Oui | Oui | Oui |
VAE | - | Oui | - | - |
Multilingue | - | Oui | - | Oui |
Ministère de l'Environnement | - | Oui | - | - |
Nous testons l'accélération de la formation et de l'inférence LightSeq en utilisant la précision du mixage fp16 et int8 sur les modèles Transformer et BERT. La ligne de base est la précision du mixage PyTorch fp16. Les expériences de formation sont testées sur un GPU A100 et les expériences d'inférence sont testées sur huit GPU A100.
D’autres résultats de performances sont disponibles ici.
Taille du jeton de lot | QATPyTorch | 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 |
Taille du jeton de lot | QATPyTorch | 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 |
Taille du lot | Longueur de la séquence | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 8h00 | 9.33 |
1 | 32 | 6.48 | 7.38 |
1 | 128 | 6.24 | 6.19 |
8 | 8 | 9h38 | 10.71 |
8 | 32 | 8.24 | 8h75 |
8 | 128 | 6,83 | 7.28 |
32 | 8 | 11.82 | 14h44 |
32 | 32 | 9.68 | 11h15 |
32 | 128 | 6,68 | 7,74 |
Taille du lot | Longueur de la séquence | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 9.22 | 9,87 |
1 | 32 | 10.51 | 11h30 |
1 | 128 | 9,96 | 10h85 |
8 | 8 | 9,88 | 10h33 |
8 | 32 | 7,79 | 8.22 |
8 | 128 | 4.04 | 4.35 |
32 | 8 | 10h60 | 11.02 |
32 | 32 | 8.11 | 8,85 |
32 | 128 | 1,82 | 2.04 |
Vous pouvez installer LightSeq depuis PyPI, qui prend uniquement en charge Python 3.6 à 3.8 sous Linux :
pip installer Lightseq
Vous pouvez également construire à partir des sources :
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 pip install -e $PROJECT_DIR
Une introduction détaillée du bâtiment est disponible ici.
Nous fournissons ici plusieurs exemples pour montrer l’utilisation de LightSeq. Reportez-vous au guide d'utilisation complet et aux exemples pour plus de détails.
Vous pouvez utiliser les modules fournis par LightSeq pour créer vos propres modèles. Voici un exemple de création d’une couche d’encodeur Transformer.
Tout d’abord, importez le module d’encodeur LightSeq Transformer :
à partir de Lightseq.training, importez LSTransformerEncoderLayer
Créez ensuite une configuration d'encodeur et créez une couche d'encodeur LightSeq Transformer initialisée avec la configuration :
configuration = 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, )couche = LSTransformerEncoderLayer(config)
En plus des couches d'encodeur, les autres modules peuvent être créés à l'aide de méthodes similaires, puis être formés comme des modèles PyTorch normaux.
Plus d’utilisation est disponible ici.
LightSeq intègre tous les modules rapides et éclair dans Fairseq.
Installez d’abord les deux exigences suivantes :
pip install fairseq==0.10.2 sacremoses
Vous pouvez entraîner une tâche de traduction de précision mixte fp16 sur l'ensemble de données wmt14 en2de en :
sh exemples/training/fairseq/ls_fairseq_wmt14en2de.sh
(Facultatif) Ensuite, vous pouvez démarrer l'entraînement int8 mix-precision sur la base des modèles de pré-entraînement fp16 en :
sh exemples/training/fairseq/ls_fairseq_quant_wmt14en2de.sh
Plus d’utilisation est disponible ici.
LightSeq remplace les couches d'encodeur de Hugging Face BERT par des couches rapides LightSeq.
Vous devez d’abord installer ces exigences :
pip installer des ensembles de données séquentiels de transformateurs
Avant de procéder à la prochaine formation, vous devez basculer vers le répertoire suivant :
exemples de cd/formation/huggingface/bert
Ensuite, vous pouvez facilement affiner BERT pour différentes tâches. En prenant comme exemple la tâche de reconnaissance d'entité nommée, vous pouvez entraîner le BERT avec la précision mixte fp16 en utilisant :
python task_ner/run_ner.sh
(Facultatif) Vous pouvez également démarrer l'entraînement int8 mix-precision sur la base des modèles de pré-entraînement fp16 en :
python task_ner/run_quant_ner.sh
Plus d’utilisation est disponible ici.
Après une formation à l'aide des scripts ci-dessus, vous pouvez rapidement déduire les modèles à l'aide de LightSeq.
Vous devez transformer les poids PyTorch fp16 en protobuf LightSeq ou HDF5 :
python export/fairseq/ls_fs_transformer_export.py
(Facultatif) Vous pouvez également transformer les poids int8 PyTorch en protobuf LightSeq ou HDF5 :
python export/fairseq/ls_fs_quant_transformer_export.py
Une fois les poids LightSeq obtenus, vous pouvez les déduire rapidement à l'aide du code suivant :
importer Lightseq.inference en tant que 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 ]])
Ici, MODEL_PATH est le chemin de vos poids LightSeq et MAX_BATCH_SIZE est la taille maximale du lot de vos phrases d'entrée.
Vous pouvez également déduire rapidement les poids int8 LightSeq en remplaçant le lsi.Transformer
par lsi.QuantTransformer
.
Plus d’utilisation est disponible ici.
Nous fournissons un exemple de base bert end2end pour voir à quelle vitesse Lightseq est comparé à Hugging Face original.
Vous devez d’abord installer la configuration requise et vous localiser dans le répertoire spécifié :
pip install transformerscd exemples/inférence/python
Ensuite, vous pouvez vérifier les performances en exécutant simplement les commandes suivantes. hf_bert_export.py
est utilisé pour transformer les poids PyTorch en protobuf LightSeq ou HDF5.
python export/huggingface/hf_bert_export.py test python/ls_bert.py
Plus d’utilisation est disponible ici.
Nous fournissons une image Docker qui contient tritonserver et la bibliothèque de liens dynamiques de LightSeq, et vous pouvez déployer un serveur d'inférence en remplaçant simplement le fichier modèle par votre propre fichier modèle.
sudo docker pull hexisyztem/tritonserver_lightseq:22.01-1
Plus d’utilisation est disponible ici.
Si vous utilisez LightSeq dans vos recherches, veuillez citer les articles suivants.
@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} }
L'équipe LightSeq recrute des stagiaires et des ETP ayant une expérience dans les systèmes d'apprentissage profond, le traitement du langage naturel, la vision par ordinateur, la parole, etc. Nous sommes basés à Pékin et à Shanghai. Si vous êtes intéressé, veuillez envoyer votre CV à [email protected].