發行說明
介紹
支援矩陣
表現
變壓器訓練加速
BERT 訓練加速
Transformer 推理加速
BERT 推理加速
安裝
從 PyPI 安裝
從原始碼構建
入門
從頭開始進行 LightSeq 訓練
Fairseq 的 LightSeq 培訓
來自 Hugging Face BERT 的 LightSeq 訓練
Fairseq 的 LightSeq 推理
來自 Hugging Face BERT 的 LightSeq 推理
使用推理伺服器進行 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 Inference Server 的服務後端。借助 LightSeq,人們只需很少的額外程式碼就可以輕鬆開發修改後的 Transformer 架構。
LightSeq 訓練和推理速度非常快。下面是整體表現:
與 PyTorch fp16 訓練相比,LightSeq fp16 訓練可達到高達3 倍的加速。
與 PyTorch QAT(即量化感知訓練)相比,LightSeq int8 訓練可達到高達5 倍的加速。
與 PyTorch fp16 推理相比,LightSeq fp16 和 int8 推理分別實現了高達12 倍和15 倍的加速。
LightSeq 支援多種功能,如下表所示。
特徵 | 支持名單 |
---|---|
模型 | Transformer、BERT、BART、GPT2、ViT、T5、MT5、XGLM、VAE、多語言、MoE |
層 | 嵌入、編碼器、解碼器、標準、優化器 |
精確 | fp32、fp16、int8 |
模式 | 訓練、推理 |
相容性 | Fairseq、擁抱臉部、DeepSpeed |
解碼演算法 | 波束搜尋、多樣化波束搜尋、取樣、CRF |
其他的 | 梯度通訊量化、自動調整GEMM演算法 |
下表列出了不同型號目前支援的運行模式和精度。
型號 | fp16 訓練 | fp16 推理 | int8培訓 | int8 推理 |
---|---|---|---|---|
變壓器 | 是的 | 是的 | 是的 | 是的 |
伯特 | 是的 | 是的 | 是的 | 是的 |
GPT2 | 是的 | 是的 | 是的 | 是的 |
捷運 | 是的 | 是的 | - | - |
T5 | - | 是的 | - | - |
MT5 | - | 是的 | - | - |
XGLM | - | 是的 | - | - |
維特 | 是的 | 是的 | 是的 | 是的 |
VAE | - | 是的 | - | - |
多種語言 | - | 是的 | - | 是的 |
教育部 | - | 是的 | - | - |
我們在 Transformer 和 BERT 模型上使用 fp16 和 int8 混合精度測試 LightSeq 訓練和推理的加速。基線是 PyTorch fp16 混合精度。訓練實驗在 1 個 A100 GPU 上進行測試,推理實驗在 8 個 A100 GPU 上進行測試。
更多性能結果可在此處獲得。
批量令牌大小 | 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 |
您可以從 PyPI 安裝 LightSeq,它僅支援 Linux 上的 Python 3.6 至 3.8:
pip 安裝 lighteq
您也可以從原始碼建置:
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 pip install -e $PROJECT_DIR
詳細的建築介紹可以在這裡查看。
我們在這裡提供了幾個範例來展示 LightSeq 的用法。有關更多詳細信息,請參閱完整的用戶指南和範例。
您可以使用LightSeq提供的模組來建立自己的模型。以下是建立 Transformer 編碼器層的範例。
首先,導入LightSeq Transformer編碼器模組:
從 lighteq.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_drout_size = 40.rat,l. _ratio = 0.1,pre_layer_norm = True,啟動_ fn =“relu”,fp16 =正確,local_rank=0, )層 = LSTransformerEncoderLayer(配置)
除了編碼器層之外,其他模組都可以使用類似的方法創建,然後像正常的 PyTorch 模型一樣進行訓練。
更多用法可以在這裡找到。
LightSeq 將所有快速和閃電模組整合到 Fairseq 中。
首先安裝以下兩個要求:
pip install fairseq==0.10.2 sacremoses
您可以透過以下方式在 wmt14 en2de 資料集上訓練 fp16 混合精確度翻譯任務:
sh 範例/訓練/fairseq/ls_fairseq_wmt14en2de.sh
(可選)然後可以在fp16預訓練模型的基礎上開始int8混合精度訓練:
sh 範例/訓練/fairseq/ls_fairseq_quant_wmt14en2de.sh
更多用法可以在這裡找到。
LightSeq 以 LightSeq 快速層取代了 Hugging Face BERT 的編碼器層。
首先您應該安裝這些要求:
pip install Transformers seqeval 資料集
在進行下一步訓練之前,需要切換到以下目錄:
cd 範例/訓練/huggingface/bert
然後您可以輕鬆地針對不同的任務微調 BERT。以命名實體辨識任務為例,您可以使用以下方法訓練 fp16 混合精確度的 BERT:
python task_ner/run_ner.sh
(可選)您也可以在fp16預訓練模型的基礎上開始int8混合精度訓練,方法是:
python task_ner/run_quant_ner.sh
更多用法可以在這裡找到。
使用上述腳本進行訓練後,您可以使用 LightSeq 快速推斷模型。
您應該將 fp16 PyTorch 權重轉換為 LightSeq protobuf 或 HDF5:
python 匯出/fairseq/ls_fs_transformer_export.py
(可選)您也可以將 int8 PyTorch 權重轉換為 LightSeq protobuf 或 HDF5:
python 匯出/fairseq/ls_fs_quant_transformer_export.py
獲得 LightSeq 權重後,您可以使用以下程式碼快速推斷它們:
導入 lighteq.inference as lsimodel = lsi.Transformer(MODEL_PATH, MAX_BATCH_SIZE)results = model.infer([[63, 47, 65, 1507, 88, 74, 10, 2057, 362, 28, 206, 212, 212, 28, 284, 212, 284, 212, 284, 284, 284, 212, 284, 212, 284, 284, 212, 284, 284, 212, 284, 212, 284, 212, 284, 212, 284, 284, 284, 212, 284, 212 ]])
這裡 MODEL_PATH 是 LightSeq 權重的路徑,MAX_BATCH_SIZE 是輸入句的最大批次大小。
您也可以透過將lsi.Transformer
替換為lsi.QuantTransformer
來快速推斷 int8 LightSeq 權重。
更多用法可以在這裡找到。
我們提供了一個基於 bert 的 end2end 範例來看看 Lightseq 與原始 Hugging Face 相比有多快。
首先,您應該安裝要求並定位到指定的目錄:
pip install Transformerscd 範例/推理/python
然後您只需運行以下命令即可檢查效能。 hf_bert_export.py
用於將 PyTorch 權重轉換為 LightSeq protobuf 或 HDF5。
python 導出/huggingface/hf_bert_export.py 蟒蛇測試/ls_bert.py
更多用法可以在這裡找到。
我們提供了一個docker映像,其中包含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]。