リリースノート
導入
サポートマトリックス
パフォーマンス
変圧器トレーニングの高速化
BERTトレーニングの高速化
Transformer 推論の高速化
BERT推論の高速化
インストール
PyPIからインストール
ソースからビルドする
はじめる
ゼロからの LightSeq トレーニング
Fairseq の LightSeq トレーニング
顔をハグする BERT からの LightSeq トレーニング
Fairseq からの LightSeq 推論
ハグ顔 BERT からの LightSeq 推論
推論サーバーを使用した LightSeq のデプロイメント
引用してください
採用中です!
[2022.10.25] int8 混合精度トレーニングと推論をサポートする v3.0.0 バージョンをリリースしました。 [中文介绍]
[2021.06.18] fp16混合精度トレーニングに対応したv2.0.0バージョンをリリースしました。 [中文介绍]
[2019.12.06] fp16 混合精度推論をサポートした v1.0.0 バージョンをリリースしました。 [中文介绍]
LightSeq は、CUDA で実装されたシーケンスの処理と生成のための高性能トレーニングおよび推論ライブラリです。 BERT、GPT、Transformer などの最新の NLP および CV モデルの高効率な計算が可能になります。したがって、機械翻訳、テキスト生成、画像分類、およびその他のシーケンス関連タスクに最も役立ちます。
このライブラリは、CUDA 公式ライブラリ (cuBLAS、Thrust、CUB) と、Transformer モデル ファミリ用に特別に融合および最適化されたカスタム カーネル関数をベースにして構築されています。モデル コンポーネントに加えて、推論ライブラリは、展開が簡単なモデル管理と、TensorRT Inference Server に基づくバックエンドの提供も提供します。 LightSeq を使用すると、コードを少し追加するだけで、変更された Transformer アーキテクチャを簡単に開発できます。
LightSeq のトレーニングと推論は非常に高速です。全体的なパフォーマンスは以下のとおりです。
LightSeq fp16 トレーニングは、PyTorch fp16 トレーニングと比較して最大3 倍の高速化を実現します。
LightSeq int8 トレーニングは、PyTorch QAT (つまり、量子化対応トレーニング) と比較して、最大5 倍の高速化を達成します。
LightSeq fp16 および int8 推論は、PyTorch fp16 推論と比較して、それぞれ最大12 倍および15 倍の高速化を実現します。
LightSeq は、以下の表に示す複数の機能をサポートしています。
特徴 | サポートリスト |
---|---|
モデル | 変圧器、BERT、BART、GPT2、ViT、T5、MT5、XGLM、VAE、多言語、MoE |
層 | エンベディング、エンコーダー、デコーダー、基準、オプティマイザー |
精度 | fp32、fp16、int8 |
モード | トレーニング、推論 |
互換性 | フェアシーク、ハグフェイス、ディープスピード |
デコードアルゴリズム | ビームサーチ、多様ビームサーチ、サンプリング、CRF |
その他 | 勾配通信量子化、自動調整 GEMM アルゴリズム |
以下の表は、さまざまなモデルで現在サポートされている実行モードと精度を示しています。
モデル | FP16トレーニング | fp16推論 | int8 トレーニング | int8 推論 |
---|---|---|---|---|
トランス | はい | はい | はい | はい |
バート | はい | はい | はい | はい |
GPT2 | はい | はい | はい | はい |
バート | はい | はい | - | - |
T5 | - | はい | - | - |
MT5 | - | はい | - | - |
XGLM | - | はい | - | - |
ViT | はい | はい | はい | はい |
VAE | - | はい | - | - |
多言語対応 | - | はい | - | はい |
教育省 | - | はい | - | - |
Transformer モデルと BERT モデルで fp16 と int8 の両方の混合精度を使用して、LightSeq トレーニングと推論の高速化をテストします。ベースラインは PyTorch fp16 ミックス精度です。トレーニング実験は 1 台の A100 GPU でテストされ、推論実験は 8 台の A100 GPU でテストされます。
その他のパフォーマンス結果については、こちらをご覧ください。
バッチトークンのサイズ | PyTorch QAT | ライトシーク 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 | ライトシーク 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 |
バッチサイズ | シーケンスの長さ | ライトシーク 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 |
バッチサイズ | シーケンスの長さ | ライトシーク 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 |
Linux では Python 3.6 ~ 3.8 のみをサポートする PyPI から LightSeq をインストールできます。
pip インストール lightseq
ソースからビルドすることもできます。
PATH=/usr/local/hdf5/:$PATH ENABLE_FP32=0 ENABLE_DEBUG=0 pip install -e $PROJECT_DIR
詳しい建物紹介はこちらから。
ここでは、LightSeq の使用法を示すためにいくつかのサンプルを提供します。詳細については、完全なユーザー ガイドと例を参照してください。
LightSeq が提供するモジュールを使用して、独自のモデルを構築できます。以下は、Transformer エンコーダ レイヤーを構築する例です。
まず、LightSeq Transformer エンコーダ モジュールをインポートします。
lightseq.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_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)
エンコーダー層に加えて、他のモジュールも同様の方法を使用して作成でき、通常の PyTorch モデルとしてトレーニングできます。
さらに詳しい使い方はこちらからご覧いただけます。
LightSeq は、すべての高速モジュールと Lightning モジュールを Fairseq に統合します。
まず、次の 2 つの要件をインストールします。
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 は、Hugging Face BERT のエンコーダー層を LightSeq 高速層に置き換えます。
まず、次の要件をインストールする必要があります。
pip インストール トランスフォーマー seqeval データセット
次のトレーニングを行う前に、次のディレクトリに切り替える必要があります。
CD の例/トレーニング/ハグフェイス/バート
そうすれば、さまざまなタスクに合わせて 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 の重みを取得したら、次のコードを使用してそれらをすぐに推測できます。
import lightseq.inference as 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 ]])
ここで、MODEL_PATH は LightSeq 重みのパス、MAX_BATCH_SIZE は入力文の最大バッチ サイズです。
lsi.Transformer
lsi.QuantTransformer
に置き換えることによって、 int8 LightSeq の重みをすばやく推論することもできます。
さらに詳しい使い方はこちらからご覧いただけます。
Lightseq が元の Hugging Face と比較してどれだけ速いかを確認するために、end2end bert-base の例を提供します。
まず、要件をインストールし、指定されたディレクトリに移動する必要があります。
pip installTransformerscd 例/推論/Python
その後、次のコマンドを実行するだけでパフォーマンスを確認できます。 hf_bert_export.py
は、PyTorch の重みを LightSeq protobuf または HDF5 に変換するために使用されます。
python エクスポート/ハギングフェイス/hf_bert_export.py Python テスト/ls_bert.py
さらに詳しい使い方はこちらからご覧いただけます。
tritonserver と LightSeq のダイナミック リンク ライブラリを含む Docker イメージが提供されており、モデル ファイルを独自のモデル ファイルに置き換えるだけで推論サーバーをデプロイできます。
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 チームは、深層学習システム、自然言語処理、コンピューター ビジョン、音声などの背景を持つインターンや FTE を採用しています。私たちは北京と上海に拠点を置いています。ご興味がございましたら、履歴書を [email protected] までお送りください。