Notas de versão
Introdução
Matriz de Apoio
Desempenho
Aceleração do treinamento do transformador
Aceleração do treinamento BERT
Aceleração da inferência do transformador
Aceleração da inferência de BERT
Instalação
Instalar a partir do PyPI
Construir a partir da fonte
Começando
Treinamento LightSeq do zero
Treinamento LightSeq da Fairseq
Treinamento LightSeq de Hugging Face BERT
Inferência LightSeq da Fairseq
Inferência LightSeq do Hugging Face BERT
Implantação LightSeq usando servidor de inferência
Cite-nos
Estamos contratando!
[2022.10.25] Versão v3.0.0, que suporta treinamento e inferência de precisão mista int8. [中文介绍]
[2021.06.18] Versão v2.0.0, que oferece suporte ao treinamento de precisão mista fp16. [中文介绍]
[2019.12.06] Versão v1.0.0, que suporta inferência de precisão mista fp16. [中文介绍]
LightSeq é uma biblioteca de treinamento e inferência de alto desempenho para processamento e geração de sequências implementada em CUDA. Ele permite o cálculo altamente eficiente de modelos modernos de PNL e CV, como BERT, GPT, Transformer, etc. É, portanto, mais útil para tradução automática, geração de texto, classificação de imagens e outras tarefas relacionadas a sequências.
A biblioteca é construída sobre a biblioteca oficial CUDA (cuBLAS, Thrust, CUB) e funções de kernel personalizadas que são especialmente fundidas e otimizadas para a família de modelos Transformer. Além dos componentes do modelo, a biblioteca de inferência também fornece gerenciamento de modelo fácil de implantar e servir back-end com base no servidor de inferência TensorRT. Com LightSeq, é possível desenvolver facilmente uma arquitetura Transformer modificada com pouco código adicional.
O treinamento e a inferência do LightSeq são muito rápidos. Abaixo está o desempenho geral:
O treinamento LightSeq fp16 atinge uma aceleração de até 3x , em comparação com o treinamento PyTorch fp16.
O treinamento LightSeq int8 atinge uma aceleração de até 5x , em comparação com PyTorch QAT (ou seja, treinamento com reconhecimento de quantização).
A inferência LightSeq fp16 e int8 atinge uma aceleração de até 12x e 15x , em comparação com a inferência PyTorch fp16, respectivamente.
LightSeq oferece suporte a vários recursos, mostrados na tabela abaixo.
Características | Lista de suporte |
---|---|
Modelo | Transformador, BERT, BART, GPT2, ViT, T5, MT5, XGLM, VAE, Multilíngue, MoE |
Camada | incorporação, codificador, decodificador, critério, otimizador |
Precisão | fp32, fp16, int8 |
Modo | treinamento, inferência |
Compatibilidade | Fairseq, Abraçando Rosto, DeepSpeed |
Algoritmo de decodificação | pesquisa de feixe, pesquisa de feixe diverso, amostragem, CRF |
Outros | quantização de comunicação gradiente, algoritmo GEMM de ajuste automático |
A tabela abaixo mostra os modos de operação e a precisão atualmente suportados por diferentes modelos.
Modelos | Treinamento fp16 | Inferência fp16 | Treinamento int8 | Inferência int8 |
---|---|---|---|---|
Transformador | Sim | Sim | Sim | Sim |
BERTO | Sim | Sim | Sim | Sim |
GPT2 | Sim | Sim | Sim | Sim |
BARTO | Sim | Sim | - | - |
T5 | - | Sim | - | - |
MT5 | - | Sim | - | - |
XGLM | - | Sim | - | - |
ViT | Sim | Sim | Sim | Sim |
VAE | - | Sim | - | - |
Multilíngue | - | Sim | - | Sim |
Ministério da Educação | - | Sim | - | - |
Testamos a aceleração do treinamento e inferência LightSeq usando precisão de mistura fp16 e int8 em modelos Transformer e BERT. A linha de base é a precisão de mixagem PyTorch fp16. Os experimentos de treinamento são testados em uma GPU A100 e os experimentos de inferência são testados em oito GPUs A100.
Mais resultados de desempenho estão disponíveis aqui.
Tamanho do token do lote | 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 |
15.000 | 0,43 | 1,44 | 1,44 |
Tamanho do token de lote | 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 |
Tamanho do lote | Comprimento da sequência | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 8h00 | 9h33 |
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 | 14h44 |
32 | 32 | 9,68 | 11h15 |
32 | 128 | 6,68 | 7,74 |
Tamanho do lote | Comprimento da sequência | LightSeq fp16 | LightSeq int8 |
---|---|---|---|
1 | 8 | 9.22 | 9,87 |
1 | 32 | 10.51 | 11h30 |
1 | 128 | 9,96 | 10,85 |
8 | 8 | 9,88 | 10h33 |
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 |
Você pode instalar o LightSeq do PyPI, que suporta apenas Python 3.6 a 3.8 no Linux:
pip instalar lightseq
Você também pode construir a partir do código-fonte:
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 pip install -e $PROJECT_DIR
A introdução detalhada do edifício está disponível aqui.
Fornecemos vários exemplos aqui para mostrar o uso do LightSeq. Consulte o guia do usuário completo e exemplos para obter mais detalhes.
Você pode usar os módulos fornecidos pelo LightSeq para construir seus próprios modelos. A seguir está um exemplo de construção de uma camada codificadora do Transformer.
Primeiro, importe o módulo codificador LightSeq Transformer:
de lightseq.training importar LSTransformerEncoderLayer
Em seguida, crie uma configuração de codificador e crie uma camada de codificador LightSeq Transformer inicializada com a configuração:
configuração = 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, )camada = LSTransformerEncoderLayer(config)
Além das camadas do codificador, os outros módulos podem ser criados usando métodos semelhantes e, em seguida, treinados como modelos PyTorch normais.
Mais uso está disponível aqui.
LightSeq integra todos os módulos rápidos e relâmpagos no Fairseq.
Primeiro instale os dois seguintes requisitos:
pip install fairseq==0.10.2 sagrados
Você pode treinar uma tarefa de tradução de precisão mista fp16 no conjunto de dados wmt14 en2de:
sh exemplos/training/fairseq/ls_fairseq_wmt14en2de.sh
(Opcional) Em seguida, você pode iniciar o treinamento de precisão de mix int8 com base nos modelos de pré-treinamento fp16:
sh exemplos/training/fairseq/ls_fairseq_quant_wmt14en2de.sh
Mais uso está disponível aqui.
LightSeq substitui as camadas codificadoras do Hugging Face BERT por camadas rápidas LightSeq.
Primeiro você deve instalar estes requisitos:
pip instala conjuntos de dados sequenciais de transformadores
Antes de fazer o próximo treinamento, você precisa mudar para o seguinte diretório:
exemplos de cd/treinamento/huggingface/bert
Então você pode ajustar facilmente o BERT para diferentes tarefas. Tomando como exemplo a tarefa de reconhecimento de entidade nomeada, você pode treinar o BERT com precisão mista fp16 usando:
python task_ner/run_ner.sh
(Opcional) Você também pode iniciar o treinamento de precisão de mix int8 com base em modelos de pré-treinamento fp16:
python task_ner/run_quant_ner.sh
Mais uso está disponível aqui.
Após o treinamento usando os scripts acima, você pode inferir rapidamente os modelos usando LightSeq.
Você deve transformar os pesos PyTorch fp16 em LightSeq protobuf ou HDF5:
exportação python/fairseq/ls_fs_transformer_export.py
(Opcional) Você também pode transformar os pesos int8 PyTorch em LightSeq protobuf ou HDF5:
exportação python/fairseq/ls_fs_quant_transformer_export.py
Depois de obter os pesos LightSeq, você pode inferi-los rapidamente usando o seguinte código:
importar lightseq.inference como lsimodel = lsi.Transformer(MODEL_PATH, MAX_BATCH_SIZE)resultados = model.infer([[63, 47, 65, 1507, 88, 74, 10, 2057, 362, 9, 284, 6, 2, 1 ]])
Aqui MODEL_PATH é o caminho dos seus pesos LightSeq e MAX_BATCH_SIZE é o tamanho máximo do lote das suas sentenças de entrada.
Você também pode inferir rapidamente os pesos int8 LightSeq substituindo lsi.Transformer
por lsi.QuantTransformer
.
Mais uso está disponível aqui.
Fornecemos um exemplo end2end bert-base para ver o quão rápido o Lightseq é comparado ao Hugging Face original.
Primeiro você deve instalar os requisitos e localizar no diretório especificado:
pip install transformerscd exemplos/inferência/python
Então você pode verificar o desempenho simplesmente executando os seguintes comandos. hf_bert_export.py
é usado para transformar pesos PyTorch em LightSeq protobuf ou HDF5.
exportação python/huggingface/hf_bert_export.py teste python/ls_bert.py
Mais uso está disponível aqui.
Fornecemos uma imagem docker que contém tritonserver e a biblioteca de link dinâmico do LightSeq, e você pode implantar um servidor de inferência simplesmente substituindo o arquivo de modelo por seu próprio arquivo de modelo.
sudo docker pull hexisyztem/tritonserver_lightseq:22.01-1
Mais uso está disponível aqui.
Se você usa LightSeq em sua pesquisa, cite os seguintes artigos.
@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} }
A equipe LightSeq está contratando estagiários e FTEs com experiência em sistemas de aprendizagem profunda, processamento de linguagem natural, visão computacional, fala, etc. Estamos sediados em Pequim e Xangai. Se você estiver interessado, envie seu currículo para [email protected].