Notas de la versión
Introducción
Matriz de soporte
Actuación
Aceleración del entrenamiento de transformadores
Aceleración del entrenamiento BERT
Aceleración de la inferencia del transformador
Aceleración de la inferencia BERT
Instalación
Instalar desde PyPI
Construir desde la fuente
Empezando
Entrenamiento LightSeq desde cero
Entrenamiento LightSeq de Fairseq
Entrenamiento LightSeq desde Hugging Face BERT
Inferencia LightSeq de Fairseq
Inferencia de LightSeq a partir de la cara abrazada BERT
Implementación de LightSeq mediante el servidor de inferencia
Cítanos
¡Estamos contratando!
[2022.10.25] Versión v3.0.0, que admite entrenamiento e inferencia de precisión mixta int8. [中文介绍]
[2021.06.18] Lanzamiento de la versión v2.0.0, que admite el entrenamiento de precisión mixta fp16. [中文介绍]
[2019.12.06] Versión v1.0.0, que admite la inferencia de precisión mixta fp16. [中文介绍]
LightSeq es una biblioteca de inferencia y entrenamiento de alto rendimiento para el procesamiento y generación de secuencias implementada en CUDA. Permite un cálculo altamente eficiente de modelos NLP y CV modernos como BERT, GPT, Transformer, etc. Por lo tanto, es más útil para traducción automática, generación de texto, clasificación de imágenes y otras tareas relacionadas con secuencias.
La biblioteca está construida sobre la biblioteca oficial CUDA (cuBLAS, Thrust, CUB) y funciones de kernel personalizadas que están especialmente fusionadas y optimizadas para la familia de modelos Transformer. Además de los componentes del modelo, la biblioteca de inferencia también proporciona una gestión de modelos fácil de implementar y un backend de servicio basado en TensorRT Inference Server. Con LightSeq, se puede desarrollar fácilmente una arquitectura Transformer modificada con poco código adicional.
El entrenamiento y la inferencia de LightSeq son muy rápidos. A continuación se muestra el rendimiento general:
El entrenamiento LightSeq fp16 logra una aceleración de hasta 3 veces , en comparación con el entrenamiento PyTorch fp16.
El entrenamiento LightSeq int8 logra una aceleración de hasta 5 veces , en comparación con PyTorch QAT (es decir, entrenamiento consciente de la cuantificación).
La inferencia LightSeq fp16 e int8 logran una aceleración de hasta 12x y 15x , en comparación con la inferencia PyTorch fp16, respectivamente.
LightSeq admite múltiples funciones, que se muestran en la siguiente tabla.
Características | Lista de soporte |
---|---|
Modelo | Transformador, BERT, BART, GPT2, ViT, T5, MT5, XGLM, VAE, multilingüe, MoE |
Capa | incrustación, codificador, decodificador, criterio, optimizador |
Precisión | fp32, fp16, int8 |
Modo | entrenamiento, inferencia |
Compatibilidad | Fairseq, abrazando la cara, DeepSpeed |
Algoritmo de decodificación | búsqueda de haces, búsqueda de haces diversos, muestreo, CRF |
Otros | Cuantización de comunicación en gradiente, algoritmo GEMM de ajuste automático. |
La siguiente tabla muestra los modos de funcionamiento y la precisión admitidos actualmente por los diferentes modelos.
Modelos | Entrenamiento fp16 | fp16 Inferencia | Entrenamiento int8 | int8 Inferencia |
---|---|---|---|---|
Transformador | Sí | Sí | Sí | Sí |
BERT | Sí | Sí | Sí | Sí |
GPT2 | Sí | Sí | Sí | Sí |
BART | Sí | Sí | - | - |
T5 | - | Sí | - | - |
MT5 | - | Sí | - | - |
XGLM | - | Sí | - | - |
ViT | Sí | Sí | Sí | Sí |
vae | - | Sí | - | - |
Plurilingüe | - | Sí | - | Sí |
Ministerio de Educación | - | Sí | - | - |
Probamos la aceleración del entrenamiento y la inferencia de LightSeq utilizando precisión mixta fp16 e int8 en modelos Transformer y BERT. La línea de base es la precisión mixta de PyTorch fp16. Los experimentos de entrenamiento se prueban en una GPU A100 y los experimentos de inferencia se prueban en ocho GPU A100.
Más resultados de rendimiento están disponibles aquí.
Tamaño del token de lote | QAT de PyTorch | 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 |
Tamaño del token de lote | QAT de PyTorch | 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 |
Tamaño del lote | Longitud de la secuencia | 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 |
Tamaño del lote | Longitud de la secuencia | 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 |
Puede instalar LightSeq desde PyPI, que solo admite Python 3.6 a 3.8 en Linux:
instalación de pip lightseq
También puedes construir desde la fuente:
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 instalación de pip -e $PROJECT_DIR
La introducción detallada del edificio está disponible aquí.
Aquí proporcionamos varios ejemplos para mostrar el uso de LightSeq. Consulte la guía del usuario completa y los ejemplos para obtener más detalles.
Puede utilizar los módulos proporcionados por LightSeq para crear sus propios modelos. El siguiente es un ejemplo de cómo construir una capa de codificador Transformer.
Primero, importe el módulo codificador LightSeq Transformer:
desde lightseq.training importe LSTransformerEncoderLayer
Luego cree una configuración de codificador y cree una capa de codificador LightSeq Transformer inicializada con la configuración:
configuración = 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, )capa = LSTransformerEncoderLayer(config)
Además de las capas del codificador, los otros módulos se pueden crear utilizando métodos similares y luego entrenarse como modelos normales de PyTorch.
Más uso está disponible aquí.
LightSeq integra todos los módulos rápidos y relámpagos en Fairseq.
Primero instale los dos requisitos siguientes:
pip install fairseq==0.10.2 sacremoses
Puede entrenar una tarea de traducción de precisión mixta fp16 en el conjunto de datos wmt14 en2de mediante:
ejemplos sh/formación/fairseq/ls_fairseq_wmt14en2de.sh
(Opcional) Luego puede iniciar el entrenamiento de precisión mixta int8 sobre la base de los modelos de preentrenamiento fp16 mediante:
ejemplos sh/formación/fairseq/ls_fairseq_quant_wmt14en2de.sh
Más uso está disponible aquí.
LightSeq reemplaza las capas del codificador de Hugging Face BERT con capas rápidas de LightSeq.
Primero debes instalar estos requisitos:
pip install transformadores conjuntos de datos seqeval
Antes de realizar la siguiente capacitación, debe cambiar al siguiente directorio:
ejemplos de cd/formación/huggingface/bert
Luego podrá ajustar fácilmente BERT para diferentes tareas. Tomando como ejemplo la tarea de reconocimiento de entidades con nombre, puede entrenar el BERT con precisión mixta fp16 usando:
Python task_ner/run_ner.sh
(Opcional) También puede iniciar el entrenamiento de precisión mixta int8 sobre la base de los modelos de preentrenamiento fp16 mediante:
Python task_ner/run_quant_ner.sh
Más uso está disponible aquí.
Después de entrenar con los scripts anteriores, puede inferir rápidamente los modelos utilizando LightSeq.
Debe transformar los pesos de PyTorch fp16 a LightSeq protobuf o HDF5:
exportación de Python/fairseq/ls_fs_transformer_export.py
(Opcional) También puede transformar los pesos de PyTorch int8 a LightSeq protobuf o HDF5:
exportación de Python/fairseq/ls_fs_quant_transformer_export.py
Una vez que obtenga los pesos de LightSeq, podrá inferirlos rápidamente utilizando el siguiente código:
importar lightseq.inference como 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 ]])
Aquí MODEL_PATH es la ruta de sus pesos de LightSeq y MAX_BATCH_SIZE es el tamaño de lote máximo de sus oraciones de entrada.
También puede inferir rápidamente los pesos de int8 LightSeq reemplazando lsi.Transformer
con lsi.QuantTransformer
.
Más uso está disponible aquí.
Proporcionamos un ejemplo de bert-base end2end para ver qué tan rápido se compara Lightseq con Hugging Face original.
Primero debe instalar los requisitos y ubicarlos en el directorio especificado:
pip install ejemplos de transformadorescd/inferencia/python
Luego puede verificar el rendimiento simplemente ejecutando los siguientes comandos. hf_bert_export.py
se utiliza para transformar los pesos de PyTorch a LightSeq protobuf o HDF5.
exportación de Python/huggingface/hf_bert_export.py prueba de Python/ls_bert.py
Más uso está disponible aquí.
Proporcionamos una imagen de Docker que contiene tritonserver y la biblioteca de vínculos dinámicos de LightSeq, y puede implementar un servidor de inferencia simplemente reemplazando el archivo de modelo con su propio archivo de modelo.
sudo docker pull hexisyztem/tritonserver_lightseq:22.01-1
Más uso está disponible aquí.
Si utiliza LightSeq en su investigación, cite los siguientes artículos.
@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} }
El equipo de LightSeq está contratando pasantes y FTE con experiencia en sistemas de aprendizaje profundo, procesamiento del lenguaje natural, visión por computadora, habla, etc. Estamos basados en Beijing y Shanghai. Si está interesado, envíe su currículum a [email protected].